Lista 1

Recomendações Importantes

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

Alguns tipos de bancos de dados utilizam-se de variáveis do tipo "varchar" ("varchar" é definido como uma concatenação de chars de tamanho não fixo) para armazenar Strings em seu sistema.

Infelizmente o banco de dados do CIn esteve com problemas, o que impediu que variáveis do tipo varchar pudessem ser adicionadas.

Sua tarefa é ajudar o suporte do CIn construindo um programa capaz de converter as entradas do tipo String para binário (único formato que o sistema está aceitando no momento).

Dica: utilize os valores da tabela ASCII para encontrar os valores decimais dos caracteres.

"banana" // Entrada do usuário

01100010 01100001 01101110 01100001 01101110 01100001 // Saída

    b       a        n         a        n        a // Explicação da saída (não precisa ser impresso)

Questão 2 - Interpreter Int

Implemente um interpretador de inteiros para entradas do usuário. O interpretador recebe comandos do console e retorna a resposta daqueles comandos. Todos os comandos válidos são iniciados com o caracter ':'. O programa deve funcionar em um loop infinito até que o usuário designe que ele encerre. Seu interpretador deve conter as seguintes funções:

  • ":add num num" -> soma de dois inteiros.
  • ":sub num num" -> subtração de dois inteiros.
  • ":mul num num" -> multiplicação de dois inteiros.
  • ":div num num" -> divisão de dois inteiros.
  • ":mod num num" -> módulo de dois inteiros.
  • ":q" -> encerra o programa
:add 1 2 // Entrada do usuário
3 // Saída
:sub 10 5 // Entrada do usuário
5 // Saída
:mul 7 3 // Entrada do usuário
21 // Saída
:div 10 3 // Entrada do usuário
3 // Saída
:mod 10 3 // Entrada do usuário
1 // Saída
:banana 1 2 3 // Entrada do usuário
Erro: comando inválido `:banana' // Saída
:add "carro" "casa" // Entrada do usuário
Erro: parâmetros inválidos para comando `:add' // Saída
:q // Entrada do usuário
// Fim do programa

Questão 3 - Interpreter Str

