Вы находитесь на странице: 1из 52

Estruturas de Controle Parte III Repetio

DCC 119 Algoritmos

Repetio
Chamadas de estruturas iterativas, iteraes, laos ou loops; Permitem repetir a execuo de uma ao vrias vezes; Podem ser:
1. 2. 3.

Repetio com Teste no Incio Repetio com Teste no Fim Repetio com Varivel de Controle

Repetio com Teste no Incio


Sintaxe: enquanto (condio) faa { C; } Semntica: Enquanto a condio for verdadeira, a seqncia ser repetida. Quando a condio fornecer resultado falso, o controle sai da estrutura passando para o comando seguinte ao final do bloco.

Repetio com Teste no Incio


Analogia:
Pseudolinguagem enquanto (condio) faa { C; } Linguagem C while (condio) { C; }
4

Repetio com Teste no Incio


Exemplo 1: Uso de FLAG
Obs.: FLAG um valor especfico fornecido aps o ltimo dado de entrada, que serve para indicar o fim dos dados de entrada. FLAG somente uma marca de fim dos dados de entrada (no um dado de entrada) e no pode ser processado. A leitura do FLAG informa ao programa que os dados de entrada terminaram e que ele deve partir para a execuo da finalizao de seu processamento (clculos finais, impresses finais etc.).
5

Repetio com Teste no Incio


Exemplo 1: Uso de FLAG
Obs.: Controle de processamento genrico para uso de FLAG: ... leia (o 1 conjunto de dados); enquanto (no for FLAG) faa { processar o conjunto de dados lido; leia (o prximo conjunto de dados); } finalizar processamento; ...
6

Repetio com Teste no Incio


Exemplo 1: Uso de FLAG

Desenvolver um algoritmo para ler uma seqncia de nmeros inteiros, calcular e imprimir o quadrado de cada nmero lido. O ltimo valor a ser lido um FLAG = 0.

Repetio com Teste no Incio


