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

Post on 16-Apr-2015

114 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related