Escolar Documentos
Profissional Documentos
Cultura Documentos
Estruturas de repetio
Diferente do ser humano, o computador no se cansa de realizar operaes repetitivas. Diante disto, podemos incluir nos algoritmos as estruturas de repetio. O que uma repetio?
Tambm chamada a lao ou loop; uma instruo que permite a execuo de um trecho de algoritmo vrias vezes seguidas. Repetio com teste no incio; Repetio com teste no final; Repetio com varivel de controle.
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> faa <comando>;
Comando REPITA
O comando REPITA indica que todos os comandos entre a palavra repita e a palavra at encontram-se dentro de um lao e devem ser executados. Aps a palavra at deve haver uma expresso lgica que:
Se falsa, indica que o lao deve ser executado novamente; Se verdadeira, indica que o lao acabou e o algoritmo deve continuar sendo executado.
A deciso entre repetir e parar o lao feita ao final do comando. garantido que o lao ser executado aos menos uma vez.
O mais prximo do REPITA em java a instruo do...while Teste realizado aps a execuo do corpo do loop.
O corpo do loop sempre executa ao menos uma vez. Diferente do repita, o cdigo continuar sendo executado enquanto a instruo for VERDADEIRA.
Comando ENQUANTO
O comando ENQUANTO indica que o comando seguinte ser executado, desde que o resultado da expresso lgica seja verdadeiro. Apesar do ENQUANTO permitir apenas a repetio de um nico comando, nada que 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 lao e avalia novamente a expresso lgica:
Se verdadeira, o computador far uma nova execuo do trecho; Se falsa, o computador pra a execuo e continua no prximo comando aps o trecho repetido.
A deciso entre repetir e parar o lao feita no incio do comando. Se o teste for falso desde o incio, o lao no ser executado.
7
Implementado com a instruo while instruo que efetua o teste antes da execuo do corpo do loop.
O
Exerccio:
Fazer um programa para ler diversos nmeros informados pelo usurio usando o comando do while, e aps cada leitura exibir se o nmero par ou mpar. Considere que ao fornecer um valor negativo o usurio deseja encerrar e entrada de dados.
10
Soluo
Quantos dados sero fornecidos? Quantas variveis sero necessrias? Temos que identificar o trecho que ser repetido e adicion-lo dentro de um comando de repetio, declarando apenas as variveis necessrias para uma repetio.
11
Incio
repita escrever Para sair, entre com um valor menor que 0; escrever Entre com o nmero: ; ler num; se num % 2 = 0 ento escrever O nmero par seno escrever O nmero mpar; at num < 0; Fim
12
Exerccio:
14
Soluo (cont.)
Executando o teste de mesa para os valores 8, 11, 21, 8 e -1, teramos as seguintes mensagens:
8 O nmero par 11 O nmero mpar 21 O nmero mpar 8 O nmero par -1 O nmero mpar
17
Soluo (cont.)
Como
18
Soluo (cont.)
Como
Colocar uma leitura antes do lao, e uma segunda leitura como ltimos comandos dentro do lao.
19
Soluo (cont.)
Variveis contadoras
Uma varivel chamada de contadora quando armazena dentro de si um nmero referente a uma certa quantidade de elementos ou iteraes. Este tipo de varivel muito comum em estruturas de repetio, dada as suas diversas aplicaes em problemas que envolvem contagens de valores. Exemplo:
21
Variveis contadoras
Soluo
escrever Valores inteiros de 1 a 100; valor = 1; repita possvel resolver escrever valor; utilizando o ENQUANTO? valor = valor + 1; at valor > 100; Fim
22
Programa em Java
public static void main(String[] args) { int valor = 1; System.out.println( "Valores inteiros entre 1 e 100"); do { System.out.println( "valor = " + valor); valor = valor + 1; } while (valor <100);
23
Variveis contadoras
Soluo
24
Variveis contadoras
Exerccio:
Escrever um programa que leia 10 nmeros inteiros fornecidos pelo usurio, e exiba quantos nmeros mpares foram informados.
25
Variveis contadoras
Soluo
Sero necessrias 10 leituras. Podemos criar uma varivel contadora para controlar este lao. Precisaremos de uma outra varivel para contar a quantidade de nmeros mpares.
No podemos deixar para contar aps a repetio, pois cada nmero fornecido apaga o anterior. Logo precisamos ir contando aps cada entrada, incrementando uma nova varivel contadora. Esta nova varivel contadora s incrementada se o nmero informado for mpar.
26
Variveis contadoras
Soluo
Variveis cont, num, qtd_impar : inteiro;
Incio
cont = 1; qtd_impar = 0 enquanto cont <= 10 faa [[ escrever Digite um nmero: ; ler num; se num % 2 <> 0 ento qtd_impar = qtd_impar + 1; cont = cont + 1; ]]; escrever O total de mpares foi + qtd_impar;
Fim
27
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 + " nmero:"); numero = Leia(numero); if (numero % 2 != 0) qtd_impar = qtd_impar + 1; contador = contador +1; }
Variveis acumuladoras
Uma varivel chamada de acumuladora quando tem por caracterstica armazenar dentro de si o resultado acumulado de uma srie de valores. Quando armazenamos a soma de uma quantidade pequena de nmeros, a atribuio direta. Numa repetio devemos armazenar a soma de diversos nmeros sucessivos, e para isto utilizamos uma varivel acumuladora. Exemplo
Calcular a soma de diversos nmeros reais informados pelo usurio. A entrada de dados termina com o nmero -999.
29
Variveis acumuladoras
Soluo
A varivel iniciada como 0 pois, caso o usurio fornea -999 na primeira execuo, o valor total da soma 0.
Incio
soma = 0; escrever Para sair, entre com -999; escrever Entre com o nmero: ; ler num; enquanto num <> -999 faa [[ soma = soma + num; escrever Entre com o nmero: ; ler num; ]]; escrever A soma foi , soma;
Fim
30
Variveis acumuladoras
Exerccio
Fazer um programa que leia diversos nmeros reais e exiba qual foi o maior de todos. O cdigo -1 sinaliza o fim da leitura.
31
Variveis acumuladoras
Soluo
Variveis num, maior : real; Incio escrever Para sair, entre com -1; escrever Entre com o nmero: ; ler num; maior <- num; enquanto num <> -1 faa [[ se num > maior ento maior <- num; escrever Entre com o nmero: ; ler num; ]]; se maior <> -1 ento escrever O maior nmero digitado foi , maior seno escrever Nenhum nmero vlido foi informado.; Fim
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 nmero:"); numero = Leia(numero); numero_maior = numero; while (numero != -1) { if (numero > numero_maior) numero_maior = numero; System.out.println("Digite um nmero:"); numero = Leia(numero); } if (numero_maior != -1) System.out.println("O maior nmero foi: " + numero_maior); else System.out.println("Nenhum nmero vlido foi informado"); }
33
Laos infinitos
Ao trabalhar com repeties, preciso tomar cuidado para no criar um lao infinito, ou seja, um lao que no termina. Neste tipo de situao a mquina permaneceria executando o lao indefinidamente, at que ocorra uma interveno externa. Exemplo:
34
Laos infinitos
Soluo:
Este decremento provoca um loop infinito.
Variveis
Repeties encadeadas
Da mesma forma que permitido o encadeamento de testes, tambm possvel encadear comandos de repetio. Um encadeamento de repeties ocorre quando h necessidade de efetuar um lao dentro de outro. Neste tipo de situao, o algoritmo possui repeties controladas por um teste interno e outro externo. Exemplo
36
Repeties encadeadas
Soluo
Variveis num, mult, cont : inteiro; Incio num <- 3; enquanto num <= 6 faa [[ escrever Tabuada de , num; cont = 1; enquanto cont <= 10 faa [[ mult = num * cont; escrever num, x, cont, =, mult; cont = cont + 1; ]]; num = num + 1; ]]; Fim
37
Repeties encadeadas
Exerccio
Escreva o algoritmo anterior em Java e observe o seu funcionamento. Em seguida, modifique o mesmo para mostrar a tabuada dos nmeros 1 a 5.
38
Comando PARA
muito comum a existncia de repeties que fazem uso de variveis contadoras, especialmente para contagens de 1 em 1. Para facilitar a construo deste tipo de lao, pode-se utilizar um outro comando de repetio complementar chamada PARA. Sua sintaxe :
para <var> de <valor_inicial> at <valor_final> faa <comando>;
39
Comando PARA
Exemplo:
40
Inicializao da varivel
Condio de parada
41
Formato geral
for (inicializao; condioDeParada; incremento) { instruo }
Inicializao
Nomeia a varivel de controle e incializa seu valor. Condio que determina se o loop deve parar.
Condio de parada
Incremento
Modifica o valor do contador para que a condio de parada tornese falsa ao final.
42
condio de parada for omitida, o compilador entende que a condio sempre verdadeira.
Loop infinito.
Caso
incremento seja calculado no corpo do loop, esta expresso pode ser omitida; Caso contador seja inicializado antes de chegar a instruo, esta expresso pode ser omitida.
43
Calcule e exiba a soma de todos os nmeros pares contidos entre zero e um nmero fornecido via teclado (caso o nmero fornecido seja par, o mesmo dever fazer parte da soma).
44
Soluo
public static void main(String[] args) { double numero = 0, soma_pares =0; System.out.println("Digite um nmero > 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("Nmero invlido informado."); }
45
Comando PARA
Exerccios:
Faa um programa para exibir os nmeros 1, 4, 9, 16, 25, 36, ... , 10000. Faa um programa que leia 10 valores inteiros e positivos e depois informe:
Qual o maior valor; Qual o menor valor; A mdia dos nmeros lidos.
46
Soluo exerccio 1
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; } }
47
Soluo exerccio 2
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 nmero:"); 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;
48
Soluo exerccio 2
else if (numero < numero_menor) numero_menor = numero; System.out.println("Digite um nmero:"); numero = Leia(numero); } if (numero_maior != -1) { System.out.println("O maior nmero digitado foi: " + numero_maior); System.out.println("O menor nmero digitado foi: " + numero_menor); System.out.println("A mdia dos nmeros digitados : " + soma/contador); } else System.out.println("Nenhum nmero vlido foi informado");}
49
Estruturas de Repetio