Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 Estruturas de Repetição Programação 2 Estruturas de repetição � Diferente do ser humano, o computador não se cansa de realizar operações repetitivas. � Diante disto, podemos incluir nos algoritmos as estruturas de repetição. � O que é uma repetição? � Também chamada a laço ou loop; � É uma instrução que permite a execução de um trecho de algoritmo várias vezes seguidas. � Nesta aula veremos: � Repetição com teste no início; � Repetição com teste no final; � Repetição com variável de controle. 3 Comandos REPITA e ENQUANTO � Tanto o comando REPITA quanto o comando ENQUANTO permitem repetir um ou mais comandos no corpo de um algoritmo. � A sintaxe dos comandos é: repita <comando1>; <comando2>; . . . <comandoN>; até <expr>; enquanto <expr> faça <comando>; 4 Comando REPITA � O comando REPITA indica que todos os comandos entre a palavra repita e a palavra até encontram-se dentro de um laço e devem ser executados. � Após a palavra até deve haver uma expressão lógica que: � Se falsa, indica que o laço deve ser executado novamente; � Se verdadeira, indica que o laço acabou e o algoritmo deve continuar sendo executado. � Esta estrutura é chamada de repetição com teste no final � A decisão entre repetir e parar o laço é feita ao final do comando. � É garantido que o laço será executado pelo menos uma vez. 5 Comando REPITA em C/C++ e Java � O mais próximo do REPITA é a instrução do...while � Teste realizado após a execução do corpo do loop. � O corpo do loop sempre executa pelo menos uma vez. � Diferente do repita, o código continuará sendo executado enquanto a instrução for VERDADEIRA. do { instrução } while ( condição ); 6 Exemplo (C/C++) comando do...while int contador = 1; //declara e inicializa o contador do { // Imprime e incrementa o contador cout << “Contador = ” << contador <<endl; contador = contador + 1; } while (contador <= 10); // testa a condição de parada 2 7 Exemplo (JAVA) comando do...while int contador = 1; //declara e inicializa o contador do { // Imprime e incrementa o contador System.out.println( “Contador = ” +contador); contador = contador + 1; } while (contador <= 10); // testa a condição de parada 8 Comando ENQUANTO � O comando ENQUANTO indica que o comando seguinte será executado, desde que o resultado da expressão lógica seja verdadeiro. � Apesar do ENQUANTO permitir apenas a repetição de um único comando, nada impede que seja utilizado um bloco de comandos. � Ao encontrar o fim do comando (ou do bloco), o computador volta para a 1ª linha do laço e avalia novamente a expressão lógica: � Se verdadeira, o computador fará uma nova execução do trecho; � Se falsa, o computador interrompe a execução e continua no próximo comando após o trecho repetido. � Esta estrutura é chamada de repetição com teste no início � A decisão entre repetir e parar o laço é feita no início do comando. � Se o teste for falso desde o início, o laço não será executado. 9 Comando Enquanto em C/C++ e Java � Implementado com a instrução while � instrução que efetua o teste antes da execução do corpo do loop. � O corpo do loop pode nunca ser executado. while ( condição ) { instrução } 10 Exemplo comando While em C/C++ int contador; // declara a variável de controle contador = 1; // inicializa a variável de controle while (contador <= 10) { // condição de parada do loop cout << “Contador = ” << contador <<endl; // incrementa a variável de controle por 1 contador = contador +1; } 11 Exemplo comando While em JAVA int contador; // declara a variável de controle contador = 1; // inicializa a variável de controle while (contador <= 10) { // condição de parada do loop System.out.println( “Contador = ” + contador); // incrementa a variável de controle por 1 contador = contador +1; } 12 Comandos REPITA e ENQUANTO � Exercício: � Fazer um programa para ler diversos pares de notas informados pelo usuário. Cada par de nota deve ser calculado a média dessas duas notas. Após cada leitura exibir a média das duas notas lidas. Considere que depois da exibição da média seja perguntado ao usuário se ele deseja finalizar o programa ou calcular mais, com a seguinte mensagem: “Digite 0 (zero) para finalizar o programa:”. 3 13 Comandos REPITA e ENQUANTO � Solução � Quantos dados serão fornecidos? � Quantas variáveis serão necessárias? � Temos que identificar o trecho que será repetido e adicioná-lo dentro de um comando de repetição, declarando apenas as variáveis necessárias para uma repetição. 14 Comandos REPITA e ENQUANTO � Solução usando repita(cont.) � O algoritmo fica assim: Variáveis n1, n2, m : real; res : inteiro; Início repita escreva “Digite a nota 1: ”; leia (n1); escreva “Digite a nota 2: ”; leia (n2); m <- (n1+n2)/2; escreva “Média = ”, m; escreva “Digite 0 (zero) para finalizar o programa: ”; leia (res); até res = 0; Fim 15 Solução em C/C++ usando do-while int main() { float n1, n2, m; int res; do { cout << "Digite a nota 1: "; cin >> n1; cout << "Digite a nota 2: "; cin >> n2; m = (n1+n2)/2; cout << "Média = " << m << endl; cout << "Digite 0 (zero) para finalizar o programa: "; cin >> res; } while (res != 0); return 0; } 16 Comandos REPITA e ENQUANTO � Exercício: �Refazer o programa anterior, só que desta vez usando while. 17 Solução em C/C++ usando while int main() { float n1, n2, m; int res = -1; while (res != 0) { cout << "Digite a nota 1: "; cin >> n1; cout << "Digite a nota 2: "; cin >> n2; m = (n1+n2)/2; cout << "Média = " << m << endl; cout << "Digite 0 (zero) para finalizar o programa: "; cin >> res; } return 0; } 18 Variáveis contadoras � Uma variável é chamada de contadora quando armazena dentro de si um número referente a uma certa quantidade de elementos ou iterações. � Este tipo de variável é muito comum em estruturas de repetição, dada as suas diversas aplicações em problemas que envolvem contagens de valores. � Exemplo: � Imprimir todos os números inteiros de 1 a 100. 4 19 Variáveis contadoras � Solução � O algoritmo não tem dados de entrada, e fica assim: Variáveis valor : inteiro; Início escrever “Valores inteiros de 1 a 100”; valor = 1; repita escrever valor; valor = valor + 1; até valor > 100; Fim É possível resolver utilizando o ENQUANTO? 20 Programa em C/C++ int main() { int valor = 1; cout << "Valores inteiros entre 1 e 100: \n"; do { cout << "valor = " << valor << endl; valor = valor + 1; } while (valor <=100); return 0; } 21 Variáveis contadoras � Solução � Utilizando o ENQUANTO o algoritmo fica assim: Variáveis valor : inteiro; Início escrever “Valores inteiros de 1 a 100”; valor = 1; enquanto valor <= 100 faça [[ escrever valor; valor = valor + 1; ]]; Fim 22 Variáveis contadoras � Exercício: �Escrever um programa que leia 10 números inteiros fornecidos pelo usuário, e exiba quantos números ímpares foram informados. 23 Variáveis contadoras � Solução � Serão necessárias 10 leituras. Podemos criar uma variável contadora para controlar este laço. � Precisaremos de uma outra variável para contar a quantidade de números ímpares. � Não podemos deixar para contar após a repetição, pois cada número fornecido apaga o anterior. Logo precisamos ir contando após cada entrada, incrementando uma nova variável contadora. � Esta nova variável contadora só é incrementada se o número informado for ímpar. 24 Variáveis contadoras � Solução Variáveis cont, num, qtd_impar : inteiro; Início cont = 1; qtd_impar = 0 enquanto cont <= 10 faça [[ escrever “Digite um número: ”; ler num; se num % 2 <> 0 então qtd_impar = qtd_impar + 1; cont = cont + 1; ]]; escrever “O total de ímpares foi “ , qtd_impar; Fim A variável é iniciada como 0 pois o usuário poderá informar 10 números pares 5 25 Programa em C/C++ int main() { int contador=1, numero=0, qtd_impar = 0; while (contador <=10) { cout << "Entre o " << contador << "º número: "; cin >> numero; if (numero % 2 != 0) qtd_impar = qtd_impar + 1; contador = contador +1; } cout << "O totalde números ímpares digitado foi: " << qtd_impar << endl; return 0; } 26 Programa em Java public static void main(String[] args) { int contador=1, numero=0, qtd_impar = 0; while (contador <=10) { System.out.println( "Entre o " + contador + "º número:"); numero = leia(numero); if (numero % 2 != 0) qtd_impar = qtd_impar + 1; contador = contador +1; } System.out.println("O total de números ímpares digitado foi: " + qtd_impar); } 27 Variáveis acumuladoras � Uma variável é chamada de acumuladora quando tem por característica armazenar dentro de si o resultado acumulado de uma série de valores. � Quando armazenamos a soma de uma quantidade pequena de números, a atribuição é direta. Numa repetição devemos armazenar a soma de diversos números sucessivos, e para isto utilizamos uma variável acumuladora. � Exemplo � Calcular a soma de diversos números reais informados pelo usuário. A entrada de dados termina com o número -999. 28 Variáveis acumuladoras � Solução � O algoritmo fica assim: Variáveis num, soma : real; Início soma = 0; escrever “Para sair, entre com -999”; escrever “Entre com o número: “; ler num; enquanto num <> -999 faça [[ soma = soma + num; escrever “Entre com o número: “; ler num; ]]; escrever “A soma foi ”, soma; Fim A variável é iniciada como 0 pois, caso o usuário forneça -999 na primeira execução, o valor total da soma é 0. 29 Variáveis acumuladoras � Exercício �Fazer um programa que leia diversos números reais e exiba qual foi o maior de todos. O código -1 sinaliza o fim da leitura. 30 Variáveis acumuladoras � Solução Variáveis num, maior : real; Início escrever “Para sair, entre com -1”; escrever “Entre com o número: “; ler num; maior <- num; enquanto num <> -1 faça [[ se num > maior então maior <- num; escrever “Entre com o número: “; ler num; ]]; se maior <> -1 então escrever “O maior número digitado foi ”, maior senão escrever “Nenhum número válido foi informado.”; Fim 6 31 Programa em C/C++ int main() { double numero = 0, numero_maior =0; cout << "Para sair, digite -1.\n"; cout << "Digite um número:"; cin >> numero; numero_maior = numero; while (numero != -1) { if (numero > numero_maior) numero_maior = numero; cout << "Digite um número:"; cin >> numero; } if (numero_maior != -1) cout << "O maior número foi: " << numero_maior; else cout << "Nenhum número válido foi informado"; return 0; } 32 Programa em Java public static void main(String[] args) { double numero = 0, numero_maior =0; System.out.println("Para sair, digite -1."); System.out.println("Digite um número:"); numero = leia(numero); numero_maior = numero; while (numero != -1) { if (numero > numero_maior) numero_maior = numero; System.out.println("Digite um número:"); numero = leia(numero); } if (numero_maior != -1) System.out.println("O maior número foi: " + numero_maior); else System.out.println("Nenhum número válido foi informado"); } 33 Laços infinitos � Ao trabalhar com repetições, é preciso tomar cuidado para não criar um laço infinito, ou seja, um laço que não termina. � Neste tipo de situação a máquina permaneceria executando o laço indefinidamente, até que ocorra uma intervenção externa. � Exemplo: � Imprimir os quadrados dos números inteiros de 1 a 10. 34 Laços infinitos � Solução: Variáveis valor, quadrado : real; Início escrever “Quadrados dos números inteiros de 1 a 10”; escrever “Entre com o número: “; valor = 1; repita quadrado = sqr(valor); escrever quadrado; valor = valor - 1; até valor > 10; escrever “Fim da impressão.”; Fim Este decremento provoca um loop infinito. 35 Repetições encadeadas � Da mesma forma que é permitido o encadeamento de testes, também é possível encadear comandos de repetição. � Um encadeamento de repetições ocorre quando há necessidade de efetuar um laço dentro de outro. � Neste tipo de situação, o algoritmo possui repetições controladas por um teste interno e outro externo. � Exemplo � Imprimir as tabuadas de multiplicação dos números 3, 4, 5 e 6. 36 Repetições encadeadas � Solução Variáveis num, mult, cont : inteiro; Início num <- 3; enquanto num <= 6 faça [[ escrever “Tabuada de ”, num; cont = 1; enquanto cont <= 10 faça [[ mult = num * cont; escrever num, “x”, cont, “=“, mult; cont = cont + 1; ]]; num = num + 1; ]]; Fim 7 37 Repetições encadeadas � Exercício �Escreva o algoritmo anterior em C/C++ e observe o seu funcionamento. Em seguida, modifique o mesmo para mostrar a tabuada dos números 1 a 5. 38 Comando PARA � É muito comum a existência de repetições que fazem uso de variáveis contadoras, especialmente para contagens de 1 em 1. � Para facilitar a construção deste tipo de laço, pode-se utilizar um outro comando de repetição complementar chamada PARA. Sua sintaxe é: para <var> de <valor_inicial> até <valor_final> faça <comando>; 39 Comando PARA � Exemplo: � Escrever os números inteiros de 1 a 100. � Solução com o comando PARA: Variáveis valor : inteiro; Início escrever “Valores inteiros de 1 a 100”; para valor de 1 até 100 faça escrever valor; Fim 40 Comando Para em C/C++ e Java � Instrução de repetição for foi criada para repetição por contador � Especifica os detalhes da repetição controlador por contador em uma única linha for ( int contador = 1; contador <= 10; contador++ ) { cout << contador << endl; } Inicialização da variável Condição de parada Incremento após iteração 41 Instrução de repetição for � Formato geral for (inicialização; condiçãoDeParada; incremento) { instrução } � Inicialização � Nomeia a variável de controle e inicializa seu valor. � Condição de parada � Condição que determina se o loop deve parar. � Incremento � Modifica o valor do contador para que a condição de parada torne-se falsa ao final. 42 Instrução de repetição for � Expressões da condição são opcionais � Se condição de parada for omitida, o compilador entende que a condição é sempre verdadeira. � Loop infinito. � Caso incremento seja calculado no corpo do loop, esta expressão pode ser omitida; � Caso contador seja inicializado antes de chegar a instrução, esta expressão pode ser omitida. 8 43 Instrução de repetição for � Calcule e exiba a soma de todos os números pares contidos entre zero e um número fornecido via teclado (caso o número fornecido seja par, o mesmo deverá fazer parte da soma). 44 Solução em C/C++ int main() { double numero = 0, soma_pares =0; cout << "Digite um número > 0:"; cin >> numero; if (numero >0) { for (int i=1;i<=numero; i++) { if (i % 2 == 0) soma_pares = soma_pares + i; } cout << "A soma dos pares é: " << soma_pares << endl; } else cout << "Número inválido informado."; return 0; } 45 Solução em JAVA public static void main(String[] args) { double numero = 0, soma_pares =0; System.out.println("Digite um número > 0:"); numero = leia(numero); if (numero >0) { for (int i=1;i<=numero; i++) { if (i % 2 == 0) soma_pares = soma_pares + i; } System.out.println("A soma dos pares é: "+soma_pares); } else System.out.println("Número inválido informado."); } 46 Comando PARA � Exercícios: �Faça um programa para exibir os números 1, 4, 9, 16, 25, 36, ... , 10000. �Faça um programa que leia 10 valores inteiros e positivos e depois informe: � Qual o maior valor; � Qual o menor valor; � A média dos números lidos. 47 Solução exercício 1 em C/C++ int main() { for (int i=1; i<100; i++) { cout << (i*i) <<", "; } cout << (100*100) << endl; return 0; } 48 Solução exercício 1 em C/C++ (outra) int main() { int numero = 1, contador =3; cout << numero; while (numero < 10000) { cout << ", " << (numero + contador); numero = numero + contador; contador = contador + 2; } return 0; } 9 49 Solução exercício 1 em JAVA public static void main(String[] args) { int numero = 1, contador =3; System.out.println(numero); while (numero < 10000) { System.out.println((numero + contador)); numero = numero + contador; contador = contador + 2; } } 50 Solução exercício 2 em C/C++ int main() { double numero,numero_maior, numero_menor, soma = 0, contador = 0; cout << "Para sair, digite -1."; cout << "Digite um número: "; cin >> numero; numero_maior = numero; numero_menor = numero; 51 Solução exercício 2 em C/C++ (cont) while (numero != -1) { contador = contador + 1; soma = soma + numero; if (numero > numero_maior) numero_maior = numero; else if (numero < numero_menor) numero_menor = numero; cout << "Digite um número:"; cin >> numero; } if (numero_maior != -1) { cout << "O maior número digitado foi: " << numero_maior <<endl; cout << "O menor número digitado foi: " << numero_menor <<endl; cout << "A média dos números digitados é: " << (soma/contador) << endl; } else cout << "Nenhum número válido foi informado!\n"; return 0; } 52 Solução exercício 2 em JAVA public static void main(String[] args) { double numero = 0, numero_maior =0, numero_menor=0,soma =0, contador =0; System.out.println("Para sair, digite -1."); System.out.println("Digite um número:"); numero = leia(numero); numero_maior = numero; numero_menor = numero; while (numero != -1) { contador = contador + 1; soma = soma + numero; if (numero > numero_maior) numero_maior = numero; 53 Solução exercício 2 em JAVA (cont) else if (numero < numero_menor) numero_menor = numero; System.out.println("Digite um número:"); numero = leia(numero); } if (numero_maior != -1) { System.out.println("O maior número digitado foi: " + numero_maior); System.out.println("O menor número digitado foi: " + numero_menor); System.out.println("A média dos números digitados é: " + soma/contador); } else System.out.println("Nenhum número válido foi informado");} Dúvidas ?
Compartilhar