Cursos: Análise, Ciência da Computação e Sistemas de Informação Programação I - Prof. Aníbal Lista de exercícios 5 Exercícios sobre repetição 1. Escreva um método que lê via teclado 8 números e retorna a quantidade de negativos. 2. Escreva um método que recebe um inteiro n e exibe na tela todos os inteiros positivos menores do que n. 3. Escreva um método que recebe um real n e retorna a soma dos inteiros positivos menores que n. 4. Escreva um método que recebe um real n e retorna a média dos números pares positivos menores que n. 5. Escreva um método que lê via teclado 8 números reais positivos e retorna o valor do maior deles. Validar os dados de entrada, pedindo outro número sempre que o usuário digitar um valor nulo ou negativo. 6. Escreva um método que lê diversos números reais quaisquer e retorna o valor do menor deles. A quantidade de números a serem lidos deve ser passada para o método como um parâmetro. 7. Escreva uma pequena classe Estudante com os atributos nome, nota1, nota2. Escreva um método que devolve a média aritmética do estudante e outro que devolve o seu nome. Escreva uma classe de teste que instancie 5 estudantes com notas lidas do teclado e imprima a maior média obtida por um estudante deste grupo e o nome dele. 8. Acrescente à classe de teste do exercício anterior, a capacidade de calcular, também, a média geral dos 5 estudantes. 9. Desenhe o String que o método abaixo devolve para n = 4. public String geraSaida(int n){ String s = ""; for (int k = n; k > 0; k--){ for (int m = 1; m <= k; m++) s += k + m + " "; s += "\n"; } return s; } 10. Escreva um método que recebe um valor inteiro positivo n > 1 como parâmetro e devolve um String contendo os termos da Seqüência de Fibonacci menores ou iguais a n. A Seqüência de Fibonacci é uma seqüência de inteiros em que os dois primeiros termos são 1, e, a partir do terceiro, cada termo é a soma dos dois antecessores: 1, 1, 2, 3, 5, 8... 11. Escreva um método que recebe um inteiro positivo n e retorna a soma de todos os seus divisores. 12. Escreva um método que recebe dois números reais a e b e retorna a soma de todos os números pares existentes entre esses dois. Considere que número par é um inteiro positivo (2, 4, 6 ...). 13. Escreva um método que recebe dois números reais a e b e um inteiro positivo c, e retorna a média de todos os múltiplos de c no intervalo [a; b]. 14. Escreva um método que recebe um inteiro positivo n e retorna true se ele é um número primo, ou false, em caso contrário. Programação I - Prof. Aníbal - Lista de exercícios 5 1 15. a) Um investimento pré-fixado é um tipo de investimento em que o cliente aplica um certo valor, por uma taxa média mensal pré-fixada, por um certo número de meses. Ao final do período obtém um rendimento. O rendimento vai sendo capitalizado a cada mês. Crie uma classe de nome Investimento. Atributos: valor inicial do investimento, taxa mensal de juros contratada, prazo (em meses) durante o qual o dinheiro permanece investido e o rendimento obtido durante esse tempo. Programe os seguintes construtor e métodos: - Construtor para atribuir valores aos três primeiros atributos; - Métodos para retornar o valor de cada um dos atributos; - Método para calcular o rendimento a partir do que foi contratado. b) O aluno deve estar indagando: a que cliente pertence cada objeto investimento? Apenas para ilustrar isso, faça duas tarefas: - primeiramente, crie uma classe bem simples Cliente com os atributos nome, endereço e cpf, um construtor e métodos de acesso aos atributos; - a seguir, altere a classe Investimento para indicar, nela, o cliente ao qual ele pertence, adicionando o atributo private Cliente cliente; Inclua no seu construtor um parâmetro do tipo Cliente e ajuste seu código interno no que for necessário. Adicione mais um método de acesso para esse novo atributo. Conforme já vimos anteriormente, este item (b) exemplifica um relacionamento de associação entre as duas classes, o que se representa na UML por Investimento Cliente 16. Escreva um método para a classe Investimento (ex. anterior), que retorne a quantidade de meses necessária para fazer dobrar o valor investido, se aplicado à mesma taxa contratada. 17. Dado o método abaixo: public String constroiSaida(int n){ String t = ""; for (int i = 1; i <= n; i++) { int k; for (k = 1; k <= i; k++) t += k + " "; for (k = i; k > 0; k--) t += k + " "; t += "\n"; } return t; } a) Desenhe o String que será construído pelo método, para n = 5; b) Rescreva o método, substituindo o primeiro for interno por while e o segundo por do. 18. A classe Letra, a seguir, tem um método constroiLetraA( ) que retorna um String que contém o desenho da letra "A" no seguinte formato: AAAAAAA A A A A AAAAAAA A A A A A A Programação I - Prof. Aníbal - Lista de exercícios 5 2 public class Letra{ public String constroiLetraA() { String s = " AAAAA " + "\n"; for (int k=1; k<=2; k++) s += "A A" + "\n"; s +="AAAAAAA" + "\n"; for (int k=1; k<=3; k++) s += "A A" + "\n"; return s; } } Para exibir a letra "A" na tela, basta usar o seguinte trecho: public static void main(String args[]){ Letra a = new Letra(); System.out.println(a.constroiLetraA()); } Acrescente outros métodos à classe Letra, capazes de construir algumas outras letras do alfabeto. 19. Escreva um método que devolve um String com o formato e conteúdo abaixo. 10 10 8 10 6 10 4 10 2 10 9 9 10 9 8 7 8 9 8 5 6 9 8 3 4 9 8 7 9 10 7 6 7 8 7 6 5 6 7 6 5 9 10 5 4 7 8 5 4 3 9 10 3 2 1 20. Escreva um método que recebe um inteiro n > 1 e gera n números randômicos tirados do intervalo [100; 100] e exiba o maior valor de todos, o maior valor da segunda metade dos números gerados e a posição ordinal no grupo ocupada pelo menor número par gerado (se houver mais de um menor par, dar a posição da última ocorrência). Para facilitar o teste, o método deve exibir, também, todos os números gerados. 21. Dada a classe Data public class Data{ private int dia; private int mes; private int ano; public Data(int d, int m, int a) public String obtemDataPadrao() //devolve a data no formato padrão DD/MM/AAAA // (ex: 12/04/2006) public int obtemDataInvertida() //devolve a data na forma de um número inteiro // AAAAMMDD (ex: 20060412) } a) Escreva uma classe Pessoa com dois campos: nome e data de nascimento, sendo que este último é do tipo Data (pode ser declarado private Data dataDeNascimento;). Crie um construtor com quatro parâmetros para inicializar o nome e a data de nascimento. Programação I - Prof. Aníbal - Lista de exercícios 5 3 Crie os seguintes métodos: - método que devolve a idade da pessoa, calculada a partir da data de hoje, que deve ser fornecida como parâmetro; - método que devolve a data de nascimento; - método que devolve o nome. b) Escreva uma classe de teste que instancie diversas pessoas, a partir de dados lidos do teclado. Parar quando for lida uma pessoa de nome fim. Imprimir o nome da pessoa mais velha. 22. A classe abaixo iniciada implementa um jogo bem simples de dados, onde o usuário joga contra o computador. Cada jogo utiliza um dado, que é uma instância da classe Dado (observe o primeiro atributo), e contabiliza os pontos dos jogadores em dois atributos acumuladores. a) Programe o método joga(), obedecendo as seguintes regras do jogo: inicialmente é pedido ao usuário que indique o número de rodadas que ele deseja jogar contra o computador. A cada jogada o usuário lança o dado e depois o computador lança (chamando o método joga( ) para o objeto dado). Os pontos obtidos em cada rodada devem ser acumulados e mostrados ao final. public class JogoDeDados{ private Dado dado; private int pontosEu, pontosVoce; public JogoDeDados(){ dado = new Dado(6); // instancia um objeto dado para o jogo pontosEu = 0; pontosVoce = 0; } public void joga(){ .... } } public class Dado{//classe desenvolvida na lista de exercícios 3 private int lados; public Dado(int quantLados){//constrói um dado com a //quantidade de lados desejada lados = quantLados; } public int joga(){//lança o dado return (int) (Math.random() * lados + 1); } } b) Acrescente ao método joga() da classe JogoDeDados a capacidade de, ao final de um jogo, perguntar ao usuário se ele deseja jogar novamente. Se a resposta for não, o programa deve dar uma mensagem de agradecimento e encerrar. Se for sim, novo jogo deve ter início. 23. O conjunto de três valores inteiros capazes de formar um triângulo retângulo chama-se uma Tripla de Pitágoras. a) Escreva um método de nome eTriplaDePitagoras (este e no início do nome representa é , do verbo ser) que recebe três inteiros e devolve true se eles formam uma Tripla de Pitágoras, ou false, se não formam. Os dois primeiros inteiros devem ser considerados como candidatos a catetos e o terceiro como candidato a hipotenusa. b) Escreva um método de nome listaTriplasAte que mostra todas as Triplas de Pitágoras possíveis de formar com valores inteiros positivos de 1 até um valor limite, o qual é passado como parâmetro. Não mostre triplas repetidas. Programação I - Prof. Aníbal - Lista de exercícios 5 4 Algumas respostas: 1. public int contaNegativos(){ Teclado t = new Teclado(); int cont = 0; int i = 1; while (i < 9) { if (t.leDouble("Entre com um número: ") < 0) cont++; i++; } return cont; } 5. public double maiorNumeroLido(){ System.out.println("Informe 8 numeros positivos: "); double num = 0; double max = 0; Teclado t = new Teclado(); for (int i = 1; i <= 8; i++){ num = t.leDouble(); while (num <= 0){ System.out.println("Só vale número positivo - redigite!"); num = t.leDouble(); } if (i == 1) max = num; else if (num > max) max = num; } return max; } 9. 5 6 7 8 4 5 6 3 4 2 10. public String montaFibonacci(int n){ String s = "1, 1"; int ultimo = 1;int penultimo = 1;int novo = ultimo + penultimo; while (novo <= n){ s += ", " + novo; penultimo = ultimo; ultimo = novo; novo = ultimo + penultimo; } return s; } 11. public int somaDivisores(int n){ int soma = 0; for (int i = 1; i<= n; i++) if (n % i == 0) soma += i; return soma; } Programação I - Prof. Aníbal - Lista de exercícios 5 5 12. public int somaPares(double a, double b){ if (a>b){ double salva = a; a=b; b=salva; } int par = 0;int soma = 0; if (a < 0) par = 2; else if (Math.floor(a) % 2 == 0) par = (int) Math.floor(a) + 2; else par = (int) Math.floor(a) + 1; while (par < b){ soma += par;par += 2; } return soma; } 17. 1 1 1 2 2 1 1 2 3 3 2 1 etc... Programação I - Prof. Aníbal - Lista de exercícios 5 6