Jump to content
skp9

[Resolvido] Duvida '\n'

Recommended Posts

skp9

Boa noite,

tenho uma dúvida em relação a um exercicío em Haskell que gostava que me ajudassem a perceber porque não está a resultar.

A pergunta é:

Defina Extracto como instância da classe Show, de forma a que a apresentação do

extracto seja por ordem de data do movimento com o seguinte, e com o seguinte

aspecto:

Saldo anterior: 300
------------------------------------------------------
Data          Descricao   Credito          Debito
-------------------------------------------------------
2010/4/5   DEPOSITO 2000
2010/8/10 COMPRA                         37,5
2010/9/1   LEV                                 60
2011/1/7 JUROS         100
2011/1/22 ANUIDADE                      8
------------------------------------------------------
Saldo actual: 2294,5

E a minha solução foi a seguinte:

import Data.Char
data Movimento = Credito Float | Debito Float
data Data = D Int Int Int -- Dia Mes Ano
data Extrato = Ext Float [(Data,String,Movimento)]

--EXEMPLO PARA TESTES
ext1 :: Extrato
ext1 = Ext 300 [(D 5 4 2010,"DEPOSITO",Credito 2000),(D 10 8 2010,"COMPRA",Debito 37.5),(D 1 9 2010,"LEV",Debito 60),(D 7 1 2011,"JUROS",Credito 100),(D 22 1 2011,"ANUIDADE",Debito 8)]

creDeb :: Extrato -> (Float,Float)
creDeb (Ext x []) = (0,0)
creDeb (Ext x ((_,_, Debito y):t)) = let (cred,deb) = creDeb (Ext x t) in (cred, deb+y)
creDeb (Ext x ((_,_, Credito y):t)) = let (cred,deb) = creDeb (Ext x t) in (cred+y, deb)

saldo :: Extrato -> Float
saldo extrato@(Ext saldoInicial movimentos) = let (credito,debito) = creDeb extrato
                                            in saldoInicial - (credito+debito)
instance Show Extrato where
show (Ext st list) = "Saldo anterior: " ++ (show st) ++ "\n----------------------------------------------\nData\t\tDescricao\tCredito\tDebito\n----------------------------------------------\n" ++ (concat (map auxMovimento list)) ++ "----------------------------------------------\nSaldo actual: " ++ (show ( saldo (Ext st list))) where
auxMovimento (dt,strg,Credito x) = if (length strg) < 7 then (show dt) ++ "\t" ++ strg ++ "\t\t" ++ (show x) ++ "\n" else (show dt) ++ "\t" ++ strg ++ "\t" ++ (show x) ++ "\n"
auxMovimento (dt,strg,Debito x) = if (length strg) < 7 then (show dt) ++ "\t" ++ strg ++ "\t\t\t" ++ (show x) ++ "\n" else (show dt) ++ "\t" ++ strg ++ "\t\t" ++ (show x) ++ "\n"

No entanto, ao compilar e executar no terminal, o que aparece é o seguinte:

"Saldo anterior: 300.0\n----------------------------------------------\nData\t\tDescricao\tCredito\tDebito\n----------------------------------------------\n2010/4/5\tDEPOSITO\t2000.0\n2010/8/10\tCOMPRA\t\t\t37.5\n2010/9/1\tLEV\t\t\t60.0\n2011/1/7\tJUROS\t\t100.0\n2011/1/22\tANUIDADE\t\t8.0\n----------------------------------------------\nSaldo actual: -1905.5"

Ou seja, não me está a reconhecer os '\n' e os '\t'. É necessário instalar alguma pacote para funcionar como quero?

Edited by thoga31
Tags code + GeSHi

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.