Baixe o app para aproveitar ainda mais
Prévia do material em texto
Comandos de Controle em C Comandos de Iteração - Repetição 2 Comandos de Iteração • Existem situações em que é necessário repetir um determinado trecho de programa um número de vezes ou até que algo aconteça. 3 Comandos de Iteração A estrutura de repetição permite que uma seqüência de comandos seja executada repetidamente até que uma determinada condição de interrupção seja satisfeita. A condição de interrupção que deve ser satisfeita é representada por uma expressão lógica. 4 Comandos de Iteração - Exemplo • Suponha que um usuário deseje verificar a área de um número não determinado de triângulos. • O problema é que não se sabe a quantidade exata de triângulos. • Se fosse implementado um programa que verificasse a área de apenas um triângulo, o usuário teria que executá-lo quantas vezes fosse necessário, saindo e entrando novamente no programa. • É possível implementar um programa que repetisse a verificação enquanto o usuário desejasse, fazendo-lhe uma pergunta como "Deseja verificar área de outro triângulo?". 5 Comandos de Iteração - Exemplo • Suponha que se deseje calcular a soma de idades de um número indeterminado de pessoas em que o usuário digita uma idade inválida (0 ou um número negativo) quando deseja encerrar a entrada das idades. • Assim, repetem-se a entrada e o cálculo da soma, terminando quando o usuário digita uma idade inválida. 6 Comandos de Iteração Existem três estruturas de repetição que podem ser utilizadas: for – recomendado quando há um número determinado de repetições while – recomendado quando há um número indeterminado de repetições do while – também recomendado quando há um número indeterminado de repetições, mas possui diferenças em relação ao while. 7 Comandos de Iteração • Apesar de cada laço ter a sua recomendação, todo problema pode ser resolvido com qualquer laço. • Existem diferenças entre eles, como na sintaxe e em seu próprio uso. 8 8 Comandos de Iteração – Comando for Forma Geral for (inicialização; condição; incremento) comando; onde: inicialização: geralmente um comando de atribuição que coloca um valor inicial para as variáveis de controle do laço for. condição: uma condição relacional, lógica ou aritmética que define até quando a iteração pode cont inuar (condição de permanência da repet ição) incremento: define como a variável de controle do laço varia cada vez que o laço é repet ido. •Deve-se usar chaves se o corpo do laço tiver mais de uma inst rução. 9 Comandos de Iteração – Comando for Existirá sempre uma inicialização da variável de controle, um teste para verificar se a variável atingiu o limite e um acréscimo/decréscimo na variável de controle. 10 Comandos de Iteração – Comando for //ProgC036.cpp - escreve * 20 vezes na tela #include <iostream> #include <cstdlib> using namespace std; int main(){ int i; for( i=0 ; i < 20 ; i++) cout << '*'; cout << endl; system("PAUSE"); return 0; } Comando for inicialização Condição de parada Incremento Comando que irá se repetir 11 Comandos de Iteração – Comando for //ProgC037 - Imprime a tabuada do 6 #include <iostream> #include <cstdlib> using namespace std; int main(){ int i; for( i=1 ; i <= 10 ; i++ ) cout << '\n' << "\t" << i << " x 6 = " << "\t" << (i*6); cout << endl; system("PAUSE"); return 0; } Comando for Comando que irá se repetir inicialização Condição de parada Incremento 12 12 Comandos de Iteração – Comando for /* ProgC038.cpp Programa que conta de 1 a 100*/ #include <iostream> #include <cstdlib> int main ( ){ int Contador; for (Contador = 1; Contador <= 100; Contador++) std::cout << "\t" << Contador; system("PAUSE > null"); return 0; } Comando for Comando que irá se repetir inicialização Condição de parada Incremento 13 Comandos de Iteração – Comando for //ProgC039.cpp - Apresenta números pares de // 0 a 100 #include <iostream> using namespace std; int main(){ int i; for (i = 0; i <= 100; i = i + 2) cout << i << "\t"; return 0; } Comando for Comando que irá se repetir inicialização Condição de parada Incremento 14 Comandos de Iteração – Comando for //ProgC040 - Calcula o quadrado de um número usando soma //o quadrado de n = soma dos n primeiros números ímpares #include <iostream> #include <cstdlib> using namespace std; int main(){ int n, soma=0; cout << "Digite um numero>" << endl; cin >> n; cout << "O quadrado de " << n << " e "; if( n < 0 ) n = -n; //se negativo, muda o sinal for(int i=1 ; n > 0 ; n--) { soma +=i; i += 2; } cout << soma << endl; system("PAUSE"); return 0; } Declaração do i dentro do for, só existe neste bloco. 15 Comandos de Iteração – Comando for //ProgC041 - Série de Fibonacci #include <iostream> using namespace std; int main(){ int N, a, b, c; cout << "Digite o numero de termos desejados: "; cin >> N; a = 0; b = 1; cout << b << endl; if (N ==1) return 0; for (int i = 2; i <= N; i++){ c = a + b; a = b; b = c; cout << c << endl; } return 0; } Cálculo dos termos da série. O primeiro e o segundo termo são iguais a 1. Imprime o primeiro termo O próximo termo é igual à soma dos dois anteriores. 16 Comandos de Iteração – Comando for //ProgC042 - Imprime linha - Repetição e Função #include <iostream> #include <cstdlib> using namespace std; void linha(int n); int main(){ linha(21); cout << endl; cout << "* FELIZ ANIVERSARIO *" << endl; linha(21); cout << endl; system("PAUSE"); return 0; } void linha( int n){ for(int i=0; i<n; i++) cout << '*'; } Protótipo da Função Chamada da Função Função Comando de repetição 17 Comandos de Iteração – Comando for //ProgC043.cpp - Imprime os divisores de um número #include <iostream> using namespace std; bool divisivel(int x, int y){ if (x % y == 0) return true; return false; } int main(){ int N; cout << "Digite um numero: "; cin >> N; for (int i = 1; i <= N; i++){ if ( divisivel(N, i) ) cout << i << endl; } return 0; } Função divisível – retorna tipo de dados bool – true ou false Chamada da Função divisível Repetição 18 Comandos de Iteração – Comando for //ProgC044.cpp - Imprime um tabuleiro de xadrez #include <iostream> #include <cstdlib> using namespace std; int main(){ system("cls"); //limpa a tela for(int lin=1;lin<=8;lin++) //move o cursor para baixo { for(int col=1;col<=8;col++) //move o cursor para direita if((lin+col)%2==0) //é número par? cout << "\xdb\xdb"; else cout << " "; cout << endl; } system("PAUSE"); return 0; } Comando for aninhado 19 Comandos de Iteração – Comando for //ProgC045.cpp - Imprime a tabuada do 2 ao 9 #include <iostream> #include <cstdlib> #include <iomanip> using namespace std; int main(){ system("cls"); //limpa a tela for( int k=0 ; k <= 1 ; k++) { cout << endl; for(int i=1 ; i <= 4 ; i++) cout << "TABUADA DO" << setw(3) << (i+4*k+1) << " "; cout << endl; for( int i = 1; i <= 9 ; i++) { for( int j=2+4*k; j <=5+4*k; j++) cout<<setw(3)<<j<<"x"<<setw(3)<<i<<" = "<<setw(3)<<j*i<<" "; cout << endl; } }system("PAUSE"); return 0; } Comando for aninhado 20 20 Comandos de Iteração – Comando for /* ProgC046.cpp Malha de repetição For com comando composto */ #include <iostream>#include <cstdlib> int main ( ){ int Indice, Numero; for (Indice = 100; Indice != 65; Indice -= 5){ Numero = Indice * Indice; std::cout << "\nO quadrado de " << Indice << " e: " << Numero; } system("PAUSE > null"); return 0; } Condição e incremento diferenciado 21 21 Comandos de Iteração – Comando for /* ProgC047.cpp Repeticao For com 2 variaveis de controle */ #include <iostream> #include <windows.h> #include <cstdlib> #include <string.h> void gotoxy (int x, int y){ SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),(COORD){x,y}); } int main ( ){ char Nome[9] = "UNIFEI"; int Indice1,Indice2; system ("CLS"); for (Indice1=0, Indice2=strlen (Nome) - 1; Indice1 < strlen (Nome); Indice1++, Indice2--) { gotoxy(10+Indice1, 1); std::cout << Nome[Indice1]; gotoxy(10+Indice1, 2); std::cout << Nome[Indice2]; } system("PAUSE > null"); return 0; } Função que possibilita colocar o cursor em um ponto da tela. Comando for trabalhando com mais de uma variável de controle. Função da Biblioteca windows. 22 22 Comandos de Iteração – Comando for - Exemplo /* ProgC048.cpp Repeticao for infinita */ #include <iostream> #include <cstdlib> int main ( ){ for (;;) std::cout << "Laco sem fim!"; system("PAUSE > null"); return 0; } O for possui partes que não são obrigatórias, assim este comando torna-se uma repetição infinita. 23 23 Comandos de Iteração – Comando for - Exemplo /* ProgC049.cpp Repeticao for sem corpo */ #include <iostream> #include <cstdlib> int main ( ){ long int Contador; std:: cout << "Espere um pouco..."; for (Contador = 1; Contador < 5000000; Contador++); std:: cout << "\n\nTerminei !"; system("PAUSE > null"); return 0; } Comando for que não tem nenhum comando sendo repetido. Útil quando se deseja que o tempo passe. 24 Comandos de Iteração – Comando while • A estrutura de repetição while é utilizada quando não se sabe o número de vezes que um trecho do algoritmo deve ser repetido, embora também possa ser utilizada quando se conhece esse número. • Essa estrutura baseia-se na análise de uma condição, de forma que a repetição será feita enquanto a condição mostrar-se verdadeira. 25 Comandos de Iteração – Comando while Enquanto o valor da condição for verdadeiro, as ações dos comandos são executadas. Quando for falso, o comando é abandonado. Se já da primeira vez o resultado é falso, os comandos não são executados nenhuma vez. 26 26 Comandos de Iteração – Comando while Comando while Forma Geral while (condição) comando; onde: condição: é qualquer expressão onde o resultado é um valor igual ou diferente de zero. comando: é um comando vazio, um comando simples ou um comando em bloco (comando composto). 27 Comandos de Iteração – Comando while //ProgC050.cpp - Escreve 20 asteriscos na tela. #include <iostream> #include <cstdlib> using namespace std; int main(){ int i = 0; while( i < 20 ) { cout << '*'; i++; } cout << endl; system("PAUSE"); return 0; } Comando while Inicialização da variável de controle Teste da condição Incremento da variável 28 Comandos de Iteração – Comando while //ProgC051.cpp - Jogo de Cara e Coroa #include <iostream> #include <cstdlib> using namespace std; int main(){ int n, perda=0, ganho=0; cout << "Quantas vezes que jogar? "; cin >> n; for ( int i=0; i < n; i++) { int resp; cout << "Escolha: 0=Cara e 1=Coroa: "; cin >> resp; while ( resp != 0 && resp != 1) { cout << "ERRO: entre 0 cara e 1 coroa "; cin >> resp; } if (rand()%2==resp) { ganho++; if(resp==0) cout << "Deu Cara, voce ganhou." << endl; else cout << "Deu Coroa, voce ganhou." << endl; } else { perda++; if(resp==0) cout << "Deu Coroa, voce perdeu." << endl; else cout << "Deu Cara, voce perdeu."; } } cout << "\n\nRelatorio Final:"; cout << "\nNo. de jogos que voce ganhou: " << ganho; cout << "\nNo. de jogos que voce perdeu: " << perda << endl; system("PAUSE"); return 0; } Comando while Comando for 29 Comandos de Iteração – Comando while //ProgC052 - Programa que calcula a Média #include <iostream> using namespace std; int main(){ int N, alunos, acima_60; float nota, soma, media; cout << "Digite a quantidade de alunos: "; cin >> N; acima_60 = 0; soma = 0; alunos = 1; while (alunos <= N){ cout << "Digite a nota do aluno numero " << alunos << endl; cin >> nota; soma = soma + nota; if (nota > 60) acima_60++; alunos++; } media = soma / N; cout << "Numero de alunos acima de 60: " << acima_60 << endl; cout << "Media das notas da turma: " << media << endl; return 0; } Inicialização Condição Incremento 30 Comandos de Iteração – Comando while //ProgC053.cpp - Validação de entrada de dados #include <iostream> using namespace std; int main(){ float base, altura, area; base = 0; while (base <= 0){ cout << "Digite a medida da base: "; cin >> base; } altura = 0; while (altura <= 0){ cout << "\nDigite a medida da altura "; cin >> altura; } area = base * altura / 2; cout << "Area = " << area; return 0; } Inicialização Condição Nova entrada Inicialização Inicialização Condição Nova entrada 31 31 Comandos de Iteração – Comando while - Exemplo /* ProgC054.cpp Programa que apresenta a malha de repeticao while */ #include <iostream> #include <stdio.h> #include <cstdlib> int main ( ){ char Caractere = 0; while (Caractere != '\n') Caractere = getchar(); std::cout << "\nFim"; system("PAUSE > null"); return 0; } Inicialização Condição Atualização 32 Comandos de Iteração – Comando while - Exemplo //ProgC055.cpp Conta caracteres de uma frase #include <iostream> #include <cstdlib> #include <stdio.h> using namespace std; int main(){ int cont=0; char Caractere; while(Caractere = getchar() != '\n') cont++; cout << "\nO numero de caracteres e " << cont << endl; system("PAUSE"); return 0; } Inicialização, condição e incremento 33 Comandos de Iteração – Comando do while A estrutura de repetição do-while pode ser utilizada quando o número de repetições necessárias não é fixo. Os comandos são executados pelo menos uma vez. Quando a condição é encontrada, ela é testada. Os comandos são executados até que a condição se torne falsa. 34 34 Comandos de Iteração – Comando do while Forma Geral do { comando; } while (condição); Ao contrário dos laços while e for que testam a condição de permanência no começo, o laço do- while testa a condição de permanência no final. O comando dentro das chaves será executado enquanto a condição for satisfeita. Comando do … while 35 35 Comandos de Iteração – Comando do while /* ProgC056.cpp Programa que apresenta a malha de repeticao do-while */ #include <iostream> #include <cstdlib> int main ( ){ int Contador = 1; do { std::cout << Contador << "\t"; Contador++; } while (Contador <= 100); system("PAUSE > null"); return 0; } Comando do … while Inicialização Atualização Teste 36 Comandos de Iteração – Comando do while //ProgC057.cpp - Teste dos Triângulos #include <iostream> using namespace std; int main(){ float base, altura, area; do { cout << "Digite a medida da base: "; cin >> base; } while (base <= 0); do { cout << "\nDigite a medida da altura "; cin >> altura; } while (altura <= 0); area = base * altura / 2; cout << "Area = " << area; return0; } Comando do … while Comando do … while Atualização Atualização Teste Teste 37 Comandos de Iteração – Comando do while //ProgC058.cpp - Testa a capacidade de adivinhar uma letra #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main(){ char joga; do //inicio do laço { int adivinha; int tentativas = 1; int resp; srand(time(NULL)); adivinha = rand() % 26; cout << "\n\nDigite um numero entre 0 e 25: " << endl; cin >> resp; while(resp != adivinha) { cout << resp << " e incorreto. Tente novamente" << endl; tentativas++; cin >> resp; } cout << resp << "\n E CORRETO!!" << "\nVoce acertou em " << tentativas << " tentativas"; cout << "\nQuer jogar novamente? (s/n): "; cin >> joga; } while(joga =='s'); //fim do laço cout << "\nAte logo!" << endl; system("PAUSE"); return 0; } Comando do … while Comando while 38 Comandos de Iteração – Comando do while //ProgC059 - Mostra repetição e função com passagem de argumentos por referência #include <iostream> #include <cstdlib> using namespace std; void reajusta20( float& p, float& r); int main(){ float preco, val_reaj; do { cout << "Insira o preco atual ou 0 para terminar: "; cin >> preco; reajusta20(preco,val_reaj); cout << "Preco novo = " << preco << endl; cout << "Aumento = " << val_reaj << endl; } while( preco != 0.0); system("PAUSE"); return 0; } void reajusta20(float& p, float& r) //Reajusta o preço em 20% { r = p * 0.2; p = p * 1.2; } Comando do … while Função com passagem por referência 39 Tópicos para Discussão Estruturas de Repetição for while do while 40 40 Exercícios Faça um programa que leia várias idades e que calcule e mostre a média das idades digitadas. Para finalizar a entrada das idades o usuário deve digitar idade igual a zero. Deve ser criada uma versão do programa para cada estrutura de repetição estudada (while, for e do...while). Slide 1 Slide 2 Slide 3 Slide 4 Slide 5 Slide 6 Slide 7 Slide 8 Slide 9 Slide 10 Slide 11 Slide 12 Slide 13 Slide 14 Slide 15 Slide 16 Slide 17 Slide 18 Slide 19 Slide 20 Slide 21 Slide 22 Slide 23 Slide 24 Slide 25 Slide 26 Slide 27 Slide 28 Slide 29 Slide 30 Slide 31 Slide 32 Slide 33 Slide 34 Slide 35 Slide 36 Slide 37 Slide 38 Slide 39 Slide 40
Compartilhar