Você está na página 1de 28

Algoritmos

Prof. Carlos Alves


disciplinas@linuxconsult.com.br

Estrutura de Repetio
At o momento vimos estruturas seqenciais, alguns
problemas pode requisitar que uma operao seja
executada um certa quantidade de vezes.
Exemplo: Entre com o salrio de 100 funcionrios e
calcule a mdia dos salrio.
Soluo Seqencial: Voc teria que criar 100 linhas
com a funo leia (cin) para armazenar os valores.

Estrutura de Repetio
Para resolver estes tipos de problemas, onde um certo
conjunto de operaes deve ser executado mais de
uma vez, vamos introduzir novas estruturas de controle,
chamadas estruturas de repetio.

As estruturas de repetio podem ser utilizadas para


vrios tipos de problemas como, por exemplo, teste de
senha, contagem e soma de valores, recebimento de
uma certa quantidade de dados de entrada, percorrer
estruturas de dados (vetores).

Repetio com Varivel de Controle


A estrutura de repetio com varivel de controle serve
para se executar um trecho de cdigo n vezes, onde n
um nmero conhecido previamente.
O nmero de repeties executado por esta estrutura
controlado por uma varivel, chamada varivel de
controle. Esta varivel comea com um valor inicial
estabelecido pelo programador e, a cada repetio
(iterao ou loop), o valor incrementado ou
decrementado, at alcanar o valor final, tambm
definido pelo programador.

Repetio com Varivel de Controle


Vejamos como ficaria o programa para ler o salrio de
100 funcionrios e calcular a mdia dos salrios.
Portugol
incio
inteiro: SALARIO, SAL_TOTAL;
para CONTADOR de 1 at 100 faa
leia (SALARIO);
SAL_TOTAL = SAL_TOTAL + SALARIO
fimpara;
ESCREVA(SAL_TOTAL/100);
fim.

Repetio com Varivel de Controle


C++
#include <iostream.h>
using namespace std;
int main(int argc, char *argv[]) {
int salario, sal_total=0;
for (int i = 0; i < 100; i++) {
cout<<"Entre com o "<<(i+1)<<" salario: " ;
cin >> salario;
sal_total = sal_total + salario;
}
cout<<\nA media do salarios dos 100 empregados e: "<<sal_total/100.0<<endl;
system(PAUSE);
return 0;
}

Repetio com Varivel de Controle


Em C++, a estrutura de repetio com varivel de
controle representada pelo comando for, que dividido
em trs partes, separadas por ponto e vrgula (;). A
primeira parte inicializa a varivel de controle com o valor
inicial (zero, no caso do exemplo). A segunda parte o
critrio de parada (contador < 100). A terceira parte o
incremento ou decremento da varivel de controle.

Repetio com Teste no Incio


A estrutura de repetio com teste no incio uma
estrutura na qual o teste para se verificar se o loop
executar a prxima vez ou no realizado no incio da
estrutura, antes de qualquer outro comando. Dessa
forma, se o teste der falso logo na primeira vez, os
comandos dentro da estrutura no sero executados
nenhuma nica vez

Repetio com Teste no Incio


Portugol:
O comando utilizado para estrutura de repetio com
teste no incio :
enquanto <condio_lgica> faa
comando1;
comando2;
...
comandoN;
fimenquanto;

Repetio com Teste no Incio


No incio da execuo, a condio lgica avaliada. Se
ela for verdadeira, os comando dentro da estrutura de
repetio so executados. Quando o programa chega na
instruo fimenquanto, ele volta novamente ao incio e
avalia a condio novamente. Esse processo continua
enquanto a condio for verdadeira.

Repetio com Teste no Incio


Portugol
incio
inteiro: IDADE, CONTADOR;
caracter: NOME;
CONTADOR <- 0;
enquanto CONTADOR < 5 faa
leia (NOME, IDADE);
se IDADE > 30
ento imprima (NOME);
fimse;
CONTADOR <- CONTADOR + 1;
fimenquanto;
fim.

Repetio com Teste no Incio


O comando da estrutura de repetio com teste no incio
em C++ o while, e sua sintaxe a seguinte:

while (condio_lgica) {
comando_1;
comando_2;
...
comando_n;
}

Repetio com Teste no Incio


C++
#include <iostream.h>
using namespace std;
int main(int argc, char *argv[]) {
int idade, cont =0; string nome;
while ( cont < 5){
cout<<"Entre com um Nome: ; cin>>nome;
cout<<"\nEntre com um Idade: ; cin>>idade;
if (idade > 30){
cout<<"\nNome: "<<nome<<endl;
}
cont = cont + 1; cout<<endl;
}
system("PAUSE");
return 0;
}

Uso de Condio de Parada (Flag)


