View
113
Download
3
Category
Preview:
Citation preview
Estruturas de RepetiçãoEstruturas de Repetição
Programação em Java
Prof. Maurício Braga
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 aos menos uma vez.
5
Comando REPITA em Java
O mais próximo do REPITA em java é a instrução do...while
Teste realizado após a execução do corpo do loop. O corpo do loop sempre executa ao 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 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
7
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 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 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 pára 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.
8
Comando Enquanto em 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
}
9
Exemplo comando While
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
// incrementa a variável de controle por 1 System.out.println( “Contador = ” + contador);
contador = contador +1;}
10
Comandos REPITA e ENQUANTO
Exercício: Fazer um programa para ler diversos números informados pelo
usuário usando o comando do while, e após cada leitura exibir se o número é par ou ímpar. Considere que ao fornecer um valor negativo o usuário deseja encerrar e entrada de dados.
11
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.
12
Comandos REPITA e ENQUANTO
Solução usando repita(cont.) O algoritmo fica assim:
Variáveisnum : inteiro;
Iníciorepita
escrever “Para sair, entre com um valor menor que 0”;escrever “Entre com o número: “;ler num;se num % 2 = 0 então
escrever “O número é par”senão
escrever “O número é ímpar”;até num < 0;
Fim
13
Solução em Java usando do-whilepublic static void main(String[] args) {
// declaração de variáveis int num = 0;
do { System.out.println( "Para sair, entre com um valor < 0"); System.out.println( "Digite um número:"); num = Leia(num);
if (num % 2 == 0) System.out.println("O número é par");else System.out.println("O número é impar");
} while (num > 0); // testa a condição de parada}
14
Comandos REPITA e ENQUANTO
Exercício: Refazer o programa anterior, só que desta vez usando while.
15
Comandos REPITA e ENQUANTO
Solução usando enquanto (cont.) O algoritmo fica assim:
Variáveisinteiro: num =0;
Inícioenquanto num >= 0 faça
[[escrever “Para sair, entre com um valor menor que 0”;escrever “Entre com o número: “;ler num;se num % 2 = 0 então
escrever “O número é par”senão
escrever “O número é ímpar”;]];
Fim
16
Solução em Java usando whilepublic static void main(String[] args) {
// declaração de variáveis int num = 0;
while (num >=0) { System.out.println( "Para sair, entre com um valor < 0");
System.out.println( "Digite um número:");num = Leia(num);if (num % 2 == 0) System.out.println("O número é par");else System.out.println("O número é impar");
}}
17
Comandos REPITA e ENQUANTO
Solução (cont.) Executando o teste de mesa para os valores 8, 11, 21, 8 e -1,
teríamos as seguintes mensagens:
8O número é par11O número é ímpar21O número é ímpar8O número é par-1O número é ímpar
Esta mensagemnão deveria ser exibida
18
Comandos REPITA e ENQUANTO
Solução (cont.) Como podemos contornar este problema?
Adicionando mais uma condição ao comando SE se num >=0 e num %2 = 0 Solução pouco elegante, pois este teste é sempre verdadeiro,
exceto no último caso Utilizando o comando ENQUANTO ao invés do comando
REPITA
19
Comandos REPITA e ENQUANTO
Solução (cont.) Como podemos contornar este problema?
Retirando a leitura da variável de dentro do laço: Será gerado um laço infinito, pois num será lida apenas uma
vez, e se for >= 0, o laço nunca terminará. Iniciar a variável para um valor padrão que sempre
executará na 1ª vez: Caímos no mesmo problema que no algoritmo utilizando o
comando REPITA. Colocar uma leitura antes do laço, e uma segunda leitura
como últimos comandos dentro do laço.
20
Comandos REPITA e ENQUANTO Solução (cont.)
O algoritmo fica assim:Variáveis
num : inteiro;Início
escrever “Para sair, entre com um valor menor que 0”;escrever “Entre com o número: “;ler num;enquanto num >= 0 faça
[[se num % 2 = 0 então
escrever “O número é par”senão
escrever “O número é ímpar”;escrever “Entre com o número: “;ler num;]];
Fim
21
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.
22
Variáveis contadoras
Solução O algoritmo não tem dados de entrada, e fica assim:
Variáveisvalor : inteiro;
Inícioescrever “Valores inteiros de 1 a 100”;valor = 1;repita
escrever valor;valor = valor + 1;
até valor > 100;Fim
É possível resolverutilizando o ENQUANTO?
23
Programa em Javapublic 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);
}
24
Variáveis contadoras
Solução Utilizando o ENQUANTO o algoritmo fica assim:
Variáveisvalor : inteiro;
Inícioescrever “Valores inteiros de 1 a 100”;valor = 1;enquanto valor <= 100 faça
[[escrever valor;valor = valor + 1;]];
Fim
25
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.
26
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.
27
Variáveis contadoras
SoluçãoVariáveis
cont, num, qtd_impar : inteiro;Início
cont = 1;qtd_impar = 0enquanto 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 é iniciadacomo 0 pois o usuário
poderá informar 10números pares
28
Programa em Javapublic 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);
}
29
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.
30
Variáveis acumuladoras Solução
O algoritmo fica assim:
Variáveisnum, soma : real;
Iníciosoma = 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 é iniciadacomo 0 pois, caso o usuário
forneça -999 na primeiraexecução, o valor total da
soma é 0.
31
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.
32
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ãoescrever “O maior número digitado foi ”, maior
senãoescrever “Nenhum número válido foi informado.”;
Fim
33
Programa em Javapublic 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");}
34
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.
35
Laços infinitos
Solução:
Variáveisvalor, quadrado : real;
Inícioescrever “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 provocaum loop infinito.
36
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.
37
Repetições encadeadas Solução
Variáveisnum, 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
38
Repetições encadeadas
Exercício Escreva o algoritmo anterior em Java e observe o seu
funcionamento. Em seguida, modifique o mesmo para mostrar a tabuada dos números 1 a 5.
39
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>;
40
Comando PARA
Exemplo: Escrever os números inteiros de 1 a 100.
Solução com o comando PARA:
Variáveisvalor : inteiro;
Inícioescrever “Valores inteiros de 1 a 100”;para valor de 1 até 100 faça
escrever valor;Fim
41
Comando Para em 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++ ) {
System.out.printf( “%d ”, contador );
}
Inicialização da variávelCondição de parada Incremento após iteração
42
Instrução de repetição for
Formato geralfor (inicialização; condiçãoDeParada; incremento) { instrução}
Inicialização Nomeia a variável de controle e incializa 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.
43
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.
44
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).
45
Soluçãopublic 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 1public 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;
}}
48
Solução exercício 2public 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;
49
Solução exercício 2else 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");}
Estruturas de RepetiçãoEstruturas de Repetição
Programação em Java
Prof. Maurício Braga
Recommended