COLÉGIO ESTADUAL ULYSSES GUIMARÃES CURSO TÉCNICO PROFISSIONALIZANTE EM INFORMÁTICA ERINALDO SANCHES NASCIMENTO ESTRUTURAS DE REPETIÇÃO FOZ DO IGUAÇU 2013 SUMÁRIO 5. ESTRUTURAS DE REPETIÇÃO ................................................................... 2 5.1. OPERADORES DE INCREMENTO E DECREMENTO ................................................ 2 5.1.1. Operadores de Atribuição Compostos...................................................... 4 5.2. ESTRUTURA DE REPETIÇÃO COM VARIÁVEL DE CONTROLE .................................. 5 5.2.1. Pseudocódigo ........................................................................................... 5 5.2.2. Fluxograma .............................................................................................. 7 5.2.3. Instrução de Repetição FOR .................................................................... 7 5.2.3.1. Componentes do Cabeçalho ................................................................. 9 5.3. ESTRUTURA DE REPETIÇÃO COM TESTE NO INÍCIO ........................................... 10 5.3.1 Pseudocódigo .......................................................................................... 10 5.3.2 Fluxograma ............................................................................................. 12 5.3.3 A instrução de repetição WHILE ............................................................. 13 5.4 ESTRUTURA DE REPETIÇÃO COM TESTE NO FIM ................................................ 15 5.4.1 Pseudocódigo .......................................................................................... 16 5.4.2 Fluxograma ............................................................................................. 17 5.4.3 A estrutura de repetição DO...WHILE...................................................... 18 5.5 EXERCÍCIOS.................................................................................................. 19 5.6 TRABALHOS PRÁTICOS ................................................................................... 31 5.7 REFERÊNCIA BIBLIOGRAFIA ............................................................................ 34 2 5. ESTRUTURAS DE REPETIÇÃO O conceito de repetição (looping) é utilizando quando se deseja repetir certo trecho de instruções por um número de vezes. O número de repetições pode ser conhecido antes ou não, mas, necessariamente, precisa ser finito. A realização da repetição controlada por contador requer: 1. Uma variável de controle (ou contador de loop). 2. O valor inicial da variável de controle. 3. O incremento (ou decremento) pelo qual a variável de controle é modificada a cada passagem pelo loop (iteração do loop). 4. A condição de continuação do loop que determina se o loop deve continuar. 5.1. OPERADORES DE INCREMENTO E DECREMENTO Java fornece dois operadores unários para a adição de 1 ou subtração de 1 a partir do valor de uma variável numérica. O operador de incremento ++ adiciona um ao valor de uma variável. O operador de decremento -- subtrai um do valor de uma variável. Eles são geralmente usados com variáveis do tipo int, mas podem ser utilizados com qualquer tipo numérico. Se n é uma variável de um tipo numérico, então n++ aumenta o valor de n por um, e n-- diminui o valor de n por um. Por exemplo, as declarações int n = 1, m = 7; n++; System.out.println("O valor de n foi alterado para " + n); m−−; System.out.println("O valor de m foi alterado para " + m); produzir o seguinte resultado: O valor de n foi alterado para 2 O valor de m foi alterado para 6 3 Um operador de incremento ou decremento que é colocado depois uma variável é referido como o incremento pós-fixado ou operador de decremento pós-fixado, respectivamente. Usando o operador de incremento (ou decremento) pós-fixado para adicionar (ou subtrair) 1 de uma variável é conhecido como pós-incremento (ou pós-decremento). Isso faz com que o valor atual da variável seja utilizado na expressão em que se insere, em seguida, o valor da variável é incrementado (ou decrementado) por 1. Exemplo: int n = 2; int valorProduzido = 2*(n++); System.out.println(valorProduzido); System.out.println(n); Esse código produz o seguinte resultado: 4 3 Usando o operador incremento (ou decremento) prefixo para adicionar (ou subtrair) 1 de uma variável é conhecido como pré-incremento (ou prédecremento). Isto faz com que a variável a ser incrementado (decrementado) por 1, terá o novo valor da variável utilizado na expressão em que aparece. Exemplo: int n = 2; int valorProduzido = 2*(++n); System.out.println(valorProduzido); System.out.println(n); Este código é o mesmo que o pedaço de código anterior, exceto que o ++ é antes da variável, de modo que este código produzirá o seguinte resultado: 6 3 4 Nome do Operador Expressão Incremento ++a a++ --b Decrementa b por 1 e, em seguida, usa o novo valor de b na expressão em que b reside. prefixado Decremento Usa o valor atual de a na expressão em que reside, depois incrementa a por um. pós-fixado Decremento Incrementar a por um e, em seguida, usa o novo valor de a na expressão em que reside. prefixado Incremento Descriçao b-- pós-fixado Usa o valor corrente de b na expressão em que b reside e, então decrementa b por 1. 5.1.1. Operadores de Atribuição Compostos Os operadores de atribuição compostos abreviam expressões de atribuição. Declarações como variável = variável operador expressão; onde o operador é um dos operadores binários +, -, *, / ou% pode ser escrita na forma variável operador= expressão; É possível abreviar a declaração c = c + 3; com o operador de atribuição de adição composto, + =, como c += 3; Abaixo estão alguns exemplos: cont = cont + 2; cont += 2; total = total – desconto; total -= desconto; bonus = bonus * 2; bonus *= 2; tempo = tempo / fatorArremetida; tempo /= fatorArremetida; conversao = conversão % 100; conversao %= 100; montante = montante * (cont1 + cont2); montante *= cont1 + cont2; 5 A tabela abaixo mostra os operadores aritméticos de atribuição compostos, expressões de exemplo usando os operadores e explicações sobre o que as operadoras fazem. Operador de atribuição Expressão de exemplo Explicação Atribui Suponha: int c = 3, d = 5, e = 4, f = 6, g = 12; += c+=7; c = c + 7; 10 para c -= d -= 4; d = d – 4; 1 para d *= e *= 5; e = e * 5; 20 para e /= f /= 3; f = f / 3; 2 para f %= g %= 9; g=g%9 3 para g 5.2. ESTRUTURA DE REPETIÇÃO COM VARIÁVEL DE CONTROLE Essa estrutura de repetição é utilizada quando se sabe o número de vezes em que um trecho do algoritmo deve ser repetido. Ela utiliza variáveis de controle que definem exatamente o número de vezes que a sequência de instruções será executada. Na própria sintaxe da estrutura de repetição a variável de controle é inicializada, o seu valor máximo e o incremento que deverá sofrer também são estabelecidos. 5.2.1. Pseudocódigo PARA i ← valor_inicial ATÉ valor_final FAÇA Comando1; O comando1 será executado utilizando a variável i como controle, cujo conteúdo vai variar do valor_inicial até o valor_final, de 1 em 1, incrementando automaticamente. PARA j ← valor inicial ATÉ valor final FAÇA { Comando1; 6 Comando2; } Os comando1 e comando2 serão executados utilizando a variável j como controle, cujo conteúdo vai variar do valor_inicial até o valor_final, de 1 em 1, incrementando automaticamente. PARA i ← 1 ATÉ 10 FAÇA Comando1; O comando1 será executado dez vezes. Exemplo: ler 8 números fornecidos pelo usuário, calcular e exibir a média entre eles. ALGORITMO EX_PARA { DECLARE SOMA, NUM, MEDIA : REAL; CONT : INTEIRO; SOMA ← 0; PARA CONT ← 1 ATÉ 8 FAÇA { LEIA(NUM); SOMA ← SOMA + NUM; } MEDIA ← SOMA / CONT; ESCREVA(“MÉDIA = ”, MEDIA); } CONT – variável de controle (contador); 1 – valor inicial da variável de controle 8 – valor final da variável de controle (o contador variará de 1 até 8, ou seja, cont >= 1 e cont <= 8); O incremento acrescerá a variável de controle cada vez que o loop acontecer. 7 5.2.2. Fluxograma Início SOMA ← 0 CONT ← 1, 8 MEDIA ← SOMA / NUM “MÉDIA = ”, MEDIA Fim NUM SOMA ← SOMA + NUM 5.2.3. Instrução de Repetição FOR O Java fornece a instrução de repetição for, que especifica os detalhes da repetição controlada por contador em uma única linha de código. Exemplo: ler 8 números fornecidos pelo usuário, calcular e exibir a média entre eles. import java.util.Scanner; //classe (o nome do programa ex1_for.java) public class ex1_for { //método principal onde inicia a execução do programa public static void main(String args[]){ //declaração de variáveis float soma, num, media; int cont; Scanner leia = new Scanner(System.in); //incializa a variável soma = 0; 8 /* * para cont começando com 1; * até cont menor ou igual a 8; * incremente cont de 1 em 1 */ for (cont = 1; cont <= 8; cont++){ /* * a variável leia armazena o valor digitado pelo usuário * esse valor é atribuído à num */ num = leia.nextFloat(); //soma armazena o valor de soma + o valor de num soma+=num; //soma = soma + num } //fim do loop /* * calcula a média * o valor de soma dividido pelo número de iterações */ media = soma / cont; //exibe a média dos números digitados System.out.println("Média ="+media); } } As variáveis quando declaradas não possuem valores, seu conteúdo é nulo e operações aritméticas que envolvem nulos sempre resultam em nulos. Às vezes também será necessário acumular valores, isto é, calcular o somatório de um conjunto de valores. Para isso, também será necessário utilizar uma variável de apoio, que pode ser do tipo inteiro ou real, de acordo com os valores que serão acumulados. acumulador = 0; acumulador = acumulador + valor; 9 5.2.3.1. Componentes do Cabeçalho Separador ponto-e-vírgula for ( Palavra chave int cont = 1; Variável de controle Separador ponto-e-vírgula cont <= 10; Condição de continuação do loop cont++ ) Incremento da variável de controle Valor inicial da variável de controle Em geral as instruções for são utilizadas para repetição controlada por contador. Se a expressão inicialização no cabeçalho for declara a variável de controle, a variável de controle pode ser utilizada somente nessa instrução for – ela não existirá fora da instrução for. Essa utilização restrita do nome da variável de controle é conhecida como o escopo da variável. O escopo de uma variável define onde ela pode ser utilizada em um programa. Todas as três expressões em um cabeçalho for são opcionais. Se a condição de continuação do loop for omitida, o Java assume que a condição de continuação do loop é sempre verdadeira, criando um loop infinito. A expressão incremento pode ser omitida se o programa calcular o incremento com instruções no corpo do loop ou se nenhum incremento for necessário. A expressão incremento em uma instrução for atua como se ela fosse uma instrução independente no fim do corpo do for. 10 5.3. ESTRUTURA DE REPETIÇÃO COM TESTE NO INÍCIO Essa estrutura de repetição é utilizada quando não se sabe o número de vezes em que um trecho do algoritmo deve ser repetido, embora também possa ser utilizada quando se sabe esse número, e deve repetir uma ação enquanto alguma condição permanecer verdadeira. Na estrutura enquanto (while), a condição de repetição é verificada antes de entrar no laço, isto é, uma condição é testada inicialmente e, se o resultado for verdadeiro, o bloco de instruções será executado. 5.3.1 Pseudocódigo ENQUANTO condição FAÇA Comando1; Enquanto a condição for verdadeira, o comando1 será executado. ENQUANTO condição FAÇA { Comando1; Comando2; Comando3; } Enquanto a condição for verdadeira, os comando1, comando2 e comando3 serão executados. Exemplo 1: X ← 1; Y ← 5; ENQUANTO X < Y FAÇA 11 INÍCIO X ← X + 2; Y ← Y + 1; FIM; Simulação: X Y 1 5 3 6 5 7 Valores obtidos dentro da estrutura de 7 8 repetição 9 9 Valores iniciais No trecho do algoritmo anterior, os comandos que se localizam dentro da estrutura de repetição serão repetidos quatro vezes. Exemplo 2: Ler 8 números fornecidos pelo usuário, calcular e exibir a média entre eles. ALGORITMO EX_ENQUANTO { DECLARE SOMA, NUM, MEDIA : REAL; CONT : INTEIRO; { SOMA ← 0; CONT ← 0; ENQUANTO (CONT < 850) FAÇA { LEIA(NUM); SOMA ← SOMA + NUM; CONT ← CONT + 1; } MEDIA ← SOMA / CONT; ESCREVA(“MÉDIA = ”, MEDIA); } } 12 Exemplo 3: a cada iteração pergunta-se ao usuário se deseja continuar. Com base na resposta, a condição estabelecida é testada. FAÇA ENQUANTO (RESPOSTA = “SIM”) INÍCIO <instruções>; ESCREVA(“DESEJA CONTINUAR?”); LEIA(RESPOSTA); FIM; É importante padronizar a leitura da resposta, pois sim é diferente de SIM, ou seja, existe diferenciação entre maiúsculas e minúsculas. A variável cont tem a função de contar o número de vezes que as instruções dentro do laço serão repetidas. A variável soma tem a função de acumular todos os valores atribuídos à variável num. 5.3.2 Fluxograma Início SOMA ← 0 CONT ← 0 CONT < 8 .F. MEDIA ← SOMA / NUM “MÉDIA = ”, MEDIA .V. Fim NUM SOMA ← SOMA + NUM CONT ← CONT+1 13 Simulação: Volta SOMA CONT NUM 1 0 0 2 3 3 4 SOMA = SOMA + CONT = CONT NUM +1 3 0+3=3 0 +1 = 1 1 1 3+1=4 1+1=2 4 2 13 4 + 13 = 17 2+1=3 17 3 77 17 + 77 = 94 3+1=4 5.3.3 A instrução de repetição WHILE Uma instrução de repetição permite ao programador especificar que um programa deve repetir uma ação enquanto alguma condição permanecer verdadeira. A(s) instrução(ões) contida(s) na instrução de repetição while constitui(em) o corpo da instrução de repetição while, que pode ser uma única instrução ou um bloco. Por fim, a condição se tornaria falsa. Nesse ponto a repetição termina e a primeira instrução depois da instrução de repetição é executada. Exemplo 1: ler 8 números fornecidos pelo usuário, calcular e exibir a média entre eles. import java.util.Scanner; //classe public class ex2_while { //método principal public static void main(String args[]){ //declaração de variáveis float soma, num, media; int cont; Scanner leia = new Scanner(System.in); //inicialização de variáveis soma = 0; 14 cont = 0; //enquanto a variável cont for menor que 8 while (cont < 8){ //inicia o loop //armazena na variável num o valor digitado via teclado num = leia.nextFloat(); //a variável soma acula a soma com num soma+=num; //incrementa o contador cont cont++; }//fim do loop //calcula a média dos números somados media = soma / cont; //exibe (escreve) a média System.out.println("Média = "+media); } // fim do método principal } //fim da classe Exemplo 4: a cada iteração pergunta-se ao usuário se deseja continuar. Com base na resposta, a condição estabelecida é testada. import java.util.Scanner; public class ex4_while { public static void main(String args[]){ //declaração e inicialização de variáveis float soma=0, num, media; int cont = 0; char resposta='S'; Scanner leia = new Scanner(System.in); /* * enquanto a variável respostar * for igual a 'S' ou 's' faça */ while (resposta == 'S' || resposta == 's'){//início do loop //armazena em num o valor digitado pelo usuário via teclado 15 num = leia.nextFloat(); //acumula a soma dos números digitados soma+=num; //acumula um contador de quantos números foram digitados cont++; //exibe a mensagem se o usuário quer continuar System.out.println("Deseja continuar?"); //armazena em resposta o caractere digitado pelo usuário resposta = leia.next().charAt(0); }//fim do loop //calcula a média da soma dos números digitados media = soma / cont; //exibe a média System.out.println("Média = "+media); }//fim do método principal }//fim da classe 5.4 ESTRUTURA DE REPETIÇÃO COM TESTE NO FIM Essa estrutura de repetição é utilizada quando não se sabe o número de vezes em que um trecho do algoritmo deve ser repetido, embora também possa ser utilizada quando se sabe esse número. A instrução REPITA... ATÉ ou FAÇA... ENQUANTO (do... while) é semelhante à instrução ENQUANTO (while). A diferença entre elas é que na estrutura REPITA os comandos serão repetidos pelo menos uma vez, já que a condição se encontra no final. A estrutura de repetição com teste no fim permite que um ou mais comandos sejam executados repetidamente até uma condição específica tornar-se verdadeira. 16 5.4.1 Pseudocódigo REPITA Comandos; ATÉ condição; Repita os comandos até a condição se tornar verdadeira. Exemplo 1: X ← 1; Y ← 5; REPITA X ← X + 2; Y ← Y + 1; ATÉ X >= Y; Simulação: X Y 1 5 3 6 5 7 Valores obtidos dentro da estrutura de 7 8 repetição 9 9 Valores iniciais Exemplo 2: Ler 8 números fornecidos pelo usuário, calcular e exibir a média entre eles. ALGORITMO EX_REPITA { DECLARE SOMA, NUM, MEDIA : REAL; CONT : INTEIRO; { 17 SOMA ← 0; CONT ← 0; REPITA LEIA (NUM); SOMA ← SOMA + NUM; CONT ← CONT + 1; ATÉ CONT >= 850; MEDIA ← SOMA / CONT; ESCREVA (“MÉDIA = ”, MEDIA); } } 5.4.2 Fluxograma Início SOMA ← 0 CONT ← 0 NUM .F. SOMA ← SOMA + NUM CONT ← CONT+1 CONT >= 850 .V. MEDIA ← SOMA / NUM “MÉDIA = ”, MEDIA Fim 18 5.4.3 A estrutura de repetição DO...WHILE Na instrução while o programa testa a condição de continuação do loop no começo do loop antes de executar o corpo do loop. Se a condição for falsa, o corpo nunca é executado. A instrução do... while testa a condição de continuação do loop depois de executar o corpo do loop, portanto, o corpo sempre é executado pelo menos uma vez. Quando uma instrução do... while termina a execução continua com a próxima instrução na sequência. Exemplo: ler 8 números fornecidos pelo usuário, calcular e exibir a média entre eles. import java.util.Scanner; public class ex3_do_while { //método principal public static void main(String args[]){ //declaração de variáveis float soma, num, media; int cont; Scanner leia = new Scanner(System.in); //inicialização de variáveis soma = 0; cont = 0; //faça (repita) do{ //armazene em num o valor digitado pelo usuário num = leia.nextFloat(); //acumula a soma dos números digitados soma+=num; //incrementa o contador cont++; }while (cont < 8);//enquanto (até) cont ser menor que 8 //calcula a média dos números digitados media = soma / cont; //exibe a média 19 System.out.println("Média = "+media); }//fim do método principal }//fim da classe ex3_do_while 5.5 EXERCÍCIOS 1. Qual é a saída produzida pelas seguintes linhas de código do programa? a) int n = ( int)3.9; System.out.println("n == " + n); b) int n = 3; d) int n = 10; do { n++; System.out.println(n); System.out.println("n == " + n); n = n - 3; n−−; System.out.println("n == " + n); c) int c; c = 5; } while (n > 0); e) int n = 10; do { System.out.println( c ); System.out.println(n); System.out.println( c++ ); n = n - 3; System.out.println( c ); System.out.println( ++c ); System.out.println( c ); } while (n < 0); f) int n = -42; do { System.out.println(n); n = n - 3; } while (n > 0); g) int number = 10; while (number > 0) { System.out.println(number); number = number + 3; } h) int n, limit = 10; 20 for (n = 1; n < limit; n++) i) int number = 10; { while (number > 0) System.out.println("n == " { +n); number = number - 2; System.out.println("limit == "+ if (number == 4) limit); break ; limit = n + 2; System.out.println(number); } } System.out.println("The end."); j) int number = 10; while (number > 0) { number = number - 2; if (number == 4) continue ; System.out.println(number); } System.out.println("The end."); 2. Complete a tabela abaixo: int a = 1, b = 2, c = 3; Expressão Expressão completa Resultado a +=5; a= b *= 4; b= c += a * b; c= c %= 6; c= 3. (SPTrans – 2012) Considere o código Java apresentado a seguir. public class ExemploOperadorUnario{ puclic sstatic void main(String args[]){ int varl = 10; int var2 = 20; int res = 0; res = var1 + var2; System.out.println("res; " + res); 21 res = var1++ + var2; System.out.println("res: " + res); res = var1 + var2; System.out.println("res; " + res); res = var1+ ––var2; System.out.println("res: " + res); } } Assinale a alternativa que contém o resultado correto da execução do código. a) res: 29 c) res: 28 e) res: 31 res: 29 res: 28 res: 31 res: 30 res: 29 res: 30 res: 29 res: 28 res: 31 b) res: 32 d) res: 30 res: 32 res: 30 res: 32 res: 31 res: 32 res: 30 4. (TCE-AM – 2012) Considere o código Java a seguir: import javax.swing.JOptionPane; public class Classe1{ public static void main(String [] args) { int n, c, r, s; n = Integer.parseInt(JOptionPane.showInputDialog(null, “Digite um valor inteiro: “)); r = 0; s = -1; for (c = 1; c <= n; c++) { if (c % 2 == 0) { r = r + c * s; } else { r = r + c; } 22 } JOptionPane.showMessageDialog(null, r); } } Se o valor digitado e armazenado na variável n for 10, será exibido na tela o valor a) 8 b) 3 c) 12 d) -5 e) 6 5. (CGU – 2012) O comando break tem a função de a) interromper a execução de um loop. b) condicionar a execução de um comando de atribuição a um operador lógico. c) segmentar a execução de um loop em duas ou mais partes aninhadas. d) estabelecer um intervalo de depuração durante a execução de um loop. e) impossibilitar o aninhamento de loops não lógicos. 6. (Receita Federal – 2012) Em programação Java, o comando while a) executa um bloco exclusivamente de comandos de atribuição. b) executa um bloco de comandos enquanto sua condição for verdadeira. c) executa um bloco de comandos até que sua condição seja verdadeira. d) equivale ao comando what-if. e) é idêntico ao comando do while. 7. (TST – 2012) Considere o programa abaixo escrito em linguagem Java: public class Programa { public static void main (String args[]) { for (int i = 3; i < 20; i += 2) { System.out.print((i % 3) + “ ”); } } } O resultado a ser informado ao usuário após a execução do programa acima é: a) 0 0 1 0 0 1 0 0 1 b) 0 1 2 0 1 2 0 1 2 c) 0 1 0 1 0 1 0 1 0 23 d) 1 2 1 2 1 2 1 2 1 e) 0 2 1 0 2 1 0 2 1 8. (Chesf – 2012) Considere o trecho de código que corresponde ao método principal de uma classe em linguagem Java. public static void main(String [] args) { int n = 1; int x = 0; int i; while (n < 10) { if (n % 2 != 0) { for (i = 3; i * i <= n; i += 2) { if (n % i == 0) break; } if (i < n) { x++; } } n++; } System.out.println(x); } Qual o resultado produzido por esse método quando ele é corretamente executado? a) 0 b) 1 c) 2 d) 3 e) 5 9. (DETRAN-RN – 2010) Assinale a alternativa que contém o resultado correto da execução do programa em linguagem Java: public class Soma { public static void main (String args[]) { int total = 0; for (int conta = 2; conta <= 20; conta += 2) total += conta; System.out.printf(“Resultado %d\n”, total); 24 } } a) 108 b) 90 c) 130 d) 100 e) 110 10. (UEPB – 2012) Em Java, um bloco de código é: a) Tudo que está entre ( ) b) Tudo que está entre { } c) Tudo que está entre [ ] d) Tudo que está entre < > e) Tudo que está no mesmo nível de indentação 11. (MPE-PE – 2012) Analise o código Java a seguir: public class Classe1{ public static void main (String[] args){ int n = 6, r = 0, c = 1, s = -1; while (c <= n) { if (c % 2 == 0) { r = r + c * s; } else { r = r + c; } c++; } System.out.println(r); } } Ao compilar e executar a Classe1, os valores finais nas variáveis r e c serão respectivamente: a) 3 e 6. b) -3 e 7. c) -2 e 7. d) 4 e 6. 12. (TRE-CE – 2012) Considere a estrutura de repetição seguinte: public static void main(String [] args){ int cont = 1, r = 0; do { r = r + cont; cont += 4; e) -3 e 6. 25 } while (cont <= 5); System.out.println(r); System.out.println(cont); } A saída na tela será a) 15 e 6. b) 1 e 5. c) 0 e 1. d) 6 e 9. e) 9 e 7. 13. Dados os fluxogramas que resolvem os problemas abaixo, escreva os códigos em linguagem Java: a) Leia um valor n inteiro e positivo e calcule e escreva o fatorial de n(n!). INÍCIO N I 1 ATÉ N NUM FAT 1 J 1 ATÉ NUM FAT SOMA FIM FAT * J 26 b) Leia dez conjuntos de dois valores, o primeiro representando o número do aluno e o segundo representando a sua altura em centímetros. Encontre o aluno mais alto e o mais baixo. Mostre o número do aluno mais alto e o número do mais baixo, junto com suas alturas. INÍCIO CONT 1 ATÉ 10 NUM, ALT F CONT = 1 SE ALT > MAIOR V MAIOR NUM_MAIOR MENOR V ALT NUM MAIOR ALT NUM_MAIOR NUM ALT SE ALT > MAIOR NUM_MENOR NUM MENOR NUM_MENOR ALT NUM MAIOR, NUM_MAIOR MENOR, NUM_MENOR FIM 27 c) Calcule a soma dos primeiros 50 números pares. Esse programa não recebe valor do teclado. Os primeiros números pares são: 2, 4, 6, ... INÍCIO SOMA 0 NUM 2 QTDE 1 ATÉ 50 SOMA FIM SOMA SOMA + NUM NUM NUM + 2 14. Dados os pseudocódigos que resolvem os problemas abaixo, escreva os códigos em linguagem Java: a) Monte os oito primeiros termos da sequência de Fibonacci. 0 – 1 – 1 2 – 3 – 5 – 8 – 13 – 21 – 34 – 55 - ... ALGORITMO { DECLARE CONT, NUM1, NUM2, RES : NUMERO; NUM1 0; NUM2 1; ESCREVA (NUM1); ESCREVA (NUM2); PARA CONT RES 3 ATÉ 8 FAÇA { NUM1 + NUM2; ESCREVA (RES); } } NUM1 NUM2; NUM2 RES; 28 b) Leia o número de termos, determine e mostre os valores de acordo com a série abaixo: Série = 2, 7, 3, 4, 21, 12, 8, 63, 48, 16, 189, 192, 32, 567, 768,64, ... ALGORITMO { DECLARE I, NUM_TERMOS, NUM1, NUM2, NUM3 : NUMERO; LEIA NUM_TERMOS; NUM1 2; NUM2 7; NUM3 3; ESCREVA (NUM1); ESCRAVA (NUM2); ESCREVA (NUM3); I 4; ENQUANTO I <> NUM_TERMOS FAÇA { NUM1 NUM1 * 2; ESCREVA (NUM1); I I + 1; SE I <> NUM_TERMOS { NUM3 NUM3 * 4; ESCREVA (NUM3); I I + 1; } } } c) A conversão de graus Fahrenheit para Celsius é obtida por C = 5 / 9 (F – 32). Calcule e escreva uma tabela de graus Celsius e graus Fahrenheit, cujos graus variem de 50 a 65 de 1 em 1. ALGORITMO { DECLARE CELS, FAREN : NUMERICO; PARA FAREN 50 ATÉ 65 FAÇA { ESCREVA (FAREN); CELS 5 / 9 * (FAREN – 32); ESCREVA (CELS); } } 29 d) Receba um número inteiro maior que 1 e verifique se o número fornecido é primo ou não. Mostrar mensagem de número primo ou de número não primo. OBS.: um número é primo quando é divisível apenas pelo número um e por ele mesmo. ALGORITMO { DECLARE I, NUM, QTDE : NUMERO; LEIA NUM; QTDE PARA I 0; 1 ATÉ NUM FAÇA { SE RESTO(NUM / I) = 0 QTDE QTDE + 1; } SE QTDE > 2 ESCREVA (“NÚMERO NÃO PRIMO”); SENÃO ESCREVA (“NÚMERO PRIMO”); } 15. Dada uma faixa d valores, cujo valor inicial e o valor final deverão ser fornecidos pelo usuário, identifique; a) A quantidade de números inteiros e positivos; b) A quantidade de números pares; c) A quantidade de números ímpares; d) A quantidade de números ímpares divisíveis por 3 e 4 ao mesmo tempo; e) A respectiva média para cada um dos itens. 16. Mostre os conceitos finais dos alunos de uma classe de 75 pessoas, considerando a tabela a seguir. Nota Conceito de 0 a 2,9 E de 3,0 a 4,9 D de 5,0 a 6,9 C de 7, a 8,9 B de 9,0 a 10,0 A Para isso, a nota final e o código do aluno deverão ser fornecidos pelo usuário. Ao final do programa, apresente a quantidade de alunos e a média de nota alcançada para cada conceito. 30 17. Um funcionário de uma empresa recebe aumento salarial anualmente. Sabe-se que: a) Esse funcionário foi contratado em 2005, com salário inicial de R$ 1.000,00; b) Em 2006 recebeu aumento de 1,5% sobre seu salário inicial; c) A partir de 2007 (inclusive) os aumentos salariais sempre correspondem ao dobro do percentual do ano anterior. Determine o salário atual desse funcionário. 18. Tem-se um conjunto de dados contendo a altura e o sexo (M ou F) de 15 pessoas. Calcule e mostre: A maior e a menor altura do grupo. A média de altura das mulheres. O número de homens. O sexo da pessoa mais alta. 19. Receba duas notas de seis alunos, calcule e mostre: A média aritmética das duas notas de cada aluno. A mensagem que está na tabela a seguir: Média aritmética Mensagem Até 3,0 Reprovado Entre 3,0 e 7,0 Exame Acima de 7,0 Aprovado O total de alunos aprovados. O total de alunos de exame. O total de alunos reprovados. A média da classe. 20. Receba o valor de uma dívida e mostre uma tabela com os seguintes dados: valor da dívida, valor dos juros, quantidade de parcelas e valor da parcela. Os juros e a quantidade de parcelas seguem a tabela abaixo: Quantidade % de juros sobre o de parcelas valor inicial da dívida 1 0 3 10 31 6 15 9 20 12 25 Exemplos de saída: Valor da dívida Valor dos juros Quantidade de parcelas Valor da parcela R$ 1.000,00 0 1 R$ 1.000,00 R$ 1.100,00 100 3 R$ 366,67 R$ 1.150,00 150 6 R$ 191,67 5.6 TRABALHOS PRÁTICOS 1. A empresa JS Recrutamento e Seleção Ltda. faz recrutamento e seleção de funcionários para várias empresas em diversos ramos de atuação. Atende em média 30 candidatos por dia, mas esse valor aumento quando faz divulgação de vagas. Para facilitar o trabalho de identificação do perfil dos candidatos que se inscrevem para as vagas, resolveu fazer um programa para registrar alguns dados para obter as informações a seguir: a) Número de candidatos do sexo feminino; b) Número de candidatos do sexo masculino; c) Idade média dos homens; d) Idade média das mulheres com experiência; e) Porcentagem dos homens entre 35 e 45 anos entre o total dos homens; f) Menor idade entre as mulheres que já têm experiência no serviço; g) Nível de escolaridade dos candidatos entre: ensino fundamental, ensino médio, graduação e pós-graduação. Calcule as informações solicitadas anteriormente, sabendo que a cada iteração deverá ser perguntado ao usuário se deseja cadastrar outro candidato. Quando a resposta for negativa, os resultados deverão ser apresentados. 32 2. A empresa PowerSoftware Ltda. possuía 32 funcionários até o ano passado, e a sua folha de pagamento era calculada anualmente. Ocorre que neste ano a empresa teve um grande crescimento e saltou para 58 funcionários com previsão de novas contratações. Dessa maneira, fazer a folha de pagamento manualmente tornou-se inviável. Para cada funcionário deverá ser lido seu salário e calculados os descontos de imposto de renda e INSS que são variantes de acordo com a tabela a seguir e uma porcentagem fixa correspondente ao plano de saúde que é de 4,5% do valor do salário. a) Calcule o valor total da folha de pagamento. b) Calcule o valor do salário líquido de cada um dos 58 funcionários. c) Calcule o valor total do imposto de renda que a empresa deverá recolher. Veja as informações disponíveis no site da Receita da Fazenda, a tabela de alíquotas do IRRF para o ano corrente e o desconto do INSS. A entrada de dados deve terminar quando for lido um número negativo. 3. Foi realizada uma pesquisa de algumas características físicas da população de certa região, a qual coletou os seguintes dados referentes a cada habitante para serem analisados: a) Sexo (masculino e feminino); b) Cor dos olhos (azuis, verdes ou castanhos); c) Cor dos cabelos (louros, castanhos, pretos); d) Idade; e) Altura; f) Peso. Apresente a média da idade dos participantes, a média do peso e da altura de seus habitantes, a porcentagem de pessoas do sexo feminino e a porcentagem de pessoas do masculino. Quantas pessoas possuem olhos verdes e cabelos louros? A cada iteração deverá ser perguntado ao usuário se deseja continuar ou não. Os resultados deverão ser apresentados quando o usuário não desejar mais inserir dados. 4. Uma empresa possui dez funcionários com as seguintes características: código, número de horas trabalhadas no mês, turno de trabalho (M – 33 Matutino, V – Vespertino ou N – Noturno), categoria (O – Operário ou G – Gerente), valor da hora trabalhada. Sabendo-se que essa empresa deseja informatizar sua folha de pagamento, faça um programa que: a) Leia as informações dos funcionários, exceto o valor da hora trabalhada, não permitindo que sejam informados turnos nem categorias inexistentes. Trabalhar sempre com a digitar de letras em maiúsculas. b) Calcule o valor da hora trabalhada, conforme a tabela a seguir: Categoria Turno Valor da hora trabalhada G N 18% do salário mínimo G M ou V 15% do salário mínimo O N 13% do salário mínimo O M ou V 10% do salário mínimo c) Adote o valor corrente do salário mínimo. d) Calcule o salário inicial dos funcionários com base no valor da hora trabalhada e no número de horas trabalhadas. e) Calcule o valor do auxílio-alimentação recebido por funcionário de acordo com o seu salário inicial, conforme a tabela a seguir: Salário inicial Auxílio-alimentação Até R$ 1080,00 20% do salário do salário inicial Entre R$ 1080,00 e R$ 15% 2160,00 inicial Acima de R$ 2160,00 5% do salário inicial Mostre o código, número de horas trabalhadas, valor da hora trabalhada, salário inicial, auxílio-alimentação e o salário final (salário inicial + auxílioalimentação). 5. Uma grande empresa para seu pessoal de vendas com base em comissões. O pessoal de vendas recebe R$ 200,00 por semana mais 9% de suas vendas brutas durante essa semana. Por exemplo, um vendedor que realiza um total de vendas de mercadorias de R$ 5.000,00 em uma semana, recebe R$ 200,0 mais 9% de R$ 5.000,00 ou um total de R$ 650,00. Foi-lhe fornecida uma lista dos itens vendidos por cada vendedor. Os valores desses itens são: 34 Item Valor 1 R$ 239,99 2 R$ 129,75 3 R$ 99,95 4 R$ 350,89 Desenvolva um programa que receba a entrada de itens vendidos por um vendedor durante a última semana, calcule e exiba os rendimentos do vendedor. Não há limites quanto ao número de itens podem ser vendidos por um mesmo vendedor. 5.7 REFERÊNCIA BIBLIOGRAFIA ASCENCIO, Ana Fernanda Gomes; CAMPOS, Edilene Aparecida Veneruchi. Fundamentos da Programação de Computadores. São Paulo: Pearson Prentice Hall PUGA, Sandra; RISSETTI, Gerson. Lógica de programação e estrutura de dados, com aplicações em Java. São Paulo: Pearson Prentice Hall, 2009 SAVITCH, Walter. Absolute Java, 5ª ed. New Jersey: Pearson Education, 2012 DEITEL, Paul; DEITEL, Harvey. Java for Programmers. 2nd Ed. Boston: Pearson Education, Inc., 2012 35