Programação 2

Lista de Exercícios

Observações

Lista 1: Introdução a Java

Questão 1

Escreva um programa Java que imprima na saída padrão as suas informações pessoais. O formato de entrada e saída do programa deve ser o seguinte:

Exemplo:
Entrada

Não tem entrada.

Saída

Nome: Jose de Souza da Silva
Data de Nascimento: 31/07/1980
Naturalidade: Coxixola
Nacionalidade: Brasileira
Matricula: 20011234-5

Questão 2

Escreva um programa Java que leia da entrada padrão dois números inteiros A e B, 0 < (A, B) < 1000, e imprima na saída padrão os resultados dos seguintes cálculos, caso eles sejam possíveis: A + B, A - B, A % B, A * B, A / B, B / A

Exemplo:
Entrada

4
6

Saída

10, -2, 4, 24, 0,1

Questão 3

Escreva um programa em Java que leia da entrada padrão um número inteiro N, 0 < N < 100, depois leia N números inteiros e imprima na saída padrão a soma e o produto destes N números.

Exemplo:
Entrada

10
1
2
3
4
5
6
7
8
9
10

Saída

Soma = 55
Produto = 3628800

Questão 4

Escreva um programa em Java que leia da entrada padrão um número inteiro N, 0 < N < 1000000, depois leia N números inteiros e imprima na saída padrão o menor valor, a média aritmética, o maior valor, a quantidade de números pares e a quantidade de números impares.

Exemplo:
Entrada

10
1
2
3
4
5
6
7
8
9
10

Saída

Menor valor: 1
Valor medio: 5
Maior valor: 10
Pares: 5
Impares: 5

Questão 5

Escreva um programa Java que leia da entrada padrão um número inteiro N, 1 < N < 100000, e diga se N é um número primo ou não. Um número primo é aquele cujos únicos divisores inteiros são o número 1 e o próprio número.

Exemplo 1:
Entrada

10

Saída

O numero 10 nao eh um numero primo.

Exemplo 2:
Entrada

13

Saída

O numero 13 eh um numero primo.

Lista 2: Usando Objetos e Coleções

Questão 1

Escreva um programa em Java para criar cinco contas simples para cinco clientes diferentes, deposite uma quantia qualquer em cada uma das contas e depois imprima as informações de cada uma delas.

Exemplo:
Entrada

Não tem entrada

Saída

ContaSimples numero 1, titular Joao, data 13/06/2001, saldo R$ 700,00
ContaSimples numero 2, titular Maria, data 13/06/2001, saldo R$ 130,00
ContaSimples numero 3, titular Pedro, data 13/06/2001, saldo R$ 300,00
ContaSimples numero 4, titular Jacques, data 13/06/2001, saldo R$ 10000000,00
ContaSimples numero 5, titular Alexandre, data 13/06/2001, saldo R$ 0,00

Questão 2

Escreva um programa em Java para criar duas contas simples diferentes, deposite uma quantia qualquer em cada uma das contas e imprima as informações de cada uma delas, depois transfira uma quantia de uma conta para a outra e imprima novamente as informações de cada uma delas.

Exemplo:
Entrada

Não tem entrada

Saída

ContaSimples numero 1, titular Joao, data 13/06/2001, saldo R$ 1000,00
ContaSimples numero 2, titular Maria, data 13/06/2001, saldo R$ 5000,00
ContaSimples numero 1, titular Joao, data 13/06/2001, saldo R$ 500,00
ContaSimples numero 2, titular Maria, data 13/06/2001, saldo R$ 5500,00

Questão 3

Escreva um programa Java que leia Strings da entrada padrão, armazenando-as em uma coleção, até encontrar o String fim, depois leia novamente vários Strings da entrada padrão até encontrar a palavra fim e diga se cada uma delas foi lida anteriormente ou não anteriormente.

Exemplo:
Entrada

Antonio
Pedro
Joao
Jose
Creusa
Matias
Rodrigo
fim
Antonio
Jeronimo
Carlos
Alexandre
fim

Saída:

Antonio localizado
Jeronimo nao localizado
Carlos nao localizado
Alexandre localizado

Questão 4

Escreva um programa Java que leia da entrada padrão números inteiros até encontrar a palavra fim, ordene de forma crescente os números lidos e imprima na saída padrão o conjunto de números ordenado.

Exemplo:
Entrada

10
5
6
7
8
9
20
34
1
5
fim

Saída

1
5
5
6
7
8
9
10
20
34

Questão 5

Escreva um programa Java que permita adicionar e remover Strings de uma coleção, ordenar seu conteúdo lexicograficamente e imprimir na saída padrão o conteúdo da coleção. O programa deve ler da entrada padrão os seguintes comandos:

