Rafaela Soares Posted October 2, 2016 at 03:43 PM Report #599315 Posted October 2, 2016 at 03:43 PM (edited) Oi 🙂 O exercÃcio, é o seguinte:  Adicionar um determinado número de minutos a uma dada hora.´ Então, no sublime, coloquei: int_horas :: Hora -> Bool int_horas (h,m)= if (h<= 23) && (h>=0) && (m<=59) && (m>=0) then True else False soma_min:: Hora -> Int -> Hora soma_min (a,b) c = if (int_horas (a,b)== True) then (a, b+c) Mas no terminal, aparece isto e não percebo porquê: s.hs:28:62: parse error (possibly incorrect indentation or mismatched brackets) Failed, modules loaded: none. Prelude> Obrigada Edited October 2, 2016 at 03:55 PM by pwseo blocos de código, etc.
pwseo Posted October 2, 2016 at 03:57 PM Report #599318 Posted October 2, 2016 at 03:57 PM Qual é a linha 28 do teu código? Outra questão: sabias que em Haskell não podes ter if .. then sem else?
Rafaela Soares Posted October 2, 2016 at 04:10 PM Author Report #599323 Posted October 2, 2016 at 04:10 PM (edited) 1 hora atrás, pwseo disse: Qual é a linha 28 do teu código? Outra questão: sabias que em Haskell não podes ter if .. then sem else? Socorrão, esqueci-me. Mas mesmo assim, está-me a fazer alguma confusão porque se forem adicionados, por exemplo, 70min, a hora também vai mudar. Vou tentar adicionar a conversão de minutos para horas primeiro.  Acabei por tentar resolver o problema assim: soma_min:: Hora -> Int -> Hora soma_min (a,b) c = if b+c<=59 then (a, b+c) else if b+c==60 && a<=23 then (a+1,0) else if b+c>60 then (a+ div c 60, b+ mod c 60) else (0,0) Só que quando tento soma_min (10,40) 30 dá (10,70) 😞 Edited October 2, 2016 at 05:04 PM by pwseo mais uma vez, syntax highlight.
pwseo Posted October 2, 2016 at 05:22 PM Report #599325 Posted October 2, 2016 at 05:22 PM @Rafaela Soares, Este é na realidade um problema mais do domÃnio da matemática do que da programação. A chave aqui é perceber que há duas operações matemáticas que te simplificam muito a vida: quot e rem (neste caso equivalentes a div e mod). Assim deixa de ser necessário andar com condições para tentar perceber se é ou não necessário aumentar a hora ou não. Por exemplo, imagina que eu quero adicionar 30 minutos a (10,40) e quero evitar obter o resultado de (10,70): Prelude> let hora = (10, 40) Prelude> snd hora + 30 70 Prelude> let qr = quotRem 70 60 Prelude> qr (1,10) Prelude> (fst hora + fst qr, snd qr) (11,10) Nota: a função quotRem é um atalho para a aplicação separada de quot e rem; eu poderia ter feito simplesmente qr = (quot 70 60, rem 70 60). Conseguiste perceber o raciocÃnio?
Rafaela Soares Posted October 3, 2016 at 12:35 PM Author Report #599331 Posted October 3, 2016 at 12:35 PM Em 02/10/2016 Ã s 18:22, pwseo disse: Conseguiste perceber o raciocÃnio? Acho que sim. Quando chegar a casa, vou ver melhor. Obrigadaaaa
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now