Lista 3

Recomendações Importantes

    • A lista deve ser entregue até às 23:59:59 do dia 19/07.
    • 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.

Questão 1 - Legend Of Fibonacci

Link, um pequeno elfo de Hyrule, tinha uma fixação por maltratar pobres galinhas. Um dia, ao entrar num galinheiro a procura de vasos pra quebrar, ele não resistiu, e ao bater numa das galinhas que estavam em seu caminho, formou-se uma revolta e ele foi atacado por todas que estavam à sua volta. Traumatizado, Link agora sempre procura saber quantas galinhas deve ter em qualquer galinheiro que pretenda entrar. Para saber essa quantidade, ele utiliza a seguinte lógica:

Num galinheiro fechado coloca-se uma galinha. Supondo que em cada mês, a partir do segundo mês de vida, cada galinha dá origem a uma nova galinha, dado um número x de meses, quantas galinhas existirão no galinheiro?

Para ajudar Link, escreva dois métodos, um recursivo, e um iterativo, que dado o número x de meses desde a construção de um galinheiro, informe o número de galinhas com qual Link deve se preocupar.

OBS.: Descreva, em forma de comentário no início do arquivo, as vantagens e desvantagens de cada método.

Questão 2 - Bolsa IP

No clima de manifestações e protestos que tem ocorrido recentemente, o Centro de Informática não ficou de fora, e depois de muita luta, alcançou a independência, passando a se chamar o Sacro-império da Informática. O imperador do CIn, Valdus I, resolveu implementar um novo e revolucionário programa, o Bolsa-IP, que premia os seus cidadãos baseado nas suas notas de Introdução à Programação. Valdus I precisa de um registro de todos os beneficiados pelo programa, então você irá ajudá-lo na criação do mesmo.

Nesse sistema, os alunos poderão se cadastrar, informando seu nome, sua média final na disciplina de IP, e se passaram pela prova final ou não. Caso o aluno não tenha sido aprovado (ou seja, obtido média menor que 3 sem passar pela final, ou menor que 5 passando pela final), o aluno NÃO será registrado no sistema, e uma mensagem "Desculpe, nao eh possivel inscreve-lo no sistema" será exibida. Caso seja inscrito com sucesso, um objeto do tipo AlunoBeneficiado deverá ser criado com suas informações, que consistem em:

  • Seu nome completo
  • Sua média
  • Uma flag informando se ele passou pela final ou não

Além disso, a classe deverá conter um método getBolsaIP(), que retorna o valor que o aluno receberá do benefício, dado pela fórmula (N * 100) * F, onde N é a nota do aluno, e F é um valor referente ao aluno ter ido à final ou não. F terá valor 1 caso ele não tenha ido à final, e 0.7 caso contrário. Após feito o cadastro, deverá ser mostrado ao aluno quanto ele irá receber.

Obs.: Os alunos beneficiados serão armazenados num array, que inicialmente terá capacidade máxima para apenas 1 aluno. Caso esse array esteja cheio e um aluno deseje se cadastrar, o sistema deverá criar um novo array com capacidade maior, de modo a manter os cadastros anteriores, bem como comportar novos cadastros. A capacidade do array deverá dobrar a cada vez que isso acontecer. O array, bem como um inteiro que representa a quantidade de alunos cadastrados no sistema, devem estar encapsulados numa classe CadastroBolsaIP, que deverá possuir um método gerarRelatorio(), que imprime a quantidade de alunos cadastrados, o menor valor de bolsa recebido por um aluno cadastrado, o maior valor de bolsa recebido por um aluno cadastrado, e a média de todas as bolsas recebidas.

Seu programa deverá possuir também uma classe com um método main, que apresenta ao usuário um menu com 3 opções (cadastrar aluno, exibir relatório e sair do programa), e cada opção deve realizar a operação que a descreve.

Questão 3 - Hotel

Lembra do Hotel (o mesmo da Lista 2, Questão 1)? Agora seu chefe quer que você crie um programa pra armazenar todos os hotéis da rede. Dessa vez o trabalho será mostrado ao cliente, portanto a interação com o usuário precisa ser bem feita (com todos os campos validados). Faça isso seguindo o modelo abaixo:

Modelo:

Bom dia! //Descubra se realmente é dia
Selecione uma das opções abaixo:
1. Inserir Hotel
2. Buscar Hotéis
3. Listar Hotéis
4. Editar Hotel
5. Excluir Hotel
1
Você escolheu inserir Hotel:
Digite os dados do hotel nos campos abaixo:
Nome:
Xyzw //Entrada do usuário
Endereço:
- Rua:

Av. Beberibe //Entrada do usuário