adiciona xxx: adiciona o String xxx a coleção de dados
remove xxx: remove o String xxx da coleção de dados
ordena: ordena lexicograficamente a coleção de dados
imprime: imprime a coleção de dados na saída padrão
fim: encerra a execução do programa

A coleção não deve aceitar valores duplicados nem deve permitir que se remova um valor que não exista. Estes fatos devem ser notificados de forma adequada ao usuário.

Exemplo:
Entrada

adiciona Jose
adiciona Maria
adiciona Pedro
adiciona Jose
adiciona Creusa
remove Damiao
imprime
ordena
adiciona Matias
imprime
fim

Saída:

Adicionando Jose.
Adicionando Maria.
Adicionando Pedro.
Impossivel adicionar Jose, conteudo duplicado.
Adicionando Creusa.
Impossivel remover Damiao, conteudo nao encontrado.
Imprimindo colecao:
1: Jose
2: Maria
3: Pedro
4: Creusa
Ordenando colecao.
Adicionando Matias.
Imprimindo colecao:
1: Creusa
2: Jose
3: Maria
4: Pedro
5: Matias

Dica: Use Entrada.in.lerPalavra() para ler uma única palavra da entrada.

Lista 3: Criando classes e usando Exceções

Questão 1

Escreva uma classe para conter 2 membros do tipo real chamados largura e altura e chame a classe de Retangulo.

A classe deve possuir os seguintes métodos:

Observação: sempre valide os atributos que estão sendo atualizados.

Crie um programa para testar a classe anterior.

Questão 2

Defina uma classe Java para representar uma pessoa. Uma pessoa, no nosso caso,  possui os seguintes atributos:

A classe deve possuir métodos para modificar e acessar cada um dos atributos, construtores,  um método para calcular o IMC (Índice de Massa Corpórea) e um método toString() que fornece o nome da pessoa e uma descrição de sua categoria de acordo com o IMC

O ICM é obtido através da divisão do peso pela altura (em metros) ao quadrado e é interpretado da seguinte forma:

Crie um programa para testar a classe anterior.

Questão 3

Refaça a 5a Questão da segunda lista de exercícios utilizando métodos e atributos.

Exemplo:

        Vide Questão 5, lista 2.

Questão 4

Cria uma classe Java para representar um polígono qualquer. Um polígono é composto por um conjunto de pontos e cada ponto possui duas coordenadas, x e y.  A classe Ponto deve possuir métodos para acessar e modificar as suas coordenadas, um métodos equals() e um método toString(). A sua classe Poligono deve possuir métodos para adicionar e remover pontos, acessar o conjunto de pontos, um  toString() e um método para calcular a sua área.  Um exemplo de polígono:

   

Para calcular a área de um polígono qualquer, desde que seus lados não se interceptem,  podemos utilizar a seguinte fórmula :

 

   

Observações: 

Crie um programa para testar a classe anterior.

Questão 5

Escreva uma classe que representa um array de bits. Esta classe deve fornecer métodos para acessar um bit, modificar o valor de um bit, um método toString() que retorna o conteúdo do array de bits, um método equals() e métodos para realizar as operações lógicas AND, OR e NOT aplicados a arrays inteiros de bits. O construtor da classe deve receber como parâmetro o tamanho do array. Devem ser tratadas exceções que possam ocorrer durante o acesso ao array. Use a memória de forma eficiente.

Crie um programa para testar a classe anterior.

Lista 4: Herança e Polimorfismo

Nesta lista de exercícios iremos modelar um computador utilizando os conceitos de orientação a objetos vistos em sala de aula.

Um Computador, no nosso caso, é um dispositivo que possui as seguintes características:

Um Periférico é também um dispositivo e serve para estender a funcionalidade de um computador, seja agregando novas características seja melhorando características pre-existentes. Existem dois tipos de periféricos, de entrada e de saída .

Periféricos de entrada são os que possibilitam a comunicação do meio externo com o computador. Existe uma infinidade de periféricos de entrada; alguns dos mais comuns são mouse, teclado, joystick, scanner, microfone, placa de rede e fax-modem.

Periféricos de saída são os que possibilitam a comunicação do computador com o meio externo. Existe também uma infinidade de periféricos de saída; os mais comuns são monitor, impressora, auto-falante, placa de rede e fax-modem.

Obs.: Lembre-se que o fato de um periférico ser de saída não implica que ele não possa ser também de entrada, e vice-versa.

Questão 1

Defina o tipo abstrato de dados Dispositivo. Deve ser possível realizar as seguintes operações sobre um dispositivo:

