Anda di halaman 1dari 33

Estruturas de Repetio

Programao em Java
Prof. Maurcio Braga

Estruturas de repetio

Diferente do ser humano, o computador no se cansa


de realizar operaes repetitivas.
Diante disto, podemos incluir nos programas as
estruturas de repetio.
O que uma repetio?

Tambm chamada a lao ou loop;


uma instruo que permite a execuo de um trecho de um
programa vrias vezes seguidas.

Nesta aula veremos:

Repetio com teste no incio;


Repetio com teste no final;
Repetio com varivel de controle.

2/33

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


<comando>;

3/33

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.

Esta estrutura chamada de repetio com teste no final

A deciso entre repetir e parar o lao feita ao final do comando.


garantido que o lao ser executado aos menos uma vez.

4/33

Comando REPITA em Java

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.

do {
instruo
} while ( condio );

5/33

Exemplo comando do...while


int c = 1; //declara e inicializa o contador
do {
// Imprime e incrementa o contador
System.out.println("Contador = " +c);
c = c + 1;

} while (c <= 10); // testa a condio de parada

6/33

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.

Esta estrutura chamada de repetio com teste no incio

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/33

Comando Enquanto em Java

Implementado com a instruo while


instruo que efetua o teste antes da execuo
do corpo do loop.
O

corpo do loop pode nunca ser executado.

while ( condio ) {
instruo
}

8/33

Exemplo comando While


int c = 1; // declara e inicializa a varivel de controle

while (c <= 10) { // condio de parada do loop


System.out.println("Contador = " + c);
c = c +1;
}

9/33

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

10/33

Comando PARA

Exemplo:

Escrever os nmeros inteiros de 1 a 100.

Soluo com o comando PARA:


Variveis
valor : inteiro;

Incio
escrever Valores inteiros de 1 a 100;
para valor de 1 at 100 faa
escrever valor;
Fim

11/33

Comando Para em Java

Instruo de repetio for foi criada para


repetio utilizando varivel contadora
Especifica

os detalhes da repetio controlada por


uma varivel contadora em uma nica linha
for (int c = 1; c <= 10; c++ ) {
System.out.println("contador = " + c);
}

Inicializao da varivel

Condio de parada

12/33

Incremento aps iterao

Instruo de repetio for

Formato geral
for (inicializao; condioDeParada; incremento) {
instruo
}

Inicializao

Condio de parada

Nomeia a varivel de controle e inicializa seu valor.


Condio que determina se o loop deve parar.

Incremento

Modifica o valor do contador para que a condio de parada tornese falsa ao final.

13/33

Instruo de repetio for

Expresses da condio so opcionais


Se

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.

14/33

Exerccio

Faa um programa que imprima todos os


valores pares de 1 a 1000.

15/33

Soluo em Java usando while


public static void main(String[] args) {
int c = 1;
System.out.println("Valores pares entre 1 e 1000:");
while (c<=1000) {
if (c % 2 == 0)
System.out.println(c);
c = c + 1;
}

16/33

Exerccio

Faa um programa que leia diversos nmeros


informados pelo usurio e aps cada leitura exibir se o
nmero par ou mpar. Se o usurio fornecer um valor
negativo o programa dever encerrar a execuo (sem
entretanto testar se esse nmero negativo par ou
mpar).

17/33

Comandos REPITA e ENQUANTO

Soluo (cont.)

O algoritmo fica assim:


Variveis
num : inteiro;
Incio

escrever Para sair, entre com um valor menor que 0;


escrever Entre com o nmero: ;
ler num;
enquanto num >= 0 faa
[[
se num % 2 = 0 ento
escrever O nmero par
seno
escrever O nmero mpar;
escrever Entre com o nmero: ;
ler num;
]];
Fim
18/33

Soluo em Java usando while


public static void main(String[] args) {
// declarao de variveis
int num = 0;
System.out.println( "Para sair, entre com um valor < 0");
System.out.println( "Digite um nmero:");
Scanner s = new Scanner(System.in);
num = s.nextInt();
while (num >=0) {
if (num % 2 == 0)
System.out.println("O nmero par");
else
System.out.println("O nmero impar");
System.out.println( "Digite um nmero:");
num = s.nextInt();
}
}
19/33

Exerccio

Escrever um programa que leia 10 nmeros inteiros fornecidos pelo


usurio, e exiba quantos nmeros mpares foram informados.

20/33

Exerccio

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.

21/33

Exerccio

A varivel iniciada
como 0 pois o usurio
poder informar 10
nmeros pares

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
22/33

Programa em Java
public static void main(String[] args) {
int contador=1, numero=0, qtd_impar = 0;
Scanner s = new Scanner(System.in);
while (contador <=10) {
System.out.println( Digite o nmero:");
numero = s.nextInt();
if (numero % 2 != 0)
qtd_impar = qtd_impar + 1;
contador = contador +1;
}
System.out.println("O total de nmeros mpares digitado foi: " +
qtd_impar);
}
23/33

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 -1.
24/33

Variveis acumuladoras

Soluo

A varivel iniciada
como 0 pois, caso o usurio
fornea -1 na primeira
execuo, o valor total da
soma 0.

O algoritmo fica assim:


Variveis
num, soma : real;
Incio

soma = 0;
escrever Para sair, entre com -1;
escrever Entre com o nmero: ;
ler num;
enquanto num <> -1 faa
[[
soma = soma + num;
escrever Entre com o nmero: ;
ler num;
]];
escrever A soma foi , soma;
Fim
25/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:

Imprimir os quadrados dos nmeros inteiros de 1 a 10.

26/33

Laos infinitos
Este incremento evita
o loop infinito.

Soluo:
Variveis
numero, quadrado : real;

Incio
escrever Quadrados dos nmeros inteiros de 1 a 10;
numero = 1;
repita
escrever numero*numero;
numero = numero+1;
at numero > 10;
escrever Fim da impresso.;
Fim
27/33

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 programa possui repeties
controladas por um teste interno e outro externo.
Exemplo

Imprimir as tabuadas de multiplicao dos nmeros 3, 4, 5 e 6.

28/33

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
29/33

Programa em Java
public static void main(String[] args) {
int num = 0, mult =0, cont = 0;
num = 3;
while (num <= 6) {
System.out.println(Tabuada de : + num);
cont = 1;
while (cont <= 10) {
mult = num * cont;
System.out.println(num + X +cont + =+ mult);
cont = cont + 1;
}
num = num + 1;
}
}
30/33

Exerccio

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

31/33

Soluo
public static void main(String[] args) {
int numero = 0, soma_pares =0;
System.out.println("Digite um nmero >= 0:");
Scanner s = new Scanner(System.in);
numero = s.nextInt();
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 entre 0 e "+numero+" :
"+soma_pares);
}
else
System.out.println("Nmero invlido informado.");
}
32/33

Estruturas de Repetio

Programao em Java
Prof. Maurcio Braga

Anda mungkin juga menyukai