Lista 2

Recomendações Importantes

    • A lista deve ser entregue até às 23:59:59 do dia 06/12.
    • Deixe seus programas entendíveis. Imprima mensagens para auxiliar o usuário a utilizar o seu programa.
    • Seja criativo. As mensagens do seu programa não necessitam estar iguais aos exemplos, a menos que seja especificado.
    • A lista é individual, portanto não compartilhe seus códigos com outros alunos ou os coloque em locais públicos (Pastebin, Github).
    • Não copie. Se for detectado cópia da internet ou de um colega, as LISTAS envolvidas serão completamente zeradas.
    • Alguns exemplos aqui definidos podem apresentar comentários. Note que são apenas ilustrativos.
    • A correção da Questão Desafio é booleana. Ou seja: você receberá o ponto extra do desafio caso a resposta esteja 100% correta. Qualquer erro, mesmo que seja em apenas um caso, invalidará a questão.
    • Não é permitido o uso da API de Java ou bibliotecas externas, exceto quando permitido explicitamente na questão, na lista, ou autorizado por um monitor através da lista de email (Google Groups) da disciplina. Questões submetidas que violarem essa regra serão consideradas como não entregues.
    • São permitidas nessa lista, para todas as questões:
    • String
    • Scanner

Questão 1 - Calendário

Dave é um estudante de CC que está tendo problemas com as datas de provas e mini-provas. Após muita reflexão, Dave decidiu criar um horário para se organizar. Sabendo que Dave tem provas na próxima semana, e que ainda há de começar a fazer sua lista de programação, Dave pediu ajuda a você, exímio programador, para escrever um programa que o ajude.

Você fará um programa em que o usuário possa registrar o que acontecerá em um dia, o qual consiste em:

- uma data, no formato DD/MM/AAAA;

- informações de eventos associados.

Por sua vez, um Evento consiste em:

- hora em que o evento se inicia;

- hora em que o evento termina;

- os horários devem ser no formato HH:MM e precisam ser consistentes, portanto um evento que começa às 13h não termina às 12h e o começo do evento não é no mesmo horário que seu término;

- descrição do evento.

Observações:

- As informações do evento devem ser armazenadas em uma única String, e cada evento deve ser separado por quebras de linha;

- Caso o usuário digite uma data ou hora inválida, o programa deve avisá-lo e requisitar uma nova.

Crie uma classe de teste em que é possível criar um evento e armazenar suas informações no dia (faça a sua implementação do método toString em cada classe). Também deve ser possível ao usuário visualizar o dia com os eventos e alterar o último evento adicionado.

Nota: É permitido o uso de Integer nesta questão.

Exemplo:

## Calendário CC 2013.2 ##
Informe-nos o dia em que você deseja adicionar compromissos:
28/11/2013 //Entrada do usuário
Selecione uma das opções abaixo:
1. Adicionar compromisso
2. Visualizar compromissos do dia
3. Alterar último compromisso
4. Sair
1
Informe o horário de início:
15:00 //Entrada do usuário
Informe o horário de término:
17:00 //Entrada do usuário
Adicione uma descrição para este compromisso:
Prova de álgebra //Entrada do usuário
2
[Compromissos adicionados, separados por dupla quebra de linha]
3
Você escolheu alterar o seguinte evento:
[toString do último compromisso]
Escolha a informação a ser modificada:
a. Início
b. Término
c. Descrição
a
Digite o novo horário:
16:00 //Entrada do usuário
Horário modificado.
4
Seja pontual e até a próxima! //término do programa

Questão 2 - Imóvel

A empresa em que você trabalha foi contratada para criar um software de gestão dos imoveis (Edifícios) de uma imobiliária, você exímio programador, foi designado para desenvolver as classes básicas de acordo com as especificações da empresa.

-Cada edifício deverá ter um nome único, e um endereço;

-Deverá ser especificado o numero de andares, apartamentos por andar;

-Deverá ser especificado quantas vagas de garagem cada apartamento tem, a área total do apartamento, a quantidade de quartos, banheiros e suítes, e o valor de cada apartamento;

-Informações sobre a área comum do imóvel também devem ser informadas(Piscina, Salão de festas, Sala de jogos...);

-Deverá ser implementado um método toString para exibir todas as informações anteriores.

Obs: Crie uma classe main onde se possa cadastrar um imóvel, e por fim imprima o objeto utilizando a implementação do toString que foi implementado.

Questão 3 - Gerenciador de Imóveis

Devido ao bom trabalho no desenvolvimento da classe Imovel, foi solicitado que você implemente outra parte do sistema, utilizando a classe que você já desenvolveu. Crie uma nova classe gerenciadorImoveis onde seja possível:

-Cadastrar um novo imóvel;

-Modificar um imóvel existente;

-Localizar um imóvel no Sistema utilizando filtros(busca por nome, bairro, quantidade de quartos, valor);

-Remover um imóvel existente;

Lembre - se que nessa nova classe deverá conter um array onde esses imóveis serão armazenados, porém esse array tem ser substituído por um maior caso ele seja completamente preenchido, mas sem perder os cadastros feitos anteriormente.

Podem ser utilizados diversos filtros ao mesmo tempo, ou seja você procurar um imóvel em um determinado bairro e tenha uma certa quantidade de quartos , enfim qualquer combinação dos filtros.

