Lista 3

Recomendações Importantes

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

Questão 1 – Bill, the Butcher

Bill era um gaúcho de certa idade e por causa da sua idade, ele decidiu passar o seu legado na arte de fazer carne para os seus filhos, mas seus filhos por outro lado só queriam saber de ficar no computador programando em java e aprendendo a arte de Orientação a Objetos, então você que é muito amigo de Bill resolveu ajudá-lo e ensinar sobre carne usando a programação.

Defina uma classe abstrata com o nome Carne que tenha os atributos, peso(double), preço por Kg(double) e local(local onde a carne foi retirada/String), essa classe deve ter um método abstrato getChurrasco() que retorna uma String.

O construtor deve receber o peso, o preço por Kg e o local onde a carne foi retirada.

Após toda essa abstração implemente as classes Boi e Frango que herdam de Carnes e retorne Strings diferentes para o getChurrasco() com base no local já que a carne é feita de forma diferente para cada tipo, e mostre o preço e o peso da peça.

Agora depois de ficar tanto tempo no computador os filhos de Bill querem comer, mas querem saber o total de carne em Kg que eles vão comer. Para isso crie um programa que receberá um limite de peso de carne logo no início e que depois tenha um menu com opção para adicionar carne ou sair do programa. Só devem ser adicionadas as carnes quando seu peso mais o peso acumulado no sistema não ultrapasse o peso limite. Caso o peso total alcance o peso limite, ou o usuário escolha sair o programa será encerrado imprimindo as informações de cada carne adicionada no sistema.

Informações para serem impressas no método getChurrasco() :

Aves:

-Coração: Há 2 modos conhecidos de se fazer, com sal somente, ou marinado no molho shouyo e logo após vai na churrasqueira no espeto.

-Asa: Feito na churrasqueira mesmo podendo ser comprada pré-temperada ou não.

-Peito: O peito pode ser feito na churrasqueira sendo ele pré-temperado ou não.

Bovino:

-Coxa: A carne bovina encontrada na coxa é a Picanha, sendo feita ao alho, na propria gordura, na churrasqueira ou na chapa, sempre fica bom!

-Traseiro: Famoso contra-file, carne muito comum em receitas com os mais variados molhos, mas em churrasco você pode deixar ela marinando em um pouco de oleo vegetal e sal grosso por 20 mim e depois partir para o espeto.

-Costela: Feito na churrasqueira com sal grosso a gosto, sem misterios.

(Obs.: se você manja das carnes, ignore a simplificação da questão)

(Obs.: Caso a entrada esteja inválida volte ao menu)

Exemplo de entrada e saída:

Bom dia Jovem Gafanhoto das Carnes!

Qual o limite de peso?

100

O que você deseja fazer?

1-Adicionar peças de carne.

2-Sair.

1

Carne de qual animal?

1 - Boi

2 - Frango

1

Diga a localização da carne no animal(Coxa, Traseiro ou Costela):

Coxa

Qual o peso da carne em quilos?

20

Qual o preço da carne por quilo?

45

Carne adicionada com sucesso!

O que você deseja fazer?

1-Adicionar peças de carne.

2-Sair.

1

Carne de qual animal?

1 - Boi

2 - Frango

2

Diga a localização da carne no animal(Coração, Asa ou Peito):

Coração

Qual o peso da carne em quilos?

30

Qual o preço da carne por quilo?

25

Carne adicionada com sucesso!

O que você deseja fazer?

1-Adicionar peças de carne.

2-Sair.

2

Até mais Jovem Gafanhoto!

Peso total de carne : 50.0

Carne nº 1

Carne Bovina

Peso : 20.0

Preco por quilo : 45.0

Local : Coxa

A carne bovina encontrada na coxa é a Picanha, sendo feita ao alho, na propria gordura, na churrasqueira ou na chapa, sempre fica bom!

Carne nº 2

Carne de Ave

Peso : 30.0

Preco por quilo : 25.0

Local : Coração

Há 2 modos conhecidos de se fazer, com sal somente, ou marinado no molho shouyo e logo após vai na churrasqueira no espeto.

Questão 2 – Chicken Run

Bill agora tem que ensinar sobre a economia nacional aos seus filhos, só que aplicada a teoria do churrasco, e para isso nada melhor do que falar sobre o dólar.

Estudos mostram que as galinhas por falta de opção decidiram fugir para os USA, logo, comer galinha ficou caro pelos impostos de importação sobre o frango.

Redefina o getPreco da classe Frango da Questão 01 supondo que o preço do atributo agora se encontra em dólar e o valor retornado pelo método deve ser em reais.

Seu main deve cadastrar vários frangos e dizer a porcentagem de aumento que teve no preço.

Exemplo de entrada e saída:

As galinhas fugiram!!!

