seleção múltipla laços (while, do-while, for) aula 05if669/material/aulasnovas... · ricardo...
TRANSCRIPT
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+ ...