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
Download

Lista de Exercício