Introdução a Programação IF669 http://www.cin.ufpe.br/~if669 Seleção Múltipla Laços (while, do-while, for) AULA 05 Ricardo Massa F. Lima rmfl@cin.ufpe.br Sérgio C. B. Soares scbs@cin.ufpe.br
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
O comando de seleção switch switch (EXP) { case rotulo1: // comandos1 break; case rotulo2: // comandos2 break;... default: // comandos3 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
O comando de seleção switch 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)
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 Com chaves Sem chaves while (EXP_BOOL) //comando 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-while do { //bloco while (EXP); O comando do sempre executa o bloco a 1ª vez. Se a EXP for verdadeira executa uma 2ª vez e assim por diante... for (I; EXP; Inc) { //bloco for EXP = expressão booleana I = inicializador Inc = incremento
For true 1 2 4 for(inic.; condição; expr.de iteração){ 3 Comandos1 5 Comandos2 false
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); 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. 9 10 11 12 13 14
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 true b=9 a=3 b=8 1 2 4 a=4 for(inic.; condição; expr.de iteração){ 3 b=7 Comandos1 a=5 b=6 5 Comandos1 false
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 5 1 2 4 for(inic.; condição; expr.de iteração){ 3 Comandos1 Comandos1
Exemplo n Vamos reescrever o seguinte pedaço de programa usando for for (I; EXP; Inc) { //bloco 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 + ", ");
Agora usando do-while do { //bloco while (EXP); int x = 1; while (x < 100) { System.out.print(x + ", "); x = x + 2; 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 = 1, se x = 0 x * (x-1) * (x-2) *... * 1, se x > 0 3. Imprimir o resultado i++ i-- É o mesmo que i = i + 1 i = i - 1
Exercício 4 n Escreva um programa para ler um valor inteiro positivo N e calcular N i 2 =1 2 + 2 2 +...+ N 2 i=1 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: s = x y x 2 y 3 (x + y) + x 3 y 5 2 3 (x + y) x 4 y 7 3 5 4 7 +... (x + y) 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