Baixe o app para aproveitar ainda mais
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
Compartilhar