Quanto vale um dólar em reais?

4

O que você deseja fazer?

1-Adicionar galinha.

2-Sair.

1

Diga a localização da carne no animal(Coração, Asa ou Peito):

Coração

Qual o peso da carne em quilos?

30

Qual o preço da carne por quilo?

25

O que você deseja fazer?

1-Adicionar galinha.

2-Sair.

1

Diga a localização da carne no animal(Coração, Asa ou Peito):

Asa

Qual o peso da carne em quilos?

45

Qual o preço da carne por quilo?

20

O que você deseja fazer?

1-Adicionar galinha.

2-Sair.

2

Vamos agora aos resultados.

Preço original da compra :1650.0

Preço apocalíptico pago :6600.0

Porcentagem de aumento no preço : 300.0%

Questão 3 - Party Rock

Erique é um rapaz que adora uma festa. Recentemente chegou de uma longa viagem e está decidido a fazer uma churrasco, e vai chamar a galera.

Erique está muito ocupado organizando esse churrasco e deixou para você, exímio programador, a tarefa de ajudá-lo.

Você deve criar um programa em que irá receber a lista de itens a serem comprados (carnes) e que Erique possa convidar seus amigos mais chegados (todos devidamente cadastrados no programa, obviamente).

Cada convidado que confirmar o convite irá ficar responsável pela compra de algum item da lista (escolhido aleatoriamente). Pode ser que tenha mais convidados confirmados do que itens, mas não tem problema. Caso isso ocorra basta repetir o itens (quanto mais carne ou cana melhor, né?).

Calma, ainda não terminou.

Por fim você deve implementar uma classe Iterator para iterar sobre o repositório de convidados exibindo um relatório com o nome de cada convidado para a festa (repare que quem estiver cadastrado no programa mas NÃO foi convidado não será exibido) e o item sob sua responsabilidade.

Dica: Use as classe de Carne da Questão 1

Dica 2: Caso não tenha ficado claro, CADASTRAR uma pessoa no programa é diferente de CONVIDAR. Cadastrar serve para tornar a pessoa "existente" para que possa ser convidada.

Bem vindo ao gerenciador do churrasco de Erique \o/

1. Cadastrar Carne

2. Cadastrar Pessoa

3. Convidar Pessoa

4. Exibir relatório da festa

0. Sair

Opção:

1 //Entrada

Qual o tipo do item:

1. Carne de boi

2. Carne de frango

2//Entrada...

// Seguirá o fluxo para inserir uma carne de frango, e depois volta para o menu principal. O mesmo para cadastrar pessoa...

// O usuário poderá cadastrar mais itens, o que é o ideal...

// Suponha que o usuário já tenha cadastrado vários itens e pessoas.

1. Cadastrar item

2. Cadastrar Pessoa

3. Convidar Pessoa

4. Exibir relatório da festa

0. Sair

Opção:

3 //Entrada

Quem será convidado?

João Sergio //Entrada

João Sérgio foi convidado e deverá trazer Carne de Boi: 15kg, R$18,00 (Mercearia da VÓ)

1. Cadastrar item

2. Cadastrar Pessoa

3. Convidar Pessoa

4. Exibir relatório da festa

0. Sair

Opção:

4 //Entrada

Lista de convidados:

1. Lilian Maria - Carne de Boi: 10kg, R$10,00 (Engenho da VÓ)

2. Marcelo Pedro - Carne de Boi: 20kg, R$22,00 (Mercado VÓ)

2. Deyvson Lázaro- Carne de Frango: 15kg, R$18,00 (Mercearia da VÓ)

4. Amando Quirino - Carne de Frango: 10kg, R$12,00 (Açougue da VÓ)

//...

10. João Sergio - Carne de Boi: 15kg, R$18,00 (Mercearia da VÓ)

1. Cadastrar item

2. Cadastrar Pessoa

3. Convidar Pessoa

4. Exibir relatório da festa

0. Sair

Opção:

0 // Entrada

Boa festa!

Questão 4 – To the market

Erick está planejando seu churrasco e está com dificuldades na hora de comprar as carnes ( Questão 1 ). Ele não sabe se compra as carnes mais caras e fica com menos variedade, ou compra uma grande quantidade de carnes baratas. Para isso, tendo conhecimento de suas exímias habilidades em programação, ele solicitou sua ajuda. Seu trabalho será criar uma interface com métodos para adicionar, remover, imprimir um relatório e um para trocar o tipo de repositório.

Você deverá utilizar essa interface em dois tipos diferentes de repositórios, um que ordene as carnes em seu preço final ( preço por quilo x peso ), crescente e outro decrescente para cada adição. No caso da remoção, ao utilizar o repositório de preço crescente, ele deverá remover a carne mais barata, e o contrário caso seja o repositório decrescente. Já para o método de imprimir o relatório, para ambos os repositórios, só precisa percorrer todo o repositório guardando as informações de cada carne para imprimir para o usuário.