Baseado no interpretador construído na questão anterior, refine suas funcionalidades de forma que ele possa trabalhar com strings (caso não tenha feito a questão anterior execute esta separadamente). O reconhecimento de Strings é feito encontrando caracteres de aspas duplas ("), e o de caracteres por aspas simples ('). Seu interpretador deve conter as seguintes funções (além das anteriores):

  • ":cat str str" -> concatena duas strings.
  • ":minus str str" -> "subtrai" os caracteres de uma string presentes em outra string.
  • ":plus str str" -> "soma" os caracteres da segunda string na primeira, caso estes existam na primeira.
  • ":invert str" -> inverte a string.
  • ":insert str ch" -> insere um caracter numa string, alternando os caracteres originais com os inseridos.
  • ":q" -> encerra o programa
:cat "carro" "1000" // Entrada do usuário
"carro1000" // Saída
:minus "carro" "arte" // Entrada do usuário
"co" // Saída
:plus "carro" "arte" // Entrada do usuário
"caarrro" // Saída
:invert "banana" // Entrada do usuário
"ananab" // Saída
:insert "banana" '*' // Entrada do usuário
"b*a*n*a*n*a" // Saída

:cat 10 12 // Entrada do usuário

Erro: parâmetros inválidos para comando `:cat'  // Saída
:q // Entrada do usuário
// Fim do programa

Questão 4 - Geometria

Por meio de looping, você deve implementar um programa que leia do usuário o tamanho da base e o tamanho da altura de uma figura geométrica (ambos naturais 0 < N < 50).

Esse programa terá um menu, em que o usuário poderá escolher entre 5 figuras geométricas(retângulo, triângulo retângulo, retângulo com interior vazio, triângulo e paralelogramo) e, após informar a base e a altura, o programa deve imprimir no console a

figura escolhida.

Os padrões seguem abaixo:

    • OBS.: O programa só se encerrará quando o usuário digitar o número 0 no menu.
    • OBS 2.: As entradas serão efetuadas de forma que:
      • O triângulo retângulo terá a base igual a altura.
      • A diagonal menor do paralelogramo terá sempre a mesma medida dos lados.
1. Retângulo 
Exemplo de entrada: 5 X 7 
******* 
******* 
******* 
******* 
******* 
2. Triângulo retângulo 

Exemplo de entrada: 5

* 
** 
*** 
**** 
***** 
3. Retângulo com interior vazio 
Exemplo de entrada: 6x7 
******* 
*     * 
*     * 
*     * 
*     * 
******* 
4. Triangulo 

Exemplo de entrada: 9 (apenas números ímpares).

    * 
   *** 
  ***** 
 ******* 
********* 
5. Paralelogramo 

Exemplo de entrada: 9

* 
** 
*** 
**** 
***** 
****** 
******* 
******** 
********* 
 ******** 
  ******* 
   ******
    *****
     ****
      *** 
       ** 
        *

Questão 5 - Forsaken

Castor é um gamer que gosta muito de jogos do tipo MMORPG e sempre quer ficar entre os jogadores mais top do tipo de personagem que escolhe.

Dessa vez ele encontrou um jogo com uma grande gama de características de personagem, onde além da raça e da classe, o personagem criado também sofre influência da data de nascimento dele. Como Castor gosta de testar vários personagens antes de decidir qual usar e ainda é bastante esquecido, acabou ficando difícil decorar quais os atributos de seus personagens. Mas contaram pra ele que você é um exímio programador, então ele lhe pediu para criar um programa que diga quais as características do seu personagem, apenas digitando a raça, a classe e a data de nascimento do mesmo.

Junto com o pedido, ele passou os dados que influenciam no jogo.

Raças:

  • Humanos: Vitalidade + força + inteligência (pode ser Guerreiro, Algoz, Mago ou Sacerdote)
  • Elfos: Agilidade + destreza + sabedoria (pode ser Guerreiro, Sacerdote ou Bardo)
  • Anões: Inteligência + agilidade + força (pode ser Caçador)
  • Sísmicos: força + vitalidade + destreza (pode ser Protetor)
  • Vampiros: Inteligência + agilidade + Sabedoria (pode ser Algoz, Mago ou Mártir).

Classes:

  • Guerreiro = força + vitalidade
  • Algoz = Agilidade + destreza
  • Mago = Inteligência + destreza
  • Sacerdote = Inteligência + sabedoria
  • Bardo = Inteligência + agilidade
  • Caçador = força + destreza
  • Protetor = vitalidade + sabedoria
  • Mártir = força + agilidade

Signos:

    • Virgem = 17/09- 31/10 exp. e drop aumentados entre 00:00 - 02:00
    • Libra = 01/11- 23/11 exp. e drop aumentados entre 02:00 - 04:00
    • Escorpião = 24/11- 29/11 exp. e drop aumentados entre 04:00 - 06:00
  • Serpentário = 30/11- 18/12 exp. e drop aumentados durante todo dia, porém não tanto quanto os outros durante as horas de bônus.
    • Sagitário = 19/12- 19/01 exp. e drop aumentados entre 06:00 - 08:00
    • Capricórnio = 20/01- 16/02 exp. e drop aumentados entre 08:00 - 10:00
    • Aquário = 17/02- 11/03 exp. e drop aumentados entre 10:00 - 12:00
    • Peixes = 12/03 - 18/04 exp. e drop aumentados entre 12:00 - 14:00
    • Áries = 19/04 - 14/05 exp. e drop aumentados entre 14:00 - 16:00
    • Touro = 15/05 - 21/06 exp. e drop aumentados entre 16:00 - 18:00
    • Gêmeos = 22/06 - 20/07 exp. e drop aumentados em 2x entre 18:00 - 20:00
    • Câncer = 21/07 - 10/08 exp. e drop aumentados em 2x entre 20:00 - 22:00
    • Leão = 11/08 - 16/09 exp. e drop aumentados em 2x entre 22:00 - 00:00

Obs.: Já que a terra demora 365 dias e 6 horas para completar o movimento de translação, a transição entre os signos ocorre exatamente entre um dia e outro quando o ano é múltiplo de 4, as 6h quando ano = 4k +1, as 12h quando ano = 4k +2 e as 18h quando ano = 4k +3.

Obs.2: A entrada sempre será dada no formato certo (String raça + espaço + String classe + espaço + String com a data + espaço + String com a hora ) porém poderá ter algumas combinações inválidas que devem ser verificadas, como combinação de raça + classe, também verificar se a data existe e se a hora está entre 00:00 e 23:59 como nos exemplos a seguir.

Humano Guerreiro 22/06/2000 01:50 //entrada usuário

Atributos: força + vitalidade + inteligência, você é de gêmeos a melhor hora para você jogar é entre 18:00 e 20:00. // saída do programa

Elfo Sacerdote 19/12/1999 15:15 //entrada usuário

Atributos: Sabedoria, Agilidade, Destreza, Inteligência, você é de Serpentário, você possuí bônus de 

exp. e drop durante todo o dia, porém não tanto quanto os outros durante as horas de bônus //saída do programa

Sísmico Mago 20/20/1990 21:34 //entrada usuário

Combinação invalida raça + classe //saída

Anão Protetor 29/02/2001 23:59 //entrada do usuário

data invalida //saída

Questão Desafio - Haja 1's

Um aluno de ciência da computação tinha uma fixação pelo algarismo 1. Depois de muitos estudos e testes, ele criou um pequeno problema matemático que envolvia números formados exclusivamente por 1's.

"Seja N um número inteiro positivo menor igual à 10000 e não divisível por 2 ou 5, existe um múltiplo de n que é uma sequência de 1's."

Seu trabalho agora é criar um programa que ao receber um N, calcule e imprima na tela o número de 1's pelo qual esse múltiplo peculiar é formado.

Digite o N:
3                            //Entrada do usuário
O número de dígitos é: 3     //Saída do programa (Neste caso, o múltiplo é 111)