11
aAula – ESTRUTURAS DE REPETIÇÃO
• Estrutura de repetição: Repetir um determinado trecho de um programa
um certo número de vezes
tipo Laço Contado ("
for
" em Linguagem C)
Fluxograma convencional
Forma 1 - um único comando a ser repetido(<var>:<início>; <fim>; <incr>) <comando_composto1> entrada saída
Forma 2 – dois ou mais comandos a serem repetidos
(<var>:<início>;
<fim>;
<incr>)
<comando_composto1>
entrada<comando_composto2>
<comando_compostoN>
saídaLinguagem C
Forma 1 - um único comando a ser repetido
…for
(inicialização;condição;incremento)
<comando_composto1 ou instrução1>;
…
Forma 2 – com dois ou mais comandos a serem repetidos
…for(inicialização;condição;incremento) { <comando
_composto
1 ou instrução1>; <comando_composto
2 ou instrução2>; …<comando
_composto
N ou instruçãoN>; }Podemos ver que o
for
executa a inicialização incondicionalmente e testa a condição. Se a
condição for falsa ele não faz mais nada. Se a condição for verdadeira ele executa o(s) comando(s)
(ou instrução), o incremento e volta a testar a condição. Ele fica repetindo estas instruções até que
a condição seja falsa. Abaixo vemos um programa que
realiza a leitura e soma de 10 números.
Exemplo 1: Algoritmo que realiza a leitura e soma de 10 números reais usando a estrutura de
repetição do tipo laço contado "para" ("for" em Linguagem C).
início "Algoritmo Somar 10 numeros" Soma ← 0.0 (C0NT:1;10;1) "Numero=" Numero Soma←Soma+Numero "Resultado da Soma=", Soma fim #include <iostream.h> #include <stdlib.h> #include <stdio.h> //Algoritmo Soma10 float Numero,Soma; int CONT; int main() { Soma=0.0;
printf("Algoritmo Somar 10 numeros\n");
for (CONT=1;CONT<=10;CONT++) {
printf("Numero="); scanf("%f",&Numero); Soma=Soma+Numero; }
printf("\n Resultado da Soma=%f\n",Soma); system("PAUSE");
return 0;
}
Notar que a instrução
Soma ←
0.0
faz com que a variável
Soma
seja inicializada com o valor
zero. Esta instrução é necessária, pois as variáveis, apesar de declaradas, podem estar
armazenando valores "estranhos" ou mesmo aleatórios. Experimente verificar!
Exemplo de saída do programa acima:
Algoritmo Somar 10 numeros Numero=10 Numero=12 Numero=14 Numero=15 Numero=2 Numero=45 Numero=34 Numero=3 Numero=21 Numero=3 Resultado da Soma=159.000000
Exemplo 2: Algoritmo que realiza a Leitura e Soma de
N
números reais usando a estrutura de
repetição tipo laço contado "for".
Algoritmo em fluxograma convencional e tradução para a Linguagem C
N início "Algoritmo Somar N numeros" Soma←0.0 (C0NT:1;N;1) "Numero" Numero Soma←Soma+Numero "Resultado da Soma=", Soma fim "Entre com o valor
de N= " //Algoritmo SomaN #include <iostream.h> #include <stdlib.h> #include <stdio.h> float Numero,Soma; int CONT,N; int main() { Soma=0.0;
printf("Algoritmo Somar N numeros\n"); printf("Entre com o valor de N= "); scanf("%d",&N); for(CONT=1;CONT<=N;CONT++) { printf("Numero= "); scanf("%f",&Numero); Soma=Soma+Numero; }
printf("\n Resultado da Soma=%f\n",Soma); system("PAUSE");
return 0; }
Exemplo de saída do programa acima:
Algoritmo Somar N numeros Entre com o valor de N= 7 Numero= 112 Numero= 2 Numero= 33 Numero= 22 Numero= 44 Numero= 43 Numero= 55 Resultado da Soma=311.000000
tipo
Laço Condicional Enquanto ("
while
" em Linguagem C)
Fluxograma convencional
Forma 1 - um único comando a serrepetido
<comando_composto1>
entrada
V
enquanto(condição)
Forma 2 – dois ou mais comandos a serem repetidos <comando_composto1> entrada
V
enquanto(condição) <comando_compostoN> <comando_composto2>Linguagem C
Forma 1 - um único comando a ser repetido while(condição)
<comando_composto1 ou instrução1>;
Forma 2 – com dois ou mais comandos a serem repetidos while(condição) { <comando_composto1 ou instrução1>; <comando_composto2 ou instrução2>; … <comando_compostoN ou instruçãoN>; }
Podemos ver que a estrutura
while
testa uma condição. Se esta for verdadeira a declaração
é executada e faz-se o teste novamente, e assim por diante. Assim como no caso do
for
, podemos
fazer um loop infinito. Para tanto basta colocar uma expressão eternamente verdadeira na
condição. Pode-se também omitir a declaração e fazer um loop sem conteúdo. Vamos ver um
exemplo do uso do
while
. Abaixo vemos um programa que
realiza a leitura e soma de 10
números, similar ao exemplo 1
. Veja que ele seria implementado mais naturalmente com um for
...
Exemplo 3: Algoritmo que realiza a Leitura e Soma de 10 números reais usando a estrutura
de repetição tipo laço condicional "enquanto" ("while" em Linguagem C).
Algoritmo em fluxograma convencional e tradução para a Linguagem C
início "Algoritmo Somar 10 numeros" Soma←0.0 "Numero" Numero Soma←Soma+Numero "Resultado da Soma=", Soma fim CONT<=10 V CONT ← 1 CONT←CONT+1 equivale ao CONT++ #include <iostream.h> #include <stdlib.h> #include <stdio.h> //Algoritmo Soma10w float Numero,Soma; int CONT; int main() { CONT=1; Soma=0.0;
printf("Algoritmo Somar 10 numeros\n");
while (CONT<=10) {
printf ("Numero="); scanf("%f",&Numero); Soma=Soma+Numero;
CONT=CONT+1; //equivale ao CONT++ }
printf("Resultado da Soma=%f\n",Soma); system("PAUSE");
return 0; }
Notar que a instrução
CONT ←1
faz com que a variável
CONT
seja inicializada com o valor
um. Esta instrução é necessária, pois é ela a responsável pelo controle do número de vezes
que as instruções, contidas pelo comando while, serão executadas.
Exemplo de saída do programa acima:
Algoritmo Somar 10 numeros Numero=12 Numero=14.5 Numero=11.03 Numero=434 Numero=22.65 Numero=31 Numero=3 Numero=1.5 Numero=132 Numero=204.2 Resultado da Soma=865.880000
Exemplo 4: Algoritmo que realiza a Leitura e Soma de
N
números reais usando a estrutura de
repetição tipo laço condicional "enquanto" ("while" em Linguagem C).
Algoritmo em fluxograma convencional e tradução para a Linguagem C
N início "Algoritmo Somar N numeros" Soma←0.0 "Resultado da Soma=", Soma fim "Entre com o valor
de N " "Numero" Numero Soma←Soma+Numero CONT<=N V CONT++ CONT ← 1 //Algoritmo SomaNw #include <iostream.h> #include <stdlib.h> #include <stdio.h> float Numero,Soma; int CONT,N; int main() { CONT=1; Soma=0.0;
printf("Algoritmo Somar N numero\n"); printf("Entre com o valor de N "); scanf("%d",&N); while(CONT<=N) { printf("Numero= "); scanf("%f",&Numero); Soma=Soma+Numero; CONT++; }
printf("\n Resultado da Soma=%f",Soma); system("PAUSE");
return 0; }
Exemplo 5: Algoritmo que realiza a leitura, soma de
N
números reais e calcule a média,
usando a estrutura de repetição tipo laço contado para ("for" em Linguagem C).
Algoritmo em fluxograma convencional e tradução para a Linguagem C
N início "Algoritmo media N numeros" Soma←0.0 (C0NT:1;N;1) "Numero" Numero Soma←Soma+Numero "Resultado da Soma=", Soma fim "Entre com o valor
de N =" media←Soma/N "Resultado da Media=", media //Algoritmo mediaf #include <iostream.h> #include <stdlib.h> #include <stdio.h> float Numero,Soma,media; int CONT,N; int main() { Soma=0.0;
printf("Algoritmo media N numeros\n"); printf("Entre com o valor de N= "); scanf("%d",&N); for(CONT=1;CONT<=N;CONT++) { printf("Numero= "); scanf("%f",&Numero); Soma=Soma+Numero; }
printf("\n Resultado da Soma=%f",Soma); media=Soma/N;
printf("\n Resultado da media=%f",media); system("PAUSE");
return 0; }
Exemplo de saída do programa acima:
Algoritmo Somar N numeros Entre com o valor de N= 5 Numero= 10 Numero= 12 Numero= 14 Numero= 15 Numero= 21 Resultado da Soma=72.000000 Resultado da media=14.400000
Exemplo 6: Algoritmo que realiza a leitura, soma de
N
números reais e calcule a média,
usando a estrutura de repetição tipo laço condicional enquanto ("while" em
Linguagem C).
Algoritmo em fluxograma convencional e tradução para a Linguagem C
N início "Algoritmo media N numeros" Soma←0.0 "Resultado da Soma=", Soma fim "Entre com o valor
de N =" media←Soma/N "Resultado da Media=", media "Numero" Numero Soma←Soma+Numero CONT<=N V CONT←CONT+1 CONT ← 1 //Algoritmo mediaw #include <iostream.h> #include <stdlib.h> #include <stdio.h> float Numero,Soma,media; int CONT,N; int main() { CONT=1; Soma=0.0;
printf("Algoritmo media N numeros\n"); printf("Entre com o valor de N= "); scanf("%d",&N); while(CONT<=N) { printf("Numero= "); scanf("%f",&Numero); Soma=Soma+Numero; CONT++; }
printf("\n Resultado da Soma=%f",Soma); media=Soma/N;
printf("\n Resultado da media=%f",media); system("PAUSE");
return 0; }
Exemplo 7: Algoritmo que realiza a leitura de um número
N
inteiro e calcule o fatorial de
N
cuja definição é
N
!=(
N
-1)!
N
, usando as estruturas de repetição:
•tipo laço contado ("for" em Linguagem C);
•
tipo laço condicional ("while" em Linguagem C).
Algoritmo em fluxograma convencional e tradução para a Linguagem C
Laço contado (for)
N início "Algoritmo fatorial" fat←1 (I:1;N;1) fat ← fat*I "N!=",fat fim "N= " #include <iostream.h> #include <stdlib.h> #include <stdio.h>
//Algoritmo fatorial for float fat;
int I,N; int main() {
fat=1;
printf("Algoritmo fatorial \n"); printf("N= "); scanf( "%d",&N); for(I=1;I<=N;I++) fat=fat*I; printf("\n N!=%f",fat); system("PAUSE"); return 0; }
Exemplo de saída do programa acima:
Algoritmo fatorial N= 5
N!=120.000000
Laço condicional (while)
N início "Algoritmo fatorial" fat←1 fat ← fat*I "N!=",fat fim "N= " I<=N V I ← I+1 I←1 #include <iostream.h> #include <stdlib.h> #include <stdio.h>//Algoritmo fatorial while float fat; int I,N; int main() { I=1; fat=1;
printf("Algoritmo fatorial \n"); printf("N= "); scanf( "%d",&N); while(I<=N) { fat=fat*I; I++; } printf("\n N!=%f",fat); system("PAUSE"); return 0; }
Exemplo 8: Algoritmo fatorial com opção de repetição de cálculo. Um exemplo de uso de
while e for em um mesmo programa.
#include <iostream.h>#include <stdlib.h>
#include <stdio.h>
#include <conio.h> //arquivo header para uso da função getche() //Algoritmo fatorial for
float fat; int I,N;
char opcao='s'; //variavel tipo caracter int main() { while(opcao=='s' || opcao=='S') { I=1; fat=1;
printf("\nAlgoritmo fatorial"); printf("\nN= "); scanf( "%d",&N); for(I=1;I<=N;I++) fat=fat*I; printf("N!=%f",fat); printf("\n continua (s/n)? ");
opcao=getche(); //captura a tecla acionada
printf("\n"); }
system("PAUSE"); return 0;
}
Exemplo de saída do programa acima:
Algoritmo fatorial N= 5 N!=120.000000 continua (s/n)? s Algoritmo fatorial N= 10 N!=3628800.000000 continua (s/n)? n
Exercício proposto
Escreva abaixo o algoritmo em fluxograma convencional e tradução para a Linguagem C para
o cálculo da média sem definir a quantidade de números que deverão ser somados, de forma
diferente ao aplicado nos exemplos 5 e 6 onde o usuário precisava definir o valor de N.
início "Algoritmo media" Soma←0.0 "Resultado da Soma=", Soma fim media←Soma/CONT "Resultado da Media=", media "Numero (digite 0 para
parar)= " Numero Soma←Soma+Numero Numero≠0 V CONT++ CONT ← 0 Numero←1 //Algoritmo mediaw #include <iostream.h> #include <stdlib.h> #include <stdio.h> float Numero,Soma,media; int CONT; int main() { CONT=0; Soma=0.0; Numero=1;
printf("Algoritmo media \n"); while(Numero!=0)
{
printf("Numero(digite 0 p/ parar)= "); scanf("%f",&Numero);
Soma=Soma+Numero; CONT++;
}
printf("\n Resultado da Soma=%f",Soma); media=Soma/(CONT-1);
printf("\n Resultado da media=%f\n",media); system("PAUSE");
return 0; }