31
DIM0108.0 - Conceitos e Técnicas de Programação Estrutura de repetição David Déharbe 1 1 Wednesday, September 21, 2011

Estrutura de repetição · 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

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Estrutura de repetição · 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

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

Estrutura de repetição

David Déharbe

1

1Wednesday, September 21, 2011

Page 2: Estrutura de repetição · 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

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

Page 3: Estrutura de repetição · 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

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

Page 4: Estrutura de repetição · 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

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

Motivação

4

4Wednesday, September 21, 2011

Page 5: Estrutura de repetição · 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

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

Page 6: Estrutura de repetição · 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

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

Page 7: Estrutura de repetição · 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

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

Page 8: Estrutura de repetição · 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

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

Motivação

7

7Wednesday, September 21, 2011

Page 9: Estrutura de repetição · 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

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

Page 10: Estrutura de repetição · 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

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

Motivação

8

8Wednesday, September 21, 2011

Page 11: Estrutura de repetição · 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

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

Page 12: Estrutura de repetição · 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

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

Page 13: Estrutura de repetição · 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

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

Exemplo

10

10Wednesday, September 21, 2011

Page 14: Estrutura de repetição · 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

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

Page 15: Estrutura de repetição · 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

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

Page 16: Estrutura de repetição · 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

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

Page 17: Estrutura de repetição · 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

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

Page 18: Estrutura de repetição · 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

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

Page 19: Estrutura de repetição · 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

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

Page 20: Estrutura de repetição · 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

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

Exemplo 1

13

13Wednesday, September 21, 2011

Page 21: Estrutura de repetição · 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

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

Page 22: Estrutura de repetição · 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

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

Exemplo 2

14

14Wednesday, September 21, 2011

Page 23: Estrutura de repetição · 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

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

Page 24: Estrutura de repetição · 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

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

Exemplo 3

15

15Wednesday, September 21, 2011

Page 25: Estrutura de repetição · 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

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

Page 26: Estrutura de repetição · 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

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

Page 27: Estrutura de repetição · 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

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

Page 28: Estrutura de repetição · 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

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

Page 29: Estrutura de repetição · 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

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

Page 30: Estrutura de repetição · 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

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

Page 31: Estrutura de repetição · 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

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