Exemplo 1: Algoritmo em pseudolinguagem
principal { inteiro NUM, QUADRADO; leia(NUM); // l o 1 conjunto de dados enquanto (NUM 0) faa // testa se no FLAG { QUADRADO NUM*NUM; imprima (QUADRADO); leia(NUM); // l o prximo conjunto de dados } }

Repetio com Teste no Incio


Exemplo 1: Teste do Algoritmo
Considerando que sero fornecidos os seguintes dados de entrada: 2 -3 1 4 0 O resultado do teste (teste de mesa) seria:
NUM QUADRADO Imprime

2 -3 1 4 0

4 9 1 16

4 9 1 16

Repetio com Teste no Incio


Exemplo 1: Programa em C
#include <stdio.h> int main() { int num, quadrado; // imprime uma msg e l o 1o. numero inteiro printf("Digite um nmero inteiro: "); scanf("%d", &num); while( num != 0) { quadrado = num * num; printf("\nO quadrado de %d %d: ", num, quadrado); printf("\nDigite um nmero inteiro: "); scanf("%d", &num); } return 0; }

10

Repetio com Teste no Incio


Exemplo 2: Uso de acumulador
Desenvolver um algoritmo para ler uma seqncia de nmeros inteiros com FLAG = 0, calcular e imprimir a soma desses nmeros. Importante: Uma forma possvel para resolver o problema de somatrio de valores (acumulador) imaginar uma varivel que armazena as somas parciais. Essa varivel deve iniciar com zero e somar nmero por nmero, at o final da seqncia.

11

Repetio com Teste no Incio


Exemplo 2: Algoritmo em pseudolinguagem
principal { inteiro NUM, SOMA; SOMA 0; leia(NUM); enquanto (NUM 0) faa { SOMA SOMA + NUM; leia(NUM); } imprima (SOMA); }
12

Repetio com Teste no Incio


Exemplo 2: Teste do Algoritmo
Considerando que sero fornecidos os seguintes dados de entrada: 8 -3 2 1 0 O resultado do teste seria:
NUM SOMA Imprime

0 8 -3 2 1 0 8 5 7 8 8
13

Repetio com Teste no Incio


Exemplo 2: Programa em C
#include <stdio.h> int main() { int num, soma; // imprime uma msg e l o 1o. numero inteiro printf("Digite um nmero inteiro: "); scanf("%d", &num); soma = 0; // obritrio inicializar com 0 while( num != 0) { soma = soma + num; // acumula os valores em SOMA printf("\nDigite um nmero inteiro: "); scanf("%d", &num); } printf("A soma dos numeros digitados foi %d.", soma); return 0; }
14

Repetio com Teste no Incio


Exemplo 3: Uso de contador
Desenvolver um algoritmo para ler uma seqncia de nmeros inteiros com FLAG = 0, calcular e imprimir a quantidade de nmeros lidos.

Obs.: Contador um acumulador que incrementado de 1 em 1.

15

Repetio com Teste no Incio


Exemplo 3: Algoritmo em pseudolinguagem
principal { inteiro NUM, CONT; CONT 0; leia(NUM); enquanto (NUM 0) faa { CONT CONT + 1; leia(NUM); } imprima (CONT); }
16

Repetio com Teste no Incio


Exemplo 3: Teste do Algoritmo
Considerando que sero fornecidos os seguintes dados de entrada: 8 -3 2 1 0 O resultado do teste seria:
NUM CONT Imprime

0 8 -3 2 1 0 1 2 3 4 4
17

Repetio com Teste no Incio


Exemplo 3: Programa em C
#include <stdio.h> int main() { int num, cont; // 'cont' representa o contador // imprime uma msg e l o 1o. numero inteiro printf("Digite um nmero inteiro: "); scanf("%d", &num); cont = 0; while( num != 0) { cont = cont + 1; printf("\nDigite um nmero inteiro: "); scanf("%d", &num); } printf(Foram lidos %d numeros.", cont); return 0; }
18

Repetio com Teste no Incio


Exemplo 4:
Desenvolver um algoritmo para ler uma seqncia de nmeros inteiros com FLAG = 0, calcular e imprimir a mdia aritmtica dos nmeros lidos.

Obs.: considerando NUM como a varivel de leitura:


N

NUM
MEDIA =
1

SOMA = N

SOMA MEDIA = CONT

19

Repetio com Teste no Incio


Exemplo 4: Algoritmo em pseudolinguagem
principal { inteiro NUM, SOMA, CONT; real MEDIA; SOMA 0; CONT 0; leia(NUM); enquanto (NUM 0) faa { SOMA SOMA + NUM; CONT CONT + 1; leia(NUM); } MEDIA SOMA / CONT; imprima (MEDIA); }

20

Repetio com Teste no Incio


Exemplo 4: Teste do Algoritmo
Considerando que sero fornecidos os seguintes dados de entrada: 2 9 4 22 1 7 0 O resultado do teste seria: NUM SOMA CONT MEDIA Imprime 0 0 2 9 4 22 1 7 0 2 11 15 37 38 45 1 2 3 4 5 6 7.5 7.5
21

Repetio com Teste no Incio


Exemplo 4: Programa em C
#include <stdio.h> int main() { int soma, num, cont; // 'cont' representa o contador e soma o acumulador float media; // imprime uma msg e l o 1o. numero inteiro printf("Digite um nmero inteiro: "); scanf("%d", &num); cont = 0; soma = 0; while( num != 0) { cont = cont + 1; // contador soma = soma + num; // acumulador printf("\nDigite um nmero inteiro: "); scanf("%d", &num); } media = soma / (float) cont; printf("A media dos numeros lidos foi %.2f.", media); return 0; }
22

Repetio com Teste no Incio


Exemplo 5:
Desenvolver um algoritmo para ler um nmero inteiro positivo, calcular e imprimir a soma de seus algarismos. Obs.: Por exemplo, para o nmero 123, a sada deve ser: 1+2+3 = 6. Como separar os dgitos?
123 mod 10 = 3 123 div 10 = 12 12 mod 10 = 2 12 div 10 = 1 1 mod 10 = 1 1 div 10 = 0

3+2+1=6
23

Repetio com Teste no Incio


Exemplo 5: Algoritmo em pseudolinguagem
principal { inteiro NUM, DIGITO, SOMA; SOMA 0; leia(NUM); enquanto (NUM 0) faa { DIGITO NUM mod 10; \\obtm ultimo digito NUM NUM div 10; \\elimina o ultimo digito SOMA SOMA + DIGITO; } imprima (SOMA); }
24

Repetio com Teste no Incio


Exemplo 5: Teste do Algoritmo
Considerando que sero fornecidos o seguinte dado de entrada: 374 O resultado do teste seria:
NUM DIGITO SOMA Imprime

0 374 37 3 0 4 7 3 4 11 14 14

25

Repetio com Teste no Incio


Exemplo 5: Programa em C
#include <stdio.h> int main() { // 'digito' representa o digito mais a direita de 'num' int digito, num, soma; printf("Digite um nmero inteiro: "); scanf("%d", &num); soma = 0; while( num != 0) { digito = num % 10; // obtm o ultimo digito num = num / 10; // elimina o ultimo digito soma = soma + digito; } printf("A soma dos digitos foi %d.", soma); return 0; }
26

Repetio com Teste no Final


Sintaxe:
faa { C; } enquanto( condio ) ;

Semntica: Enquanto a condio for verdadeira, a seqncia ser repetida. Quando a condio fornecer resultado falso, o controle sai da estrutura passando para o comando seguinte.

27

Repetio com Teste no Final


Analogia:
Pseudolinguagem faa { C; }enquanto(condio) ; Linguagem C do { C; } while (condio);
28

Repetio com Teste no Final


Exemplo 1:
Desenvolver um algoritmo para ler 100 nmeros inteiros, calcular e imprimir o quadrado de cada nmero lido. principal { inteiro NUM, CONT; CONT 0; faa { leia(NUM); imprima(potencia(NUM,2)); CONT CONT + 1; } enquanto (CONT < 100); }
29

Repetio com Teste no Final


Exemplo 1: Programa em C
#include <stdio.h> int main() { int num, cont; cont = 0; do { scanf("%d", &num); printf("\n%d ao quadrado = %d", num, num*num); cont = cont + 1; }while (cont < 100); return 0; }

30

Repetio com Teste no Final


Exemplo 2: Qual a diferena?
A 0; faa { imprima(A); A A + 1; }enquanto( A < 10);

A 0; enquanto (A < 10) faa { imprima(A); A A + 1; }

31

Repetio com Teste no Final


Exemplo 3: O algoritmo abaixo utiliza o faaenquanto para imprimir os valores inteiros que se encontram entre um valor inicial e um valor final. principal { inteiro NUM_INICIAL, NUM_FINAL, I; leia(NUM_INICIAL); leia(NUM_FINAL); I NUM_INICIAL; faa { imprima (Valor de I: ,I); I I + 1; }enquanto (I NUM_FINAL); }
32

Repetio com Teste no Final


Exemplo 3: Programa em C
#include <stdio.h> int main() { // 'digito' representa o digito mais a direita de 'num' int num_inicial, num_final, i; printf("Digite o nmero inicial: "); scanf("%d", &num_inicial); printf("Digite o nmero final: "); scanf("%d", &num_final); i = num_inicial; do { printf("valor de i: %d\n", i); i++; // ou i = i + 1; } while(i <= num_final); return 0; }

33

Repetio com Varivel de Controle


Sintaxe:

para (V I; V L; V I+P) faa { C; }


Sendo que: V a varivel de controle I o valor inicial de V L o valor limite de V P o incremento sofrido por V aps cada execuo da ao C (bloco ou domnio da estrutura).
34

Repetio com Varivel de Controle


Sintaxe:

para (V I; V L; V I+P) faa { C; }


Semntica: o controle de fluxo de execuo entra na estrutura e faz a etapa de inicializao (V I) iniciando a estrutura de repetio na seguinte seqncia: (1) executa o teste (V L). Se for vlido, vai para o passo seguinte. Seno, executa o primeiro comando aps a estrutura de repetio; (2) executa a ao C; (3) executa o incremento/decremento (V V + P); (4) retorna ao passo 1.

35

Repetio com Varivel de Controle


Exemplo: SOMA 0; para (IMPAR 1; IMPAR <18; IMPAR { SOMA SOMA + IMPAR; } imprima (SOMA); IMPAR + 2)faa

36

Repetio com Varivel de Controle


Analogia:
Pseudolinguagem para (V I; V <= L; V V + P) faa { C; } Linguagem C for (V = I; V <= L; V = V + P) { C; }
37

Repetio com Varivel de Controle Exemplo 1: O algoritmo abaixo utiliza o parafaa para imprimir os valores inteiros que se encontram entre um valor inicial e um valor final. principal { inteiro NUM_INICIAL, NUM_FINAL, I; leia(NUM_INICIAL); leia(NUM_FINAL); para (I NUM_INICIAL; I NUM_FINAL; I { imprima (Valor de I: ,I); } }

I+1) faa

38

Repetio com Varivel de Controle


Exemplo 1: Programa em C
#include <stdio.h> int main() { int num_inicial, num_final, i; printf("Digite o nmero inicial: "); scanf("%d", &num_inicial); printf("Digite o nmero final: "); scanf("%d", &num_final); for( i = num_inicial; i <= num_final; i++) { printf("valor de i: %d\n", i); } return 0; }

39

Repetio com Varivel de Controle


Exemplo 2: Fazer um algoritmo para calcular e
imprimir a tabuada de multiplicao do nmero TAB entre 1 e NUM. principal { inteiro I, TAB, NUM; leia(TAB); leia(NUM); 1; I <= NUM; I I + 1) faa para (I { imprima (I, x , TAB, = , I*TAB); } }
40

Repetio com Varivel de Controle


Exemplo 2: Programa em C
#include <stdio.h> int main() { int i, tab, num; printf("Tabuada de: "); scanf("%d", &tab); printf("Ate que numero: "); scanf("%d", &num); for( i = 1; i <= num; i++) { printf("%d x %d = %d\n", i, tab, i*tab); } return 0; }

41

Estruturas de Controle (Resumo)


Uma estrutura de controle controla o fluxo de execuo dos comandos que constituem o seu domnio (ou bloco). Podem ser: 1. Seqncia Simples. 2. Alternativa: 2.1. Simples (se). 2.2. Dupla (se-seno). 2.3. Mltipla Escolha (escolha). 3. Repetio: 3.1. Com Teste no Incio (enquanto-faa). 3.2. Com Teste no Final (faa-enquanto). 3.3. Com Varivel de Controle (para-faa).
42

Estruturas de Controle (Resumo)


Em qualquer estrutura de controle, s existe um ponto de entrada e um ponto de sada do fluxo de execuo. Formato geral de um algoritmo (programa): principal { declarao de variveis; inicializao de variveis; corpo do algoritmo controlando: leitura; processamento; sada; }

43

Estruturas de Controle (Resumo)


O corpo do algoritmo constitudo exclusivamente de estruturas de controle. S existem duas maneiras de se ligar duas estruturas de controle do corpo de um algoritmo: 1. Em seqncia: ... incio da estrutura 1 fim da estrutura 1 incio da estrutura 2 fim da estrutura 2 ... 2. Encadeadas (concatenadas): ... incio da estrutura 1 incio da estrutura 2 fim da estrutura 2 fim da estrutura 1 ...
44

Comandos iterativos Exerccios


1. 2. 3. 4. Fazer um algoritmo que imprima todos os nmeros pares no intervalo 1-100. Fazer um algoritmo que imprima todos os nmeros de 100 at 1. Ler um nmero inteiro e positivo e verificar se este ou no um nmero primo. Dada uma dvida de 10000 reais que cresce a juros de 2,5% ao ms e uma aplicao de 1500 reais com rendimento de 4% ao ms, escrever um algoritmo que determina o nmero de meses necessrios para pagar a dvida. Calcular o valor de S:

5.

2 2 2 23 2 25 S= + + +L+ 50 48 46 2

45

Comandos de Repetio
DCC 120

46

Comandos iterativos em C
while do...while for (enquanto..faa) (faa..enquanto) (para..faa)

47

while
Sintaxe: while(condio) { <comandos>; } int main() { int i; i=0; while (i<=10) { printf("%d\n",i); i++; } return 0; }
48

do while
Sintaxe: do { <comandos>; } while(condio);
int main() { int i; i=0; do { printf("%d\n",i); i++; } while (i<=10); return 0; }
49

for
Sintaxe: for(inicializao;condio;incremento) { <comandos>; } int main() { int i; for ( i=0 ; i<=10 ; i++) { printf("%d\n",i); }
return 0; Primeira vez que executa o for: Inicializao Condio VERDADEIRO: Bloco de comandos FALSO: sai do for Demais vezes: Incremento Condio VERDADEIRO: Bloco de comandos FALSO: sai do for
50

Exerccios
1) Escrever um algoritmo que l um valor N inteiro e positivo e que calcula e escreve o valor de E. E = 1 + 1/2 + 1/3 + ... + 1/N Escreva um algoritmo que leia 10 valores (usando a mesma varivel) e encontre o maior e o menor deles. Mostre o resultado. Chico tem 1,50 metro e cresce 2 centmetros por ano, enquanto Z tem 1,40 metro e cresce 3 centmetros por ano. Construa um algoritmo que calcule e imprima quantos anos sero necessrios para que Z seja maior que Chico. Escreva um algoritmo que leia a matrcula de um aluno e suas trs notas. Calcule a mdia ponderada do aluno, considerando que o peso para a maior nota seja 4 e para as duas restantes, 3. Mostre ao final a mdia calculada e uma mensagem "APROVADO" se a mdia for maior ou igual a 5 e "REPROVADO" se a mdia for menor que 5. Repita a operao at que o cdigo lido seja negativo. Escrever um algoritmo que l um valor N inteiro e positivo e que calcula e escreve o valor de E. E = 1 + 1/1! + 1/2! + 1/3! + ... + 1/N!
51

2)

3)

4)

5)

Exerccios
6) Faa um programa que, dado um conjunto de valores inteiros e positivos (fornecidos um a um pelo usurio), determine qual o menor valor do conjunto. O final do conjunto de valores conhecido atravs do valor zero, que no deve ser considerado. A converso de graus Fahrenheit para Centgrados obtida pela frmula C = 9/5(F 32). Escreva um programa que calcule e escreva uma tabela de graus centgrados em funo de graus Fahrenheit que variem de 50 a 150 de 1 em 1. Elabore um programa que calcule N! (fatorial de N), sendo que o valor inteiro de N fornecido pelo usurio. Sabendo que: N! = N x (N-1) x (N-2) x ... x 3 x 2 x 1; 0! = 1, por definio. Fazer um programa para calcular e mostrar os N primeiros termos da srie de Fibonacci. O nmero N fornecido pelo usurio. A srie de Fibonacci gerada da seguinte forma: f1 = f2 = 1; f3 = f1 + f2 = 2; f4 = f2 + f3 = 3;.... O primeiro e segundo termos valem 1 e os seguintes so calculados somando os dois termos anteriores.

7)

8)

9)

52

Вам также может понравиться