Questão 3: Desenvolva uma função chamada minuto2horario que realiza a operação inversa do exercício anterior, isto é, a função recebe um inteiro representando os minutos relativos ao horário H e retorna uma lista com dois componentes inteiros relativos a hora e minuto de H, conforme os exemplos:
> minuto2horario 200 -- calculando o horario relativo ao minuto 200
[3, 20]
> minuto2horario 1070 -- calculando o horario relativo ao minuto 1070
[17, 50]

Passo 1

O enunciado pede uma função minuto2horario que receba um inteiro m (número de minutos) e retorne uma lista com duas componentes inteiras: hora e minuto correspondentes a esse total de minutos. O conteúdo que vamos usar aqui é divisão inteira e resto (módulo).

Passo 2

Para converter um total de minutos m em horas e minutos, a gente separa em duas partes: a parte inteira da divisão por 60 dá as horas, e o resto dessa divisão dá os minutos. Em fórmulas: horas = lfloor m/60rfloor e minutos = m bmod 60.
Em Haskell, a gente pode usar as funções div e mod ou a função divMod, que devolve uma tupla (q,r) onde q = m div 60 e r = m mod 60. É só desempacotar essa tupla para obter hora e minuto.

Passo 3

Assim, a definição em Haskell fica elegante usando divMod:
minuto2horario :: Int -> [Int]
minuto2horario m = let (h, mi) = divMod m 60 in [h, mi]

Resposta

minuto2horario :: Int -> [Int]
minuto2horario m = let (h, mi) = divMod m 60 in [h, mi]

Exercícios relacionados