Seleção Múltipla Laços (while, do-while, for) AULA...

28
Ricardo Massa F. Lima [email protected] Sérgio C. B. Soares [email protected] Seleção Múltipla Laços (while, do-while, for) AULA 05 Introdução a Programação – IF669 http://www.cin.ufpe.br/~if669

Transcript of Seleção Múltipla Laços (while, do-while, for) AULA...

Ricardo Massa F. Lima [email protected]

Sérgio C. B. Soares [email protected]

Seleção Múltipla Laços (while, do-while, for)

AULA 05

Introdução a Programação – IF669 http://www.cin.ufpe.br/~if669

Até aqui . . .

n  Conceitos gerais de programação

n  Tipos primitivos em Java

n  Entrada e saída de dados

n  Operadores

n  Comando condicional em Java

n  HOJE: Comandos de seleção e repetição

switch (EXP) {

case rotulo1:

// comandos1

break;

case rotulo2:

// comandos2

break;

...

default:

// comandos3

}

O comando de seleção switch

Para executar um switch 1.  A expressão EXP é avaliada

2.  Os comandos do case cujo rótulo é igual ao valor resultante da expressão é executado

3.  Os comandos de default são executados caso o valor resultante não seja igual a nenhum rótulo

switch (EXP) {

case rotulo1:

// comandos1

break;

case rotulo2:

// comandos2

break;

...

default:

// comandos3

}

O tipo de EXP só pode ser: char, byte, short, int

Os rótulos devem ser constantes diferentes

Existe no máximo uma cláusula default (opcional)

Os tipos dos rótulos têm que ser o mesmo de EXP

Os comandos break são opcionais (param a execução)

O comando de seleção switch

Exemplo 1

char resposta = // ...

switch(resposta) {

case ‘s’:

retorno = true;

break;

case ‘n’:

retorno = false;

break;

default:

retorno = false;

System.out.println(“Erro!”);

}

Exemplo 2

n  Evitamos o uso de vários if-else

int dia = // ... switch(dia) { case 1: resposta = "Segunda-feira"; break; case 2: resposta = "Terça-feira"; break; case 3: resposta = "Quarta-feira"; break; case 4: resposta = "Quinta-feira"; break; case 5: resposta = "Sexta-feira"; break; default: resposta = "Final de semana"; }

Exercício 1 (15 minutos)

n  Escreva um programa em Java para: 1.  Ler um valor inteiro (a) do teclado

2.  Ler um caractere (op) de uma das quatro operações aritméticas (+, -, * ou /) do teclado

3.  Ler um valor inteiro (b) do teclado

4.  Imprimir o resultado da expressão digitada

Digite a : 1 Digite op: + Digite b : 3 a + b = 4

O Scanner não lê char. Leia um String e pegue o primeiro char

assim: op = in.next().charAt(0);

Qual o resultado se digitarmos 2 + 3 no programa ao lado?

Faltam os break

Estrutura de Repetição

n while

n do-while

n for

while

n  A execução das instruções no bloco de comandos é repetida enquanto uma condição (EXP_BOOL) for verdadeira.

while (EXP_BOOL) { //bloco

}

while (EXP_BOOL) //comando

Sem chaves Com chaves

bloco = comandos delimitados por { e }

Exemplo: public class Exemplo { public static void main(String[] args) {

Scanner in = new Scanner(System.in);

System.out.print("Digite o primeiro numero: ");

int x = in.nextInt();

System.out.print("Digite o segundo numero: ");

int y = in.nextInt();

int resposta = 0;

while (y > 0) {

resposta = resposta + x;

y = y - 1;

}

System.out.print("O produto é " + resposta);

}

}

Exercício 2 Faça um programa para

1.  Ler um número inteiro maior que zero e menor que 100

2.  Imprimir todos os números ímpares seguintes até 100 (separados por “,”)

3.  Teste o programa

4.  Modifique o programa para continuar pedindo o número inteiro positivo enquanto o usuário não digitar um número maior que zero

O Operador % calcula o módulo da divisão. 10%2 = 0 11%2 = 1

Outros comandos de repetição

do { //bloco

} while (EXP);

do-while

for (I; EXP; Inc) { //bloco

}

for

EXP = expressão booleana I = inicializador Inc = incremento

O comando do sempre executa o bloco a 1ª vez. Se a EXP for verdadeira executa uma 2ª vez e assim por diante . . .

For

