Académique Documents
Professionnel Documents
Culture Documents
Deise Saccol
Estruturas de repetio Adaptadas de Lminas da Profa. Patrcia Jaques e Mnica Py
Lgica de programao
ESTRUTURAS DE REPETIO
Se uma ao se repete em um algoritmo, em vez de escrev-la vrias vezes, em certos casos podemos resumir anotando uma vez s e solicitando que ela se repita, usando uma das estruturas de repetio. Podemos pedir que uma ao (ou um conjunto de aes) seja executada um nmero definido ou indefinido de vezes, ou enquanto um estado permanecer ou at que um estado seja atingido. As principais estruturas de repetio so:
ENQUANTO...REPETIR REPETIR...ENQUANTO PARA...AT...REPETIR
2
Lgica de programao
Com este tipo de instruo podemos fazer um contador. Veja como seria uma contagem at 10:
CONTADOR = 0 Repetir
CONTADOR = CONTADOR + 1
Fluxograma do contador:
Lgica de programao
INCIO CONT = 0
CONT = CONT + 1
Sim
Neste ponto do algoritmo podemos incluir qualquer conjunto de instrues que quisermos repetir 10 vezes.
Estruturas de repetio
Lgica de programao
Enquanto...Repetir
Enquanto (condio) repetir <instrues>
condio V
instruo
Repetir...Enquanto
Repetir <instrues>
instruo
enquanto (condio)
condio
Para...ate...repetir
<instrues>
Exemplo Enquanto
Ler 50 nmeros fornecidos pelo usurio e calcular e exibir a mdia.
Pseudocdigo:
Real: soma, num, media Inteiro: cont Soma = 0 Cont = 0 Enquanto cont < 50 repetir ler num soma = soma + num cont = cont + 1 Media = soma / cont Mostrar media
6
Exemplo Repita
Ler 50 nmeros fornecidos pelo usurio e calcular e exibir a mdia.
Pseudocdigo: Real: soma, num, media Inteiro: cont Soma = 0 Cont = 0 Repita ler num soma = soma + num cont = cont + 1 Enquanto cont <=50 Media = soma / cont Mostrar media
7
Exemplo Para
Ler 50 nmeros fornecidos pelo usurio e calcular e exibir a mdia.
Pseudocdigo: Real: soma, num, media Inteiro: cont Soma = 0 Para cont =1 at 50 repetir { ler num soma = soma + num } Media = soma / cont Mostrar media
8
Lgica de programao
At agora para vrios valores informados pelo usurio lamos cada valor de forma separada Por exemplo, no algoritmo para o clculo da mdia de quatro nmeros, lamos 4 vezes, 4 valores para dentro de 4 variveis. Mas tambm poderamos:
ler um valor para 1 varivel e repetir isso 4 vezes, adicionando cada valor lido ao total em uma outra varivel, a cada repetio. Aps as 4 repeties, a soma dos 4 nmeros estaria acumulada na outra varivel, bastando uma instruo para dividi-la por 4 e assim obter a mdia.
10
Lgica de programao
PARA...AT...REPETIR
Formato:
Para <varivel> = <valor inicial> at <valor final> repetir <aes> Significado: A <varivel> inicializada com <valor inicial>. Aps cada execuo das <aes>, soma-se 1 <varivel> e repete-se as <aes>, continuando assim at que a <varivel> atinja o <valor final>. Esta estrutura de repetio cria um contador automtico, que ns no precisamos mandar incrementar. Ao usar esta estrutura j est subentendido que a <varivel> inicia com <valor inicial> e incrementada a cada ciclo (podendo-se inclusive aproveitar seu valor dentro do ciclo), e que as <aes> sero repetidas at que a <varivel> tenha o <valor final>.
11
Lgica de programao
Usamos esta estrutura quando sabemos quantas vezes temos de repetir certas aes, mesmo que o nmero de vezes s seja conhecido durante a execuo. Por exemplo: Perguntar ao usurio de quantos valores ele quer calcular a mdia. Ler os nmeros e calcular a mdia.
12
Lgica de programao
Para esse problema construmos um algoritmo que ser genrico, ou seja, que poder ser usado para calcular a mdia de quantos nmeros se quiser! Pseudocdigo:
Exibir De quantos valores voc quer calcular a mdia? Ler QUANT (aqui se descobre quantas repeties) SOMA = 0 Para CONT = 1 at QUANT repetir
Ler N (aqui lido cada nmero, um em cada ciclo) SOMA = SOMA + N
13
Lgica de programao
Enquanto <operao lgica> repetir <aes> Significado: A <operao lgica> testada. Se for verdadeira, ento executar <aes> e em seguida testar novamente a op. lgica. Este ciclo prossegue at que em algum teste a op. lgica resulte em falso. Nesta estrutura temos novamente, assim como nas estruturas de deciso, uma operao lgica determinando se devemos continuar a repetir (resultado V) ou parar de repetir (resultado F) as aes. Devemos garantir que o dado testado na op. lgica tenha seu valor modificado por alguma das aes repetidas, seno nunca teremos um resultado F no teste e a repetio permanecer num ciclo infinito (loop)!
14
Lgica de programao
15
Lgica de programao
Fluxograma:
Ler N No
Sim
N<>0
No
MAIOR FIM
16
Introduo Linguagem C
Deise Saccol
17
Estrutura de repetio
Comando for
for (var=valor inicial; condio; incremento) comando;
Exemplo:
for (cont=3; cont<=11; cont++) printf (%d,cont); for (var=valor inicial; condio; incremento) { comando1; comando2 comando3; }
18
Exerccios
Escrever um algoritmo que l 5 valores, e conta quantos destes valores so negativos, escrevendo esta informao. #include <stdio.h> #include <stdlib.h> main(){ int numero, cont, neg=0; for (cont=0; cont<5; cont++){ printf ("\nDigite um numero inteiro: "); scanf ("%d", &numero); if (numero<0) neg++; } printf ("\nO numero de valores negativos eh %d\n", neg); system("pause"); }
19
Estrutura de repetio
Comando while
while (condio) comando; while (condio) { comando1; comando2 comando3; }
Exemplo: MAIOR=0; N=1; while (N != 0) { scanf ("%d",&N); if (N > MAIOR) MAIOR = N; }
Pseudo-cdigo: MAIOR = 0 N=1 Enquanto (N <> 0) repetir Ler N Se (N > MAIOR) ento MAIOR = N Mostrar MAIOR
20
Outra soluo:
Escrever um algoritmo que l 5 valores, e conta quantos destes valores so negativos, escrevendo esta informao. #include <stdio.h> #include <stdlib.h> main(){ int numero, cont=0, neg=0; while (cont<5){ printf ("\nDigite um numero inteiro: "); scanf ("%d", &numero); if (numero<0) neg++; cont++; } printf ("\nO numero de valores negativos eh %d\n", neg); system("pause"); }
21
Estrutura de repetio
Comando do...while
do { comando } while (condio); do { comando1; comando2 comando3; } while (condio);
Exemplo:
Em pseudo-cdigo: CONTADOR = 0 Repetir CONTADOR = CONTADOR + 1 exibir CONTADOR enquanto CONTADOR < 10
22
Outra soluo:
Escrever um algoritmo que l 5 valores, e conta quantos destes valores so negativos, escrevendo esta informao. #include <stdio.h> #include <stdlib.h> main(){ int numero, cont=0, neg=0; do{ printf ("\nDigite um numero inteiro: "); scanf ("%d", &numero); if (numero<0) neg++; cont++; }while (cont<5); printf ("\nO numero de valores negativos eh %d\n", neg); system("pause"); }
23
Outros exemplos
24
1. Construir um algoritmo que calcule a mdia aritmtica de vrios valores inteiros positivos, lidos externamente. O final da leitura acontecer quando for lido um valor negativo.
#include <stdio.h> #include <stdlib.h> main(){ int numero, cont=0, soma=0; float media; printf ("\nDigite um valor inteiro positivo. Digite um negativo para encerrar a execucao: "); scanf ("%d", &numero); while (numero>=0) { soma=soma+numero; cont++; printf ("\nDigite um valor inteiro positivo. Digite um negativo para encerrar a execucao: "); scanf ("%d", &numero); } if (cont>0){ media=(float)soma/cont; printf ("\nA media eh %.2f\n", media); } else printf ("\nNenhum valor foi digitado"); system("pause"); } 25
Outra soluo:
#include <stdio.h> #include <stdlib.h> main(){ int numero, cont=0, soma=0; float media; printf ("\nDigite um valor inteiro positivo. Digite um negativo para encerrar a execucao: "); scanf ("%d", &numero); if (numero >=0){ do { soma=soma+numero; cont++; printf ("\nDigite um valor inteiro positivo. Digite um negativo para encerrar a execucao: "); scanf ("%d", &numero); }while(numero>=0); if (cont>0) { media=(float)soma/cont; printf ("\nA media eh %.2f\n", media); } }//if 26 system("pause"); }
2. Escreva um algoritmo que calcule a mdia aritmtica das 3 notas dos alunos de uma classe. O algoritmo dever ler, alm das notas, o cdigo do aluno e dever ser encerrado quando o cdigo for igual a zero.
#include <stdio.h> #include <stdlib.h> main(){ int codigo; float media, nota, soma=0; printf ("\nDigite o codigo do aluno. Digite zero para encerrar a execucao: "); scanf ("%d", &codigo); while (codigo!=0){ soma=0; for (int cont=0; cont<3; cont++){ printf ("\nDigite nota: "); scanf ("%f", ¬a); soma=soma+nota; }//for media=soma/3; printf ("\nA media do aluno %d eh %.2f", codigo, media); printf ("\nDigite o codigo do aluno. Digite zero para encerrar a execucao: "); scanf ("%d", &codigo); }//while system("pause"); 27 }
Outra soluo
#include <stdio.h> #include <stdlib.h> main(){ int codigo; float media, nota, soma=0; printf ("\nDigite o codigo do aluno. Digite zero para encerrar a execucao: "); scanf ("%d", &codigo); do { soma=0; for (int cont=0; cont<3; cont++){ printf ("\nDigite nota: "); scanf ("%f", ¬a); soma=soma+nota; }//for media=soma/3; printf ("\nA media do aluno %d eh %.2f", codigo, media); printf ("\nDigite o codigo do aluno. Digite zero para encerrar a execucao: "); scanf ("%d", &codigo); }while (codigo!=0); system("pause"); 28 }
3. Escreva um algoritmo que calcule a mdia dos nmeros digitados pelo usurio, se eles forem pares. Termine a leitura se o usurio digitar zero (0).
#include <stdio.h> #include <stdlib.h> main(){ int num, soma=0, cont=0; float media; printf ("\nDigite um numero inteiro. Digite zero para encerrar a execucao: "); scanf ("%d", &num); do { if (num%2==0){ cont++; soma=soma+num;} printf ("\nDigite um numero inteiro. Digite zero para encerrar a execucao: "); scanf ("%d", &num); }while (num!=0); media=(float)soma/cont; printf ("\nA media eh %.2f", media); system("pause"); }
29
Outra soluo
#include <stdio.h> #include <stdlib.h> main(){ int num, soma=0, cont=0; float media; printf ("\nDigite um numero inteiro. Digite zero para encerrar a execucao: "); scanf ("%d", &num); while (num!=0) { if (num%2==0){ soma=soma+num; cont++; } printf ("\nDigite um numero inteiro. Digite zero para encerrar a execucao: "); scanf ("%d", &num); } if (cont>0){ media=(float)soma/cont; printf ("\nA media eh %.2f\n", media); } else printf ("\nNenhum valor foi digitado"); system("pause"); }
30
Mais um exemplo...
4. Faa um programa que realize a venda de produtos a clientes. Cada cliente pode comprar vrios produtos. Sobre cada produto comprado por cada cliente, leia a quantidade de unidades compradas e o preo unitrio. Encerre a entrada de produtos para um cliente quando o cdigo do produto lido for -1. Mostre, para cada cliente, o valor total da sua compra. Encerre a entrada de clientes quando o cdigo do cliente lido for zero.
31
#include <stdio.h> #include <stdlib.h> main(){ int codProd, codCli, qtdade; float precoUnit, valorTotal=0; printf ("\nDigite o codigo do cliente. Digite zero para encerrar a execucao: "); scanf ("%d", &codCli); while (codCli!=0){ valorTotal=0; printf ("\n\tDigite o codigo do produto. Digite -1 para encerrar a execucao: "); scanf ("%d", &codProd); while (codProd!=-1){ printf ("\n\tDigite a qtdade comprada pelo cliente %d do produto %d: ", codCli, codProd); scanf ("%d", &qtdade); printf ("\n\tDigite o valor unitario do produto %d: ", codProd); scanf ("%f", &precoUnit); valorTotal=valorTotal+qtdade*precoUnit; printf ("\n\n\tDigite o codigo do produto. Digite -1 para encerrar a execucao: "); scanf ("%d", &codProd); } printf ("\nO cliente %d deve pagar R$ %.2f", codCli, valorTotal); printf ("\n\nDigite o codigo do cliente. Digite zero para encerrar a execucao: "); scanf ("%d", &codCli); }//while system("pause"); } 32
33