No começo do programa o usuário deverá escolher se ele quer ordenar as carnes em ordem crescente ou decrescente pelo seu preço final, e também deverá informar quanto dinheiro ele possui para gastar na compra das carnes. A partir dai deverá ter um menu com as opções de adicionar, remover, imprimir relatório, trocar o tipo de repositório, ou sair. No caso da opção de troca de repositório, o programa deverá passar todas as carnes armazenadas para um novo repositório do outro tipo. Para cada adição, ou remoção, o dinheiro atual do usuário deverá ser atualizado e exibido, e caso ele não tenha dinheiro suficiente para adicionar uma carne, uma mensagem de erro deverá ser impressa na tela.

Observações :

Além dos métodos citados, você tem a liberdade de criar quaisquer métodos auxiliares que levem a conclusão da questão, desde que tenha o requisitado.

Os repositórios devem começar com uma capacidade para 10 carnes e toda vez que chegar no seu limite, deve aumentar em mais 10 a capacidade.

Exemplo:

Seja bem-vindo ao gerenciador de compra de carnes!

Quanto você possui para gastar?

100

Você deseja ordenar as carnes de que modo?

1 - Preço Crescente

2 - Preço Decrescente

1

O que você deseja fazer?

1 - Adicionar Carne

2 - Remover Carne

3 - Imprimir Relatório

4 - Trocar de Repositório

5 - Sair

1

Carne de qual animal?

1 - Boi

2 - Frango

1

Diga a localização da carne no animal(Coxa, Traseiro ou Costela):

Coxa

Qual o peso da carne em quilos?

5

Qual o preço da carne por quilo?

10

Carne adicionada com sucesso!

Dinheiro restante : 50.0

1 - Adicionar Carne

2 - Remover Carne

3 - Imprimir Relatório

4 - Trocar de Repositório

5 - Sair

1

Carne de qual animal?

1 - Boi

2 - Frango

2

Diga a localização da carne no animal(Coração, Asa ou Peito):

Asa

Qual o peso da carne em quilos?

8

Qual o preço da carne por quilo?

4

Carne adicionada com sucesso!

Dinheiro restante : 18.0

1 - Adicionar Carne

2 - Remover Carne

3 - Imprimir Relatório

4 - Trocar de Repositório

5 - Sair

3

Carne nº 1

Carne de Frango

Peso : 8.0

Preco por quilo : 4.0

Local : Asa

Feito na churrasqueira mesmo podendo ser comprada pre temperada ou não.

Carne nº 2

Carne Bovina

Peso : 5.0

Preco por quilo : 10.0

Local : Coxa

A carne bovina encontrada na coxa é a Picanha, sendo feita ao alho, na propria gordura, na churrasqueira ou na chapa, sempre fica bom!

1 - Adicionar Carne

2 - Remover Carne

3 - Imprimir Relatório

4 - Trocar de Repositório

5 - Sair

4

Ordem trocada com sucesso!

1 - Adicionar Carne

2 - Remover Carne

3 - Imprimir Relatório

4 - Trocar de Repositório

5 - Sair

3

Carne nº 1

Carne Bovina

Peso : 5.0

Preco por quilo : 10.0

Local : Coxa

A carne bovina encontrada na coxa é a Picanha, sendo feita ao alho, na propria gordura, na churrasqueira ou na chapa, sempre fica bom!

Carne nº 2

Carne de Frango

Peso : 8.0

Preco por quilo : 4.0

Local : Asa

Feito na churrasqueira mesmo podendo ser comprada pre temperada ou não.

1 - Adicionar Carne

2 - Remover Carne

3 - Imprimir Relatório

4 - Trocar de Repositório

5 - Sair

5

Até a próxima, bom churrasco!

Questão 5 - BeerPong

Erique e seus convidados estão se divertindo bastante no churrasco, de repente alguém vem com a ideia de jogar BeerPong.

Um jogo que, basicamente, consiste em tentar arremessar uma bolinha e acertar dentro de copos de cerveja.

Erique logo indaga que esse jogo é muito bobo e que alunos de Ciência da Computação que se prezem devem fazer algo mais interessante,

portanto, instaurou duas regras

1. Os copos vão ser colocados em formato de matriz quadrada (MxM) de tamanho 8

2. Cada linha, coluna e diagonal deve possuir apenas uma bolinha

Após todos reclamarem que isso é impossível e pedirem mais uma rodada de Schweppes (porque todos sabemos que é claro que ninguém aqui ingere bebidas alcoólicas)

você como o exímio programador que é, ficou curioso em saber quando era possível, ou não, seguir as especificações de Erique.