Questão 2

Defina os tipos abstratos de dados Periférico, PeriféricoDeEntrada, PeriféricoDeSaída. Um periférico é um dispositivo que possui um nome, uma marca um modelo e um tipo de conexão. O tipo de conexão, no nosso caso, pode assumir um dos seguintes valores:

Um periférico de entrada deve permitir a transmissão de dados do meio externo para o computador, isso será feito através de um método chamado entrada que deve receber um Object como parâmetro.

Um periférico de saída deve permitir a transmissão de dados do computador para o meio externo, isso será feito através de um método chamado saida que deve receber um Object como parâmetro.

Obs.: Os métodos entrada e saida são a interface de comunicação. Por exemplo, se o computador precisa imprimir uma folha numa impressora ele chamaria o método saida de um periférico adequado passando como paramêtro um objeto que representasse a folha que ele deseja imprimir. Caso o usuário deseje enviar um comando pelo teclado ao computador ele deve chamar o método entrada do periférico adequado passando como paramêtro um objeto que representasse a seqüência de teclas digitadas.

Obs.: Sempre que um dispositivo for ligado ele deve se identificar, por exemplo, ao ligar uma impressora ela deve imprimir uma mensagem na tela do tipo : "Ligando impressora MARCA MODELO conectada a Porta Pararela"

Questão 3

Defina o tipo de dados abstrato Computador. Um computador é um dispositivo que possui as características que foram descritas mais acima. Uma outra característica muito importante de um computador é a sua capacidade de extensão. Um computador pode ser estendido através da agregação de novos Periféricos, mas essa extensão não é infinita. Para adicionar um novo periférico é preciso saber se o computador possui disponível algum ponto de conexão com o mesmo tipo de conexão do periférico. Um computador convencional possui a seguinte distribuição de pontos de conexão :

Obs.: Sempre que um computador é ligado todos os dispositivos agregados a ele também o são.

Questao 4

Nesta questão testaremos os tipos abstratos definidos anteriormente, para isso crie um Computador, pelo menos 3 periféricos de saída distintos e pelo menos 3 periféricos de entrada distintos.

Adicione os periféricos ao computador, quando for possível, ligue o computador, e realize um série de (pelo menos 30) operações de entrada e saída utilizando os diversos dispositivos criados.

Cada dispositivo criado deve se identificar cada vez que for realizar uma operação, por exemplo, toda vez que o computador desejar imprimir algo na impressora ela deverá imprimir uma mensagem na tela do tipo "Impressora MARCA MODELO imprimindo DADOS".

Questão 5

Efetue as modificações necessárias na sua hierarquia de classes e interfaces para permitir modelar uma rede de computadores. Uma rede pode agregar computadores, impressoras ou qualquer outro dispositivo que possa ser referenciado pela tecnologia utilizada.

Lista 5: Regras de Design e Composição

Nesta lista de exercícios trabalharemos com o fascinante mundo da música.

Questão 1

Crie uma representação para as 7 notas musicais, DO, RÉ, MI, FA, SOL, LA e SI. Deve ser possível modificar cada uma das notas para obter um som sustenido ou bemol e cada nota deve possuir um tempo de duração especificado pelo compositor. O ato de tocar uma nota musical deve ser representado pela impressão na saída padrão do seu valor,seguido pelo modificador, caso exista, seguido pelo tempo de duração.

Questão 2

Crie uma representação para uma melodia. Uma melodia é um conjunto de notas musicais separadas por intervalos de tempo definidos pelo compositor. Deve ser possível adicionar notas musicais, intervalos de tempo, trechos de outras melodias ou melodias completas à uma nova melodia. O ato de tocar uma melodia deve ser representado pela impressão na saída padrão de todas as suas notas musicais seguidas pelos intervalos de separação entre elas.

Questão 3

Crie uma representação para a letra de uma música. A letra de uma música é um texto formado por várias frases. Um frase é formada por palavras e por intervalos de tempo entre as palavras. Novamente os intervalos de tempo devem poder ser configurados pelo autor da letra. Deve ser possível indicar que uma determinada frase da letra deve ser repetida (bis) e que um determinado trecho da letra é o refrão da canção. O ato de tocar uma música deve ser representado pela impressão na saída padrão de todas as suas palavras, seguidas pelo intervalo de tempo entre elas.

Questão 4

Crie uma representação para uma música. Uma música é formada por uma letra e por uma melodia. Deve ser possível combinar músicas para criar um Pot-pourri. Tocar uma música significa imprimir na saida padrão sua melodia e sua letra.

Questão 5

Crie um pequeno editor que permita compor e "tocar" músicas para testar as suas classes.