Buscar

AED_04_UNA_REPETICAO_2011_2_completo_final

Prévia do material em texto

Algoritmos e Técnicas de 
Programação
(Estruturas de Repetição)
Prof. Alexandre Wagner Chagas Faria
Índice
� Definições
� Estruturas de repetição
� PARA - FOR
� Sintaxe
� Exemplo
� ENQUANTO - WHILE
� Sintaxe
� Exemplo
� REPITA – DO WHILE
� Sintaxe 
� Exemplo
� Considerações
Estruturas de repetição – laços (loop)
� Os laços são comandos úteis sempre que uma ou mais 
instruções, devam ser repetidas enquanto uma certa 
condição estiver sendo satisfeita – for verdadeira.
� O n° de repetições, podem ser fixa ou dependente de 
alguma condição – (aplicação)
Estruturas
As estruturas de repetição são:
- PARA
- ENQUANTO
- REPITA
Em C++, estas estruturas se chamam:
for
while
do - while
Estrutura for
� Esta estrutura deverá ser empregada, quando sabemos 
previamente o n° de repetições a ser executadas, ou esse valor 
será calculado dentro do programa:
Exemplo:
Imprimir na tela todos os números entre 1 e 50;
Somar todos os números pares entre 1 e 1000;
Ler todos os valores de pixel de uma imagem que tem 640x480; 
etc...
Sintaxe
Portugol
PARA I ← 1 ATÉ 10 FAÇA
INICIO 
instrução;
FIM_PARA C++
for (i=0; i<10; i++)
{
instrução;
}
Analisando o comando for:
Note que no exemplo, usa-se a condição de continuação de laço counter <= 7. Se o 
programador escrevesse, incorretamente, counter < 7, então o ciclo seria executado 
somente seisvezes. Este é um erro de lógica comum.
Dicas de programação. 
� Para um laço usado para imprimir os valores 1 a 10, por exemplo, a 
condição de continuação de laço deveria ser counter <= 10, em vez de 
counter < 10 (o que é um erro “sair uma iteração antes”) ou counter < 
11 (que é, no entanto, correto). 
� Muitos programadores, entretanto, preferem a chamada contagem 
baseada em zero – na qual, para contar 10 vezes o laço, counter seria 
inicializado com zero e o teste de continuação do laço seria counter < 
10
* Deitel & Deitel, C++ Como Programar – 5° versão. 
Exemplos de incrementos e decrementos:
Faça a variável de controle variar de 1 até 100 em incrementos de 1.
for ( int i = 1; i <= 100; i++ )
Faça a variável de controle variar de 100 até 1 em incrementos de -1 (decrementos de 1).
for ( int i = 100; i >= 1; i-- )
Faça a variável de controle variar de 7 até 77 em incrementos de 7.
for ( int i = 7; i <= 77; i += 7 )
Faça a variável de controle variar de 20 até 2 em incrementos de -2.
for ( int i = 20; i >= 2; i-=2 )
Faça a variável de controle variar ao longo da seguinte seqüência de valores: 2, 5, 8, 11, 14,
17, 20.
for ( int j = 2; j <= 20; j += 3 )
Faça a variável de controle variar segundo seqüência seguinte de valores: 99, 88, 77, 66,
55, 44, 33, 22, 11, 0.
for ( int j = 99; j >= 0; j -= 11)
Exemplo 01 em portugol
Escrever na tela todos os números entre 1 e 50
ALGORITMO
DECLARE cont NUMERICO
ESCREVA “Abaixo será escrito os números até 50 ”;
PARA cont ←1 ATÉ 50 FAÇA
ESCREVA “Numero: ”,cont;
FIM_PARA
FIM_ALGORITMO
Exemplo 02 em portugol
Um funcionário de uma empresa recebe aumento salarial 
anualmente. Sabe-se que:
A) Esse funcionário foi contratado em 2005, com salário de R$ 
1000,00
B) Em 2006, ele recebeu um aumento de 1,5 % sobre seu 
salário inicial.
C) A partir de 2007 (inclusive), os aumentos salariais sempre 
corresponderam ao dobro do percentual do ano anterior. 
Faça um algoritmo em Pseudocódigo que determine o salário 
desse funcionário. 
Exemplo 02 em portugol
ALGORITMO
DECLARE i, ano_atual, salario NUMERICO;
novo_salario, percentual NUMERICO;
ESCREVA “Entre com o ano atual”;
LEIA ano_atual;
salario← 1000;
percentual ← 1,5/100;
novo_salario← salario+percentual*salario;
PARA i ←2007 ATÉ ano_atual FAÇA
INICIO
percentual ← 2*percentual;
novo_salario←novo_salario+percentual*novo_salario;
FIM_PARA
ESCREVA “O novo salário e: ”, novo_salario;
FIM_ALGORITMO
Exemplo 3 em C++
#include <iostream.h>
int main ()
{
int i; 
for (i=0;i<20;i++)
{
cout<<i;
cout<<"\n";
}
cout<<"\n"; 
system ("pause");
}
Exemplo 4 em C++
#include<iostream.h>
#include<iomanip.h>
int main ()
{
int i; 
cout<<"\nImprime a tabuada do 9!";
for (i=0;i<=10;i++)
{
cout<<"\n"<<setw(3)<<i<<setw(5)<<(i*9);
}
cout<<"\n\n";
system("pause");
}
Exercícios
1. Escrever um algoritmos em C++ que mostre os números pares, em ordem crescente e 
decrescente, no intervalo entre 1 e 20.
2. Escreva um algoritmo em C++ que imprima todos os números inteiros de 200 a 100 
(em ordem decrescente).
3. Escreva um algoritmo em C++ que imprima todos os números múltiplos de 5, no 
intervalo fechado de 1 a 500.
4. Escreva um algoritmo em C++ que imprima os 100 primeiros números ímpares.
5. Escreva um algoritmo em C++ que imprima o quadrado dos números pares, no 
intervalo fechado de 1 a 40.
6. Escreva um algoritmo em C++ que receba 5 números do usuário e imprima a raiz 
quadrada de cada número.
7. Criar um algoritmo em C++ que leia um número (quantidade), e depois leia a mesma 
quantidade de números inteiros (entregue primeiro) e imprima o menor deles.
8. Escreva um algoritmo em C++ que leia um valor definindo a quantidade de números 
inteiros a avaliar, entre com os números, calcule e imprima quantos são pares e 
quantos são ímpares.
Desafio: Seqüência de Fibonacci
� O algoritmo recursivo que define a série aplica-se, na prática, conforme a regra sugere: 
começa-se a série com 0 e 1; a seguir, obtém-se o próximo número de Fibonacci somando-se 
os dois anteriores e, assim, sucessiva e infinitamente 
� EX: 0,1,2,3,5,8,13,21,34,55,89,144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946
Exercício 1#include <iostream.h>
int main ()
{
int i,RESTO; 
cout<<"\nOrderm Crescente";
cout<<"\n";
for (i=0;i<=20;i++)
{
RESTO=(i%2);
if (RESTO==0)
cout<<"\n"<<i;
}
cout<<"\n\n"; 
cout<<"\nOrdem Decrescente";
cout<<"\n";
for (i=20;i>0;i--)
{
RESTO=(i%2);
if (RESTO==0)
cout<<"\n"<<i;
}
cout<<"\n\n";
system ("pause");
}
Exercício 2
1. #include <iostream.h>
2. int main ()
3. {
4. int i; 
5. cout<<"\nOrderm decrescente entre 200 e 100!";
6. for (i=200;i>=100;i--)
7. {
8. cout<<i;
9. cout<<"\n";
10. }
11. cout<<"\n"; 
12. system ("pause");
13.}
Exercício 3
1. #include <iostream.h>
2. int main ()
3. {
4. int i; 
5. cout<<"\Todos inteiros entre 0 e 500!";
6. for (i=0;i<=500;i+=5)
7. {
8. cout<<i;
9. cout<<"\n";
10. }
11. cout<<"\n"; 
12. system ("pause");
13.}
Exercício 4
1. #include <iostream.h>
2. int main ()
3. {
4. int i; 
5. cout<<"\os 100 primeiros impares!";
6. for (i=1;i<=200;i++)
7. {
8. cout<<"\n";
9. if (i%2==1)
10. cout<<i;
11. }
12. cout<<"\n"; 
13. system ("pause");
14.}
Exercício 5
1. #include<iostream.h>
2. #include<iomanip.h>
3. int main ()
4. {
5. int i,q; 
6. cout<<"\O quadrado dos numeros pares entre 0 e 40!";
7. for (i=0;i<=40;i++)
8. {
9. if(i%2==0)
10. {
11. q=i*i;
12. cout<<"\n"<<setw(3)<<i<<setw(5)<<" seu quadrado e "<<setw(3)<<q;
13. }
14. }
15. cout<<"\n\n";
16. system("pause");
17. }
Exercício 6
1. #include<iostream.h>
2. #include<iomanip.h>
3. int main ()
4. {
5. float i,rq,numero; 
6. cout<<"\nQuadrado de 5 numeros!";
7. for (i=0;i<5;i++)
8. {
9. cout<<"\n";
10. cout<<"\nEntre com um numero: ";
11. cin>>numero;
12. if(numero>=0)
13. {
14. rq=sqrt(numero);
15. cout<<"\nA raiz quadrado do numero "<<numero<< " e: "<<rq;
16. }
17. else
18. cout<<"\nNao e possivel o calculo da raiz, o n e negativo!";
19. }
20. cout<<"\n\n";
21. system("pause");
22. }
Exercício 7
1. #include<iostream.h>
2. #include<iomanip.h>
3. int main ()
4. {
5. float i,quantidade, numero,menor; 
6. cout<<"\nEntre com a quantidade de numerospara investigar: ";
7. cin>>quantidade;
8. cout<<"\nEntre com um numero: ";
9. cin>>numero;
10. menor=numero;
11. for (i=1;i<quantidade;i++)
12. {
13. cout<<"\nEntre com um valor: ";
14. cin>>numero;
15. if (numero<menor)
16. menor=numero;
17. }
18. cout<<"\nO menor valor digitado foi: "<<menor;
19. cout<<"\n\n";
20. system("pause");
21. }
Exercício 8
1. #include<iostream.h>
2. int main ()
3. {
4. int i,Npar,Nimpar,quantidade,numero; 
5. Npar=0;
6. Nimpar=0;
7. cout<<"\nEntre com a quantidade de numeros a avaliar: ";
8. cin>>quantidade;
9. for (i=0;i<quantidade;i++)
10. {
11. cout<<"\nEntre com um numero: ";
12. cin>>numero; 
13. if (numero%2==0)
14. Npar+=1;
15. else
16. Nimpar+=1;
17. }
18. cout<<"\nA quantidade de numeros pares e: "<<Npar;
19. cout<<"\nA quantidade de numeros impares e: "<<Nimpar;
20. cout<<"\n\n";
21. system("pause");
22. }
Fibonacci
1. #include<iostream.h>
2. int main ()
3. {
4. int i,n,c,atual,ant1,ant2;
5. cout<<"\nEntre com o numero de termos: ";
6. cin>>n;
7. cout<<0<<",";
8. ant1=1;
9. ant2=1;
10. cout<<ant1<<",";
11. cout<<ant2<<",";
12. for(i=3;i<=n;i++)
13. {
14. atual=ant1+ant2;
15. cout<<atual<<",";
16. ant2=ant1;
17. ant1=atual; 
18. }
19. cout<<"\n\n";
20. system("pause");
21. }
O que este programa faz ?
1. #include <iostream.h>
2. #include<iomanip.h>
3. int main ()
4. {
5. int k,i,j;
6. for (k=0;k<=1;k++)
7. {
8. cout<<"\n";
9. for (i=1;i<=4;i++)
10. cout<<"Tabuada do"<<setw(2)<<(i+4*k+1)<<" ";
11. cout<<"\n"; 
12. for (i=1;i<=9;i++)
13. {
14. for (j=2+4*k;j<=5+4*k;j++)
15. cout<<setw(3)<<j<<"x"<<setw(2)<<i<<"="<<setw(3)<<j*i<<" ";
16. cout<<"\n"; 
17. }
18. }
19. system ("pause");
20. }
Comandos for aninhados
1.#include <iostream.h>
2. int main ()
3. {
4. for (int i=0;i<=10;i++)
5. {
6. for (int j=0;j<=10;j++)
7. {
8. cout<<"\nValor de I e J: "<<i<<" - "<<j;
9. }
10. }
11. cout<<"\n\n";
12. system ("pause");
13.}
Um exemplo de FOR aninhado! MatLab
% Le a imagem original
foto=imread('foto.jpg');
imshow(foto)
% Transforma a imagem colorida para escala de cinza
PB=rgb2gray(foto);
figure
imshow(PB);
% cria uma nova imagem igual a anterior
PB_2=PB;
% Captura o numero de linhas e colunas da imagem
[l,c]=size(PB);
% Inicio do loop aninhado 
% um para varrer as linhas e outro para coluna
for i=1:l;
for j=1:c;
if PB(i,j)>120; % se o valor do pixel for > que 120
PB_2(i,j)=240; % o novo pixel recebe o valor 240
else
PB_2(i,j)=10; % senão, o pixel recebe o valor 10
end
end
end
figure
% Mostra a imagem construida!
imshow (PB_2)
Estrutura WHILE (ENQUANTO)
� Deverá ser utilizada, quando é necessário verificar uma condição antes 
do laço. 
� E apropriado em situações em que o laço pode ser terminado 
inesperadamente, por condições desenvolvidas dentro do laço 
� Enquanto a condição for verdadeira, o(s) comando(s) dentro do laço 
serão executados
Exemplo:
Ler caracteres de entrada ate se pressionar enter;
Realizar cálculos ate uma variável alcançar um limite;
Apresentar uma mensagem quando ocorrer uma dada situação (0,ç,$%,) 
;
� A instrução WHILE consiste na palavra reservada WHILE, 
seguida de uma expressão de teste – (entre parênteses). 
� Se a expressão de teste for verdadeira, o laço while é
executada uma vez e a expressão de teste é avaliada 
novamente. 
� Este ciclo é repetido até que a expressão de teste seja falsa 
(igual a zero), neste caso o laço termina
Ainda sobre WHILE 
Sintaxe 
while (expressão de teste)
{
instruções;
incremento;
}
Sintaxe
Portugol
ENQUANTO (condição) FAÇA
comando1;
comando2;
comando3;
FIM_ENQUANTO
C++
while ( i<10) // teste
{
instrução;
i++; // incremento
}
Exemplo Números inteiros de 1 a 20
1. #include <iostream.h>
2. int main ()
3. {
4. int i=0; // INICIALIZAÇÃO
5. while (i<=20) // TESTE
6. {
7. cout<<"\nO valor e: "<<i;
8. i++; // INCREMENTO
9. }
10. cout<<"\n";
11. system("pause");
12. }
Exercícios:
1. Construa um algoritmo em C++ para calcular a média de um conjunto de valores 
inteiros e positivos, fornecidos pelo usuário através do teclado. Novamente, o dado 
finalizar é o número –1, e este não deve ser considerado 
2. Escreva um algoritmo em C++ que leia vários números e informe quantos números 
entre 10 e 20 foram digitados. Quando o valor 0 (zero) for lido, o algoritmo deverá
cessar sua execução 
3. Dado um país A, com 5.000.000 de habitantes e uma taxa de natalidade de 3% ao ano, 
e um país B com 7.000.000 de habitantes e uma taxa de natalidade de 2% ao ano, 
calcular e imprimir o tempo necessário para que a população do país A ultrapasse a 
população do país B.
4. Construa um algoritmo em C++ para calcular a média de valores PARES e 
ÍMPARES, que serão digitados pelo usuário. Ao final o algoritmo deve mostrar estas 
duas médias. O algoritmo deve mostrar também o maior número PAR digitado e o 
menor número ÍMPAR digitado. Para finalizar o usuário irá digitar um valor negativo.
Exemplo em Portugol:
� Faça um programa que receba o salário de um funcionário 
chamado carlos. Sabe-we que outro funcionário, João, tem 
salário equivalente a um terço do salário de Carlos. Carlos 
aplicará seu salário integralmente na cardeneta de poupança, 
que está rendendo 2% ao mês, e João aplicará seu salário 
integralmente no fundo de renda fixa, que está rendendo 5% 
ao mês. O programa deverá calcular e mostrar a quantidade de 
meses nedcessários para que o valor pertencente a João iguale 
ou ultrapasse o valor pertencente a Carlos:
Resolução Portugol
ALGORITMO
DECLARE sal_carlos, sal_joao, meses NUMÉRICO;
ESCREVA “Entre com o salário de Carlos: ”;
LEIA sal_carlos;
sal_joao=sal_carlos/3;
ENQUANTO sal_joao<=sal_carlos FAÇA
INICIO
sal_carlos←sal_carlos+(sal_carlos * 2/100);
sal_joao←sal_joao+(sal_joao * 5/100);
meses ←meses+1;
FIM
ESCREVA “Foram necessários ”, meses, “ para igualar ou ultrapassar o valor de Carlos!”;
FIM_ALGORITMO
Exercício 1
1. #include<iostream.h>
2. int main ()
3. {
4. float valor, soma, contador;
5. float media;
6. cout<<"\nEntre com um valor: ";
7. cin>>valor; 
8. while (valor!=-1)
9. {
10. soma+=valor; 
11. contador+=1;
12. cout<<"\nEntre com um valor: ";
13. cin>>valor; 
14. }
15. media=(soma/contador);
16. cout<<"\nA media e: "<<media;
17. cout<<"\n\n";
18. system("pause");
19. }
Exercício 21. #include<iostream.h>2. int main ()
3. {
4. int n,i;
5. cout<<"\nEntre com um numero: ";
6. cin>>n;
7. i=0;
8. while (n != 0)
9. {
10. if (n>10 && n<20)
11. {
12. i=i+1;
13. }
14. cout<<"\nEnre com um numero: ";
15. cin>>n;
16. }
17. cout<<"\nForam digitados "<<i<<" numeros entre 10 e 20!";
18. cout<<"\n\n";
19. system("pause");
20. }
1. #include<iostream.h>
2. int main ()
3. {
4. float a,b;
5. int t;
6. a=5;
7. b=7;
8. t=0;
9. while (a<=b)
10. {
11. t++;
12. cout<<"\nAno "<<t;
13. cout<<"\n";
14. a=a+(a*.03);
15. cout<<"Cidade A:"<<a<<" milhoes de pessoas";
16. cout<<"\n";
17. b=b+ (b*.02);
18. cout<<"Cidade B:"<<b<<" milhoes de pessoas";
19. }
20. cout<<"\nSerao necessarios "<< t <<" anos!";
21. cout<<"\n\n\b\b\b";
22. system("pause");
23. }
Exercício 3
Exercício 4
1. #include <iostream.h>
2. int main ()
3. {
4. int n;
5. float MediaPar,MediaImpar,SomaPar,SomaImpar;
6. float MaiorPar,MaiorImpar,Npar,Nimpar;
7. MediaPar=0; MediaImpar=0; SomaPar=0;
8. SomaImpar=0; MaiorPar=0; MaiorImpar=0;
9. Npar=0; Nimpar=0;
10. cout<<"\nEntre com numero: ";
11. cin>>n; 
12. while (n>0)
13. {
14. if (n%2==0)
15. {
16. SomaPar+=n;
17. //cout<<SomaPar<<"-";
18. if (n>MaiorPar){
19. MaiorPar=n;}
20. Npar+=1; 
21. //cout<<Npar;
22.} 
23. else
24. {
25. SomaImpar+=n;
26. if (n>MaiorImpar){
27. MaiorImpar=n;}
28. Nimpar+=1; 
29. } 
30. cout<<"\nEntre com numero: ";
31. cin>>n; 
32. }
33. MediaPar=SomaPar/Npar;
34. MediaImpar=SomaImpar/Nimpar;
35. system("cls");
36. cout<<"\n R E S U L T A D O S ";
37. cout<<"\nA media dos numeros pares e: "<<MediaPar;
38. cout<<"\nA media dos numeros impares e: "<<MediaImpar;
39. cout<<"\nO maior numero par encontrado foi: "<<MaiorPar;
40. cout<<"\nO maior numero impar encontrado foi: "<<MaiorImpar;
41. cout<<"\n\n";
42. system("pause");
43. }
Estrutura do while - REPITA
� Bem similar ao laço while
� Deve ser utilizado, sempre quando o loop tem que ser executado PELO 
MENOS uma vez, e para continuar, deverá obedecer a uma condição 
imposta no final.
� O comando do-while tem um comportamento bastante semelhante ao 
while, diferenciando-se apenas em um único ponto. Não é feito nenhum 
teste antes de entrar no loop pela primeira vez.
� Ou seja, o comando do-while só é interessante em situações em que se 
pode afirmar que o loop acontecerá pelo menos uma vez 
Exemplo
Programa ADVINHA
Sintaxe
Portugol
REPITA
instruções.
ATÉ (condição)
C++
do
{
instrução;
i++; // incremento
}
while ( i<10); // teste
Exemplo
� Exemplo 1: Faça um programa para calcular a aárea
de um triangulo, que não permita a entrada de dados 
inválidos, ou seja, medidas menores ou iguais a 0.
� Exemplo: Fazer um programa que vá somando os 
valores de entrada até a soma der 40, ao final deverá
ser apresentado quantos números foram digitados.
Resolução em Portugol: Exercício 01
ALGORITIMO
DECLARE base, altura, area NUMÉRICO;
REPITA
ESCREVA “Entre com o valor da base: ”;
LEIA base;
ATÉ base>0
REPITA
ESCREVA “Entre com o valor da altura: ”;
LEIA altura;
ATÉ altura>0
area←(base*altura)/2;
ESCREVA “A area do triangulo e: ”, area;
FIM_ALGORITMO
Exemplo 02: C++
1. #include<iostream.h>
2. int main ()
3. {
4. int i,numero;
5. int cont=0;
6. int soma=0;
7. do
8. {
9. cout<<"\n Entre com um numero: ";
10. cin>>numero;
11. soma+=numero; 
12. cont++;
13. }
14. while (soma<=40); 
15. cout<<"\n Foram digitados "<<cont<<" numeros";
16. cout<<"\n";
17. system ("pause");
18. }
Conclusões:
O ENIAC (Electrical Numerical Integrator and Computer) foi o primeiro computador
digital eletrônico de grande escala. Criado em fevereiro de 1946 pelos cientistas norte-
americanos John Eckert e John Mauchly, da Electronic Control Company .
Considerações
� As ações de repetições estão presentes em grande parte dos programas, 
daí a importância do seu estudo 
� O laço for é utilizado quando conhecemos o n° de iterações a serem 
executadas.
� Os laços while e do while são apropriados para situações em que o laço 
pode ser terminado inesperadamente, por condições internas do laço
� As instruções de um laço while pode ser nunca executado. Entretanto, as 
instruções do laço do while é sempre executado pelo menos uma vez.
� Comandos de laços podem fazer parte do corpo de outro laço. Neste 
caso, dizemos que os laços internos estão aninhados. 
Análise:
Mostrar os números
de 0 a 10.
1. #include<iostream.h>
2. int main ()
3. {
4. cout<<0<<"\n";
5. cout<<1<<"\n";
6. cout<<2<<"\n";
7. cout<<3<<"\n";
8. cout<<4<<"\n";
9. cout<<5<<"\n";
10. cout<<6<<"\n";
11. cout<<7<<"\n";
12. cout<<8<<"\n";
13. cout<<9<<"\n";
14. cout<<10<<"\n";
15. cout<<"\n";
16. system ("pause");
17. }
Utilizando laço para 
contar de 0 a 10 Usando Usando Usando Usando whilewhilewhilewhile
#include<iostream.h>
int main ()
{
int i=0;
whilewhilewhilewhile (i<=10)
{
cout<<i<<"\n";
i++;
}
cout<<"\n";
system ("pause");
}
Usando forUsando forUsando forUsando for
#include<iostream.h>
int main ()
{
forforforfor (int i=0;i<=10;i++ )
{
cout<<i<<"\n";
}
cout<<"\n";
system ("pause");
}
Usando do Usando do Usando do Usando do whilewhilewhilewhile
#include<iostream.h>
int main ()
{
int i=0;
dodododo
{
cout<<i<<"\n";
i++;
}whilewhilewhilewhile (i<=10);
cout<<"\n";
system ("pause");
}
Resumos das operações
Até a próxima aula
Alexandre Wagner 
axlwagner@gmail.com

Continue navegando