Depois de criar essa nova classe crie uma classe main onde se possa testar o sistema.

O programa só deve parar de executar quando o usuário solicitar.

Questão 4 - Dominação e Organização

Loki é um dos deuses de Asgard, temido pelo seu poder de manipulação e persuasão e por um dos mais espertos dos nove mundos.

Atualmente, ele busca a concretização da profecia do terrível Ragnarök; entretanto, ele está tão concentrado na busca por algum jeito de cumprir o seu suposto destino que agora está desorganizado.

Ana é a presidente do fã-clube do Loki e percebeu a desorganização do seu deus favorito. Por isto, deseja ajudá-lo, mas está completamente atarefada na organização do clube. Você, exímio programador, foi recrutado para evitar que Loki perca o seu foco por causa deste obstáculo.

Você escreverá um programa que fará uma espécie de inventário que Loki usará pra registrar a informação de itens encontrados. Uma vez que um item está no inventário, Loki poderá equipá-lo, desequipá-lo (caso equipado), modificá-lo ou descartá-lo (removê-lo do inventário).

Um item possui as seguintes características:

-Nome (dois itens não possuem o mesmo nome) e descrição do item;

-Estado do item (caso quebrado, ele não pode ser equipado, sendo equipável caso contrário);

-Um item pode ser encantado ou não. Itens quebrados não podem ser encantados.

OBS: Os itens serão armazenados num array, que inicialmente terá capacidade máxima para apenas um item. Caso esse array esteja cheio e um item precisa ser guardado, o sistema deverá criar um novo array com capacidade maior, de modo a manter os itens atuais, bem como comportar novos itens. A capacidade do array deverá dobrar a cada vez que isso acontecer.

Crie uma classe onde é possível usar as funcionalidades já citadas do programa, além de poder exibir tanto as informações de todos os itens que estão no inventário, apenas os itens que estão equipados ou de apenas um único item.


Ex:

Olá, asgardiano. Aqui você pode administrar suas possessões afim de facilitar a dominação dos nove mundos ou coisa parecida. O que desejas fazer?
1. Armazenar um item no inventário
2. Equipar um item
3. Desequipar um item
4. Modificar um item
5. Descartar um item
6. Exibir itens
7. Retornar à jornada
1
Qual o nome do item?
Flecha de Visco //Entrada
Descreva o item, asgardiano.
Flecha necessária para matar Balder, e assim servir de catalisador para o Ragnarök. //Entrada
Qual o estado do item?
Normal //Entrada ('Quebrado' caso contrário)
Deseja encantar o item?
Sim //Entrada
O item foi encantado.
Item armazenado no inventário. //Volta à escolha de opções
2
Digite o nome do item que você deseja equipar:
Flecha de Visco //Entrada
O item foi equipado.
//Caso o item não for encontrado, alertar ao usuário e retornar à escolha de opções
3
Digite o nome do item que você deseja desequipar:
Flecha de Visco //Entrada
O item foi desequipado.
//Caso o item não for encontrado, alertar ao usuário e retornar à escolha de opções
4
Digite o nome do item que você deseja modificar:
Flecha de Visco //Entrada
O que desejas modificar?
... //opções de cada atributo
5
Digite o nome do item que você deseja descartar:
Flecha de Visco //Entrada
Este item está equipado. Deseja descartá-lo mesmo assim?
//Remove ou não o item e volta à escolha de opções.
6
O que você deseja visualizar?
a. Informações sobre um item
b. Todos os itens no inventário
c. Itens equipados
d. Voltar
a
Digite o nome do item:
Flecha de Visco //Entrada
[toString do item procurado; se o item não existir, alertar ao usuário e voltar à este menu]
...
7
Boa sorte, asgardiano. Que você tenha êxito na sua jornada!

Questão 5 - MDC

Escreva o método mdcArrays, que recebe dois arrays de inteiros de tamanho N e retorne um novo array, contendo o MDC dos elementos dos arrays pareados (array1[0] com array2[0], array1[1] com array[1], ..., array1[n] com array2[n]). O cálculo do MDC deve ser recursivo, baseado no algoritmo de Euclides, cuja descrição é:

Dados dois números x e y, tal que x >= y e y >= 0, o MDC desses dois números é x, se y = 0, ou o MDC de y e o resto de x dividido por y, se y > 0

Crie também um programa que peça ao usuário todas as informações necessárias pra testar o método criado.

Questão 6 (Desafio) - Números Joviais

Uma sequência de n inteiros possui o que são considerados números joviais se os valores absolutos das diferenças entre números sucessivos são todos os números de 1 a n - 1.

Por exemplo:

[1 4 2 3] são números joviais, pois as diferenças absolutas são 3 (1 - 4), 2 (4 - 2) e 1 (2 - 3), respectivamente.

Uma sequência de um único dígito é considerado um número jovial.

Escreva um programa que determine se uma sequência de inteiros possui números joviais. O primeiro número lido é a quantidade T de números da sequência, e os que vêm a seguir são os T números da sequência.

Exemplo:

4 1 4 2 3 //Entrada do usuário
Os números são joviais //(|1 - 4| = 3; |4 - 2| = 2; |2 - 3| = 1)
5 1 4 2 -1 6
Os números não são joviais //(|1 - 4| = 3; |4 - 2| = 2; |2 - (-1)| = 3; |-1 - 6| = 7)