Estrutura de repetição · DIM0108.0 - Conceitos e Técnicas de Programação Objetivos da aula...

Preview:

Citation preview

DIM0108.0 - Conceitos e Técnicas de Programação

Estrutura de repetição

David Déharbe

1

1Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

Objetivos da aula

•Conhecer uma estrutura de repetição:‣ com atribuição, sequência e condicional formam o cerne das construções necessárias para formar qualquer programa.

2

2Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

Roteiro da aula

•Motivação;

•Estrutura de repetição while:‣exemplos;‣ sintaxe;‣ semântica.

•Exercícios.

3

3Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

Motivação

4

4Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

Motivação

4

#include <stdio.h>

int main (){ printf("1\n"); printf("2\n"); printf("3\n"); printf("4\n"); printf("5\n"); printf("6\n"); printf("7\n"); printf("8\n"); printf("9\n"); printf("10\n");

return 0;}

4Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

Motivação

•Escreva um programa que imprima os 100 primeiros números naturais.

•Escreva um programa que imprima os 1000 primeiros números naturais.

•Escreva um programa que imprima os 10000 primeiros números naturais.

• ...

‣É uma tarefa repetitiva, onde a cada passo apenas devemos mudar o número impresso.‣A cada passo, a mudança é a mesma: somar 1.

5

5Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

Motivação

•Escreva um programa que calcula a média dos alunos de uma turma.‣ lê o número de alunos na turma‣ lê as notas de cada aluno‣ calcula a média‣ imprime a média

•O tamanho da entrada do programa é variável: depende do tamanho da turma.

6

6Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

Motivação

7

7Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

Motivação

7

#include <stdio.h>int test_bit(unsigned char n, unsigned p){ return n & (1 << p);}void print_bit(unsigned char n, unsigned p){ if (test_bit(n, p)) printf("1"); else printf("0");}

void print_uchar_binary(unsigned char n){ print_bit(n, 7); print_bit(n, 6); print_bit(n, 5); print_bit(n, 4); print_bit(n, 3); print_bit(n, 2); print_bit(n, 1); print_bit(n, 0);}

7Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

Motivação

8

8Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

Motivação

8

#include <stdio.h>int test_bit(unsigned char n, unsigned p){ return n & (1 << p);}void print_bit(unsigned char n, unsigned p){ if (test_bit(n, p)) printf("1"); else printf("0");}

void print_ushort_binary(unsigned short n){ print_bit(n, 15); print_bit(n, 14); print_bit(n, 13); print_bit(n, 12); print_bit(n, 11); print_bit(n, 10); print_bit(n, 9); print_bit(n, 8); print_bit(n, 7); print_bit(n, 6); print_bit(n, 5); print_bit(n, 4); print_bit(n, 3); print_bit(n, 2); print_bit(n, 1); print_bit(n, 0);}

8Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

Roteiro da aula

•Motivação;

•Estrutura de repetição while:‣exemplos;‣ sintaxe;‣ semântica.

•Exercícios.

9

9Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

Exemplo

10

10Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

Exemplo

10

#include <stdio.h>

int main (){ int i; i = 1; while (i <= 10) { printf("%d\n", i); i = i + 1; }

return 0;}

10Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

Exemplo

10

#include <stdio.h>

int main (){ int i; i = 1; while (i <= 10) { printf("%d\n", i); i = i + 1; }

return 0;}

#include <stdio.h>

int main (){ int i; i = 1; while (i <= 100) { printf("%d\n", i); i = i + 1; }

return 0;}

10Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

Exemplo

10

#include <stdio.h>

int main (){ int i; i = 1; while (i <= 10) { printf("%d\n", i); i = i + 1; }

return 0;}

#include <stdio.h>

int main (){ int i; i = 1; while (i <= 100) { printf("%d\n", i); i = i + 1; }

return 0;}

#include <stdio.h>

int main (){ int i; i = 1; while (i <= 1000) { printf("%d\n", i); i = i + 1; }

return 0;}

10Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

Exemplo

10

#include <stdio.h>

int main (){ int i; i = 1; while (i <= 10) { printf("%d\n", i); i = i + 1; }

return 0;}

#include <stdio.h>

int main (){ int i; i = 1; while (i <= 100) { printf("%d\n", i); i = i + 1; }

return 0;}

#include <stdio.h>

int main (){ int i; i = 1; while (i <= 1000) { printf("%d\n", i); i = i + 1; }

return 0;}

#include <stdio.h>

