estruturas de repetição programação em java prof. maurício braga

50
Estruturas de Estruturas de Repetição Repetição Programação em Java Prof. Maurício Braga

Upload: internet

Post on 16-Apr-2015

114 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Estruturas de Repetição Programação em Java Prof. Maurício Braga

Estruturas de RepetiçãoEstruturas de Repetição

Programação em Java

Prof. Maurício Braga

Page 2: Estruturas 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.

Page 3: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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>;

Page 4: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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.

Page 5: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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 );

Page 6: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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

Page 7: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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.

Page 8: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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

}

Page 9: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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;}

Page 10: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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.

Page 11: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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.

Page 12: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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

Page 13: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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}

Page 14: Estruturas de Repetição Programação em Java Prof. Maurício Braga

14

Comandos REPITA e ENQUANTO

Exercício: Refazer o programa anterior, só que desta vez usando while.

Page 15: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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

Page 16: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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");

}}

Page 17: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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

Page 18: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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

Page 19: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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.

Page 20: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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

Page 21: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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.

Page 22: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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?

Page 23: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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);

}

Page 24: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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

Page 25: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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.

Page 26: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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.

Page 27: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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

Page 28: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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);

}

Page 29: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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.

Page 30: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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.

Page 31: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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.

Page 32: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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

Page 33: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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");}

Page 34: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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.

Page 35: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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.

Page 36: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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.

Page 37: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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

Page 38: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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.

Page 39: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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>;

Page 40: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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

Page 41: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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

Page 42: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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.

Page 43: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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.

Page 44: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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).

Page 45: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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.");

}

Page 46: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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.

Page 47: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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;

}}

Page 48: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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;

Page 49: Estruturas de Repetição Programação em Java Prof. Maurício Braga

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");}

Page 50: Estruturas de Repetição Programação em Java Prof. Maurício Braga

Estruturas de RepetiçãoEstruturas de Repetição

Programação em Java

Prof. Maurício Braga