Implemente um programa que, dadas as posições de duas bolinhas em coordenadas (x,y), retorne

1. A configuração em que elas se encontram

2. Se é possível colocar mais 6 bolinhas e ainda assim satisfazer as condições sádicas de Erique

Exemplos

EXEMPLO 1:

Digite a posição da primeira bolinha

1,0 // entrada do usuário

Digite a posição da segunda bolinha

7,5 //entrada do usuário

// saída

Configuração do mapa:

- - - - - - - -

- - - - - - - -

- - - - - - - B

- - - - - - - -

- - - - - - - -

- - - - - - - -

- - - - - - - -

- B - - - - - -

É possível satisfazer as condições

EXEMPLO 2:

Digite a posição da primeira bolinha

0,7 // entrada do usuário

Digite a posição da segunda bolinha

2,6 //entrada do usuário

// saída

Configuração do mapa:

B - - - - - - -

- - B - - - - -

- - - - - - - -

- - - - - - - -

- - - - - - - -

- - - - - - - -

- - - - - - - -

- - - - - - - -

Não é possível satisfazer as condições

EXEMPLO 3:

Digite a posição da primeira bolinha

0,0 // entrada do usuário

Digite a posição da segunda bolinha

7,4 //entrada do usuário

// saída

Configuração do mapa:

- - - - - - - -

- - - - - - - -

- - - - - - - -

- - - - - - - B

- - - - - - - -

- - - - - - - -

- - - - - - - -

B - - - - - - -

É possível satisfazer as condições

EXEMPLO 4:

Digite a posição da primeira bolinha

0,1 // entrada do usuário

Digite a posição da segunda bolinha

4,0 //entrada do usuário

// saída

Configuração do mapa:

- - - - - - - -

- - - - - - - -

- - - - - - - -

- - - - - - - -

- - - - - - - -

- - - - - - - -

B - - - - - - -

- - - - B - - -

É possível satisfazer as condições

EXEMPLO 5:

Digite a posição da primeira bolinha

0,0 // entrada do usuário

Digite a posição da segunda bolinha

7,4 //entrada do usuário

// saída

Configuração do mapa:

- - - - B - - -

- - - - - - - -

- - - - - - - -

- - - - - - - -

- - - - - - - -

- - - - - - - -

- - - - - - - -

B - - - - - - -

É possível satisfazer as condições

EXEMPLO 6:

Digite a posição da primeira bolinha

0,0 // entrada do usuário

Digite a posição da segunda bolinha

1,6 //entrada do usuário

// saída

Configuração do mapa:

- - - - - - - -

- B - - - - - -

- - - - - - - -

- - - - - - - -

- - - - - - - -

- - - - - - - -

- - - - - - - -

B - - - - - - -

É possível satisfazer as condições

EXEMPLO 7:

Digite a posição da primeira bolinha

0,0 // entrada do usuário

Digite a posição da segunda bolinha

2,2 //entrada do usuário

// saída

Configuração do mapa:

- - - - - - - -

- - - - - - - -

- - - - - - - -

- - - - - - - -

- - - - - - - -

- - B - - - - -

- - - - - - - -

B - - - - - - -

Não é possível satisfazer as condições

EXEMPLO 8:

Digite a posição da primeira bolinha

0,0 // entrada do usuário

Digite a posição da segunda bolinha

0,7 //entrada do usuário

// saída

Configuração do mapa:

B - - - - - - -

- - - - - - - -

- - - - - - - -

- - - - - - - -

- - - - - - - -

- - - - - - - -

- - - - - - - -

B - - - - - - -

Não é possível satisfazer as condições

EXEMPLO 9:

Digite a posição da primeira bolinha

0,0 // entrada do usuário

Digite a posição da segunda bolinha

6,0 //entrada do usuário

// saída

Configuração do mapa:

- - - - - - - -

- - - - - - - -

- - - - - - - -

- - - - - - - -

- - - - - - - -

- - - - - - - -

- - - - - - - -

B - - - - - B -

Não é possível satisfazer as condições

EXEMPLO 10:

Digite a posição da primeira bolinha

0,0 // entrada do usuário

Digite a posição da segunda bolinha

7,6 //entrada do usuário

// saída

Configuração do mapa:

- - - - - - - -

- - - - - - - B

- - - - - - - -

- - - - - - - -

- - - - - - - -

- - - - - - - -

- - - - - - - -

B - - - - - - -

Não é possível satisfazer as condições

Desafio - Overdose!

Então galera, depois de passar tanto tempo lendo sobre carne, não aguento mais, então quem conseguir uma nota acima de 7,5 na lista ganhara o token de desafio.

Observação: lembrem de chamar a monitoria para os churrascos, afinal, monitor feliz == aluno feliz :D

Boa sorte!

Partiu flw.