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
e retorna uma lista com dois componentes inteiros relativos a hora e minuto de
, 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]
> 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 =
e minutos =
.
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
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]
minuto2horario m = let (h, mi) = divMod m 60 in [h, mi]