int main (){ int i; i = 1; while (i <= 1000000) { printf("%d\n", i); i = i + 1; }

return 0;}

10Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

Sintaxe

•(comando) := (estrutura de repetição)(estrutura de repetição) := while ( (expressão) ) (comando)‣ (expressão): teste; (comando): corpo.

•Exemplos:‣while (i < 2) s := s + i;

‣while (i != 1) { if (i % 2 == 0) i = i / 2; else i = 3 * i + 1;}

11

11Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

Semântica

•Receita para executar: while ( <exp> ) <cmd>•A expressão <exp> é avaliada.‣Se o resultado for verdadeiro (diferente de 0), então:

✓ o comando <cmd> é executado✓em seguida, o comando while ( <exp> ) <cmd> é executado novamente.

‣Se o resultado for falso (igual a 0), então✓ termina a execução;✓o comando seguinte é executado.

•Note que a execução começa pela avaliação de <exp>, o valor geralmente depende da execução de comandos anteriores.

12

12Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

Exemplo 1

13

13Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

Exemplo 1

13

#include <stdio.h>

int main (){ int i, m; scanf("%d\n", &m); i = 1; while (i <= m) { printf("%d\n", i); i = i + 1; }

return 0;}

13Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

Exemplo 2

14

14Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

Exemplo 2

14

#include <stdio.h>

int main (){ int i, n, s; scanf("%d\n", &n); i = 1; s = 0; while (i <= n) { s = s + i; i = i + 1; } printf("%d\n", s); return 0;}

14Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

Exemplo 3

15

15Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

Exemplo 3

15

#include <stdio.h>

int main (){ int i, n, s; scanf("%d\n", &n); i = 1; s = 0; while (i != n) { s = s + i; i = i + 2; } printf("%d\n", s); return 0;}

15Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

Atenção

•Estruturas de repetição devem ser empregadas com cuidados:‣obter o resultado certo,‣em um tempo finito.

•Receita:‣ invariante: as condições devem satisfazer as variáveis do programa quando o teste de repetição é avaliado.‣variante: uma fórmula com as variáveis do programa, com valor inteiro, sempre positivo ou nulo, e tal que o comando na repetição diminui o valor da fórmula.

16

16Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

•Invariante: s = 0 + 1 + ... + (i - 1) e 1 ≤ i

•Variante: n - i

•Resultado:‣ se n > 0, imprime a soma dos nprimeiros números naturais.‣ se n ≤ 0, imprime 0.

Exemplo

17

17Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

•Invariante: s = 0 + 1 + ... + (i - 1) e 1 ≤ i

•Variante: n - i

•Resultado:‣ se n > 0, imprime a soma dos nprimeiros números naturais.‣ se n ≤ 0, imprime 0.

Exemplo

17

#include <stdio.h>

int main (){ int i, n, s; scanf("%d\n", &n); i = 1; s = 0; while (i <= n) { s = s + i; i = i + 1; } printf("%d\n", s); return 0;}

17Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

Exercícios

•Escrever um programa que lê um número, digamos n, e imprime os n primeiros naturais ímpares.‣Exemplo: Para n = 4 a saída deverá ser 1,3,5,7.

•Escrever um programa que lê um número, digamos n, e imprime n! (n fatorial).‣Obs. n! = 1 x 2 x ... x n

•Escrever um programa que lê um número, digamos n, e imprime as n primeiras potências de dois.‣Exemplo: Para n = 5, a saída deverá ser 1, 2, 4, 8, 16.

•Comente as repetições com variante e invariante.18

18Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

Exercícios

•Escrever um programa que lê um número inteiro, digamos x, um número natural, digamos n, e imprime uma mensagem de erro quand n = x = 0 e, caso contrário imprime xn (x elevado à potência n).

•Escrever um programa que lê dois números inteiros, digamos q e r, um número natural, digamos n, e imprime os n primeiros termos da progressão aritmética de razão r e de valor inicial q.

•Escrever um programa que lê dois números inteiros, digamos q e r, um número natural, digamos n, e imprime os n primeiros termos da progressão geométrica de razão r e de valor inicial q.

•Escrever um programa que lê um número natural, digamos n, e lê n números, digamos v1 ... vn, e imprime a soma v1 + ... + vn.19

19Wednesday, September 21, 2011

DIM0108.0 - Conceitos e Técnicas de Programação

Conclusões

•Construção "while"

•Cuidados com o término e a correção dos cálculos.‣ cálculo de programas

•Se exercitar.

20

20Wednesday, September 21, 2011

Recommended