for(inic.; condição; expr.de iteração){ Comandos1 }

Comandos2

11 1 11 2

11 3

11 4

11 5 false

true

Expressão condicional: refere-se a um teste que será executado e deverá retornar um valor booleano.

class Exemplo{public static void main(String args[]){

int a=3;for(a=9; a<15; a++){ System.out.println(“a=“+a);}

}}

9 10 11 12 13 14

Expressão de iteração: indicamos o que deverá ocorrer após cada execução do corpo do laço de repetição. Ela sempre será processada após o corpo do laço a ser executado.

class Exemplo{ public static void main(String args[]) { for(int a=1,b=10;((a<10)&&(b>5));a++,b--){ System.out.println(“a=“+a); System.out.println(“b=“+b); } } }

a=1 b=10 a=2 b=9 a=3 b=8 a=4 b=7 a=5 b=6

for(inic.; condição; expr.de iteração){Comandos1}

Comandos1

11 1 11 2

11 3

11 4

11 5 false

true

Program ímpares usando ‘for’

Compare as duas soluções!

Declaração e inicialização de variáveis: nessa primeira parte podemos declarar e inicializar uma ou mais variáveis, quando houver, conforme a seguir:

for(int a=1,b=1;......){ }

É importante lembrarmos que a declaração e a inicialização de variáveis acontecem sempre antes de outros comandos. Elas acontecem apenas uma vez no laço de repetição, sendo que a condição e a expressão de iteração são executadas a cada laço do programa

for(inic.; condição; expr.de iteração){Comandos1}

Comandos1

11 1 11 2

11 3

11 4

11 5

Exemplo

n  Vamos reescrever o seguinte pedaço de programa usando for

int x = 1; while (x < 100) {

System.out.print(x + ", ");

x = x + 2; }

for (int x = 1; x < 100; x = x + 2) { System.out.print(x + ", ");

}

for (I; EXP; Inc) { //bloco }

Agora usando do-while

int x = 1; while (x < 100) {

System.out.print(x + ", ");

x = x + 2; }

do { //bloco } while (EXP);

int x = 1; do {

System.out.print(x + ", ");

x = x + 2; } while (x < 100);

Mas apenas porque sabemos que o valor inicial de x é menor que zero

E se x fosse lido do teclado? O que faríamos?

Comando break

n  Quando utilizado em um laço de repetição, causa uma interrupção imediata do mesmo, continuando a execução do programa na próxima linha após o laço.

for (int i = 1; i < 11; i++){ if (i == 5) break; System.out.println("Valor de i=" + i); } System.out.println("Próxima linha");

Comando continue

n  Utilizado somente em laços de repetição. Quando é executado, o laço volta para o teste de condição do laço de repetição. int num = 0; while (num < 10) { num++; if (num == 5) continue; System.out.println("num = " + num); }

Normalmente, utilizamos o comando continue em um teste if

Exercício 3

n  Escreva um programa para: 1.  Ler um inteiro do teclado

§  use um do-while para garantir que o programa só continua se for digitado um número maior que 0

2.  Calcular o fatorial desse número (usando for)

fatorial x =

3.  Imprimir o resultado

1, se x = 0 x * (x-1) * (x-2) * ... * 1, se x > 0

i++ i--

i = i + 1 i = i - 1

É o mesmo que

Exercício 4

n  Escreva um programa para ler um valor inteiro positivo N e calcular

i2i=1

N

∑ =12 + 22 + ...+ N 2

use um do-while para garantir que o programa só continua se for

digitado um número maior que 0

Exercício extra 1

n  Tente responder os exercícios usando comandos de repetição diferentes, quando for possível

Exercício extra 2 Escreva um aplicativo que calcula os quadrados e cubos dos números de 0 a 10 e imprime os valores resultantes no formato da tabela como segue:   Number Square Cube 0 0 0 1 1 1 2 4 8 3 9 27 4 1 64 5 2 125 6 36 216 7 4 343 8 64 512 9 81 729 10 100 1000

Questão de Miniprova

Ler dois valores reais x e y positivos e menores que 1. Calcular e imprimir o valor da série S, dado por:

 

Obs1: o processo de soma termina quando for encontrado o valor de um termo < 0.001

Obs2: note o uso intercalado dos sinais de + e – na série €

s = x × y −x 2 × y 3

(x + y)2×3+

x 3 × y 5

(x + y)3×5−

x 4 × y 7

(x + y)4×7+ ...