- Número:
200 //Entrada do usuário
...    //Idem para todos os atributos
Hotel criado com sucesso!
//Volta ao menu principal
2
Você escolheu buscar hotéis:
Digite o nome ou parte do nome do hotel:
Abc //Entrada do usuário
Encontramos 2 hotéis com 'Abc'
[toString do hotel 1]
[toString do hotel 2]
//Volta ao menu principal
*Os resultados devem vir em ordem lexicográfica.
**Buscas por 'Ab' devem encontrar hotéis com 'ab' e vice-versa.
3
Você escolheu listar hotéis:
[toString de todos os hotéis, ordenados por nome]
//Volta ao menu principal
4
Você escolheu editar hotel:
Digite o nome completo do hotel:
Xyz //Entrada do usuário
Editando informações do Hotel Xyz
a. Nome
b. Telefone

... //Idem para todos os atributos

x. Concluir //Volta ao menu principal
a
Digite o novo nome do Hotel Xyz:
Xyzw //Entrada do usuário
Edição concluída com sucesso!
//Volta para o menu de edição
*Informe caso não encontrar o hotel.
5
Você escolheu excluir Hotel:
Digite o nome completo do hotel:
Xyzw //Entrada do usuário
Tem certeza que deseja excluir o Hotel Xyzw? (sim/não)
sim //Entrada do usuário
Hotel excluído com sucesso!
//Volta ao menu principal
*Informe caso não encontrar o hotel.

Lembre, por baixo haverá uma classe para administrar a coleção de hotéis, então faça no main apenas o que é de respeito a interação com o usuário. Exemplo: o método listarHoteis deve retornar um conjunto de objetos da classe Hotel, já a impressão vai ser feita no main.

Para a ordenação pesquise por Bubble Sort.

Questão 4 - IPokémon

Estilo define se o golpe é físico ou especial.

Alguns monitores de IP estvam com muita vontade de jogar Pokémon, mas devido a restrições dentro dos laboratórios, não podiam. Por isso, eles resolveram pedir aos alunos que fizessem um pequeno simulador, de modo a pelo menos umas batalhas eles poderem fazer. Como a maior parte dos alunos são da era Ben 10 e Bob Esponja, eles até fizeram uma pequena documentação para ajudar. ;)

IPokemon - Documentação

Os tipos de um pokemon podem ser:

NORMAL, FIRE, WATER, ELECTRIC, GRASS, ICE, FIGHTING, POISON, GROUND, FLYING, PSYCHIC, BUG, ROCK, GHOST, DRAGON, DARK, STEEL

O programa terá as seguintes entidades:

Golpe ( Nome, Força, Tipo, Estilo )

Estilo define se o golpe é físico ou especial.]

Durante uma batalha, o dano aplicado por um golpe é dado pela fórmula: ((2A/5+2)*B*C)/D)/50)+2)*X)*Y)*Z)/255 A = Level do atacante B = Nível de Ataque ou Ataque especial do atacante. C = Força do golpe D = Nível de Defesa ou Defesa Especial do atacado X = Bônus de mesmo tipo (1 or 1.5) (Ocorre quando o tipo do golpe é o mesmo de um dos tipos do atacante) Y = Modificadores por tipo (4, 2, 1, 0.5, 0.25 ou 0) [Vide tabela abaixo] Z = Um número randômico entre 217 e 255

Pokemon ( Nome, Level, Tipo1, Tipo2(Opcional), Energia, Ataque, AtaqueEspecial, Defesa, DefesaEspecial, Velocidade, Golpes(1~4)) Treinador (Nome, Pokemons(1~6)) Batalha (Treinador1, Treinador2) As batalhas, obrigatoriamente, envolvem todos os pokemons de cada jogador. Os jogadores não podem escolher a ordem dos pokemons durante a batalha, será usada a mesma ordem formada durante a criação do Treinador. Sequencia de batalha: 1. Jogador 1 escolhe um golpe. 2. Jogador 2 escolhe um golpe. 3. O Pokemon que tiver mais velocidade ataca primeiro. 4. Se ainda possuir energia o segundo pokemon ataca. 5. Se não, o próximo pokemon do jogador é chamado. A batalha acaba quando um dos treinadores não possuir mais pokemons disponíveis. Depois de implementar a base lógica do jogo (Lembre de usar os conceitos de orientação à objeto), crie uma interface que possibilite criar 2 treinadores, com seus respectivos pokemons e golpes. E logo após isso, comece uma batalha entre eles. Seja criativo com suas mensagem de batalha e interações com o usuário.

Questão 5 - Desafio: Legend Of Fibonacci, A Link to the Past Questions

Link, depois de receber os seus métodos, explicou que o computador dele é muito velho e ineficiente, e por algum motivo não consegue executar métodos iterativos. Por isso, ele pediu que você implemente de maneira recursiva um programa que, dado um inteiro N, calcule o termo de posição equivalente na sequencia de fibonacci, mas seguindo as seguintes restrições:

  1. Não deve haver nenhum tipo de calculo repetido na recursão.
  2. Cada instância da recursão só pode instanciar uma nova chamada recursiva.