Nos exemplos vistos at o momento, as estruturas de
repetio so executadas um nmero fixo de vezes (n
vezes), que foi definido pelo programador no momento da
construo do programa.
No entanto, na grande maioria das vezes o programador
no saber quantas vezes a estrutura dever ser
executada, pois esta uma deciso que geralmente cabe
ao usurio do programa

Uso de Condio de Parada (Flag)


Neste caso, precisamos criar uma condio de parada
(tambm chamada de flag).
Exemplo: Execute enquanto a idade informada for > 0.
Quando o usurio digitar 0 (zero) o programa ser
finalizado

Uso de Condio de Parada (Flag)


Portugol
incio
inteiro: IDADE;
caracter: NOME;
leia (IDADE);
enquanto IDADE > 0 faa
leia (NOME);
se IDADE > 30
ento imprima (NOME);
fimse;
leia (IDADE);
fimenquanto;
fim.

Uso de Condio de Parada (Flag)


Este programa funciona da seguinte maneira. Primeiro
lida uma idade fora da estrutura de repetio. Se ela for
menor ou igual a 0 (zero), o programa no entra na
estrutura, pois o usurio informou justamente um valor que
satisfaz o critrio de parada e, portanto, no quer informar
nenhum dado.

Uso de Condio de Parada (Flag)


C++
#include <iostream.h>
using namespace std;
int main(int argc, char *argv[]) {
int idade;
string nome;
cout<<"Informe a Idade: "; cin >> idade;
while (idade > 0){
cout<<"\nInforme a Nome: "; cin >> nome;
if (idade > 30){
cout << nome <<endl;
}
cout<<"\nInforme a Idade: "; cin >> idade;
}
system("PAUSE");
return 0;
}

Repetio com Teste no Final


A estrutura de repetio com teste no final possui um
funcionamento semelhante ao da estrutura de repetio
com teste no incio. A principal diferena entre elas que
no teste no final os comandos que esto dentro da
estrutura de repetio sero obrigatoriamente executados
pelo menos uma vez.

Repetio com Teste no Final


Em Portugol, o comando para a estrutura de repetio
com teste no final o repita...at.
incio
inteiro: IDADE;
caracter: NOME;
repita
leia (NOME, IDADE);
se IDADE > 30
ento imprima (NOME);
fimse;
at IDADE <= 0;
fim.

Repetio com Teste no Final


C++

do {
comando_1;
comando_2;
...
comando_n;
} while (condio_lgica);

Repetio com Teste no Final


C++
int main(int argc, char *argv[])
{
int idade; string nome;
do {
cout<<"Entre com o Nome: "; cin >> nome;
cout<<"Entre com o Idade: "; cin >> idade;
if (idade > 30) {
cout <<endl <<endl << nome <<endl<<endl;
}
} while (idade > 0);
system("PAUSE");
return 0;
}

Repetio com Teste no Final


Portugol
Repita

leia (ALTURA);
at ALTURA > 0 e ALTURA < 3;
C++
do{
cin >> altura;
} while (altura <= 0 and altura >= 3)

Repetio - Exemplos
For
//Imprimir 100 nmeros na tela.
int main(int argc, char *argv[])
{
cout<<"\nImprimir 100 numeros na tela: "<<endl<<endl;
for (int i=0; i < 100; i++)
{
cout<<(i+1)<<" ";
} cout<<endl<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}

Repetio - Exemplos
For
//Ler 10 numero do teclado e imprimir a mdia.
int main(int argc, char *argv[])
{
int num, total=0;
for (int i=0; i < 10; i++)
{
cout<<"entre com o "<<(i+1)<<" numero: ";
cin>> num; total = total + num;
}
cout<<"\n\nA media destes 10 numero e: "<<(total/10.0);
cout<<endl<<endl;
system("PAUSE");
return 0;
}

Repetio - Exemplos
while
//Ler 10 numero do teclado e imprimir a mdia.
int main(int argc, char *argv[]) {
int cont, num, total;
cont = num = total = 0;
while ( cont < 10){
cout<<"entre com o "<<(cont+1)<<" numero: ";
cin>> num; total = total + num;
cont = cont + 1;
cout<<endl;
}
cout<<"\n\nA media e:: "<<(total/cont)<<endl<<endl;
system("PAUSE");
return 0;
}

Repetio - Exemplos
Do
//Ler 10 numero do teclado e imprimir a mdia.
int main(int argc, char *argv[]) {
int cont, num, total;
cont = num = 0;
do {
cout<<"entre com o "<<(cont+1)<<" numero: ";
cin>> num; total = total + num;
cont = cont + 1;
cout<<endl;
} while ( cont < 10);
cout<<"\n\nA media e:: "<<(total/cont)<<endl<<endl;
system("PAUSE");
return 0;
}

Você também pode gostar