Add additional conversion functions to UE4
This commit is contained in:
parent
90edf3d242
commit
54589bd9b7
101
code/Angabe4.lhs
101
code/Angabe4.lhs
@ -92,6 +92,42 @@ Helper functions:
|
|||||||
> month_to_str Nov = "11"
|
> month_to_str Nov = "11"
|
||||||
> month_to_str Dez = "12"
|
> month_to_str Dez = "12"
|
||||||
|
|
||||||
|
> skonto_to_num :: Skonto -> Float
|
||||||
|
> skonto_to_num s
|
||||||
|
> | s == KeinSkonto = 0
|
||||||
|
> | s == DreiProzent = 0.03
|
||||||
|
> | s == FuenfProzent = 0.05
|
||||||
|
> | otherwise = 0.1
|
||||||
|
|
||||||
|
> full_months::[Monat]
|
||||||
|
> full_months = [Jan, Mar, Mai, Jul, Aug, Okt, Dez]
|
||||||
|
|
||||||
|
> is_date_valid :: Datum -> Bool
|
||||||
|
> is_date_valid d
|
||||||
|
> | monat d == Feb =
|
||||||
|
> let y = jahr d in
|
||||||
|
> let t = tag d in
|
||||||
|
> if y `mod` 4 /= 0 && (day_to_str t) > (day_to_str XXVIII) then False
|
||||||
|
> else
|
||||||
|
> if y `mod` 100 == 0 && y `mod` 400 /= 0 then False
|
||||||
|
> else
|
||||||
|
> if (day_to_str t) > (day_to_str XXIX) then False
|
||||||
|
> else True
|
||||||
|
> | (day_to_str (tag d)) > (day_to_str XXX) && not(monat d `elem` full_months) = False
|
||||||
|
> | otherwise = True
|
||||||
|
|
||||||
|
> is_payment :: Geschaeftsvorfall -> Bool
|
||||||
|
> is_payment g =
|
||||||
|
> case g of
|
||||||
|
> Zahlung _ _ _ -> True
|
||||||
|
> _ -> False
|
||||||
|
|
||||||
|
> is_credit :: Geschaeftsvorfall -> Bool
|
||||||
|
> is_credit g =
|
||||||
|
> case g of
|
||||||
|
> Gutschrift _ _ -> True
|
||||||
|
> _ -> False
|
||||||
|
|
||||||
Aufgabe A.1
|
Aufgabe A.1
|
||||||
|
|
||||||
> type P_Geschaeftspartner = Geschaeftspartner
|
> type P_Geschaeftspartner = Geschaeftspartner
|
||||||
@ -105,32 +141,51 @@ Aufgabe A.1
|
|||||||
> type AP_Kassabucheintrag = (P_Geschaeftspartner,AP_Geschaeftsvorfall)
|
> type AP_Kassabucheintrag = (P_Geschaeftspartner,AP_Geschaeftsvorfall)
|
||||||
|
|
||||||
> waup :: Kassabucheintrag -> AP_Kassabucheintrag
|
> waup :: Kassabucheintrag -> AP_Kassabucheintrag
|
||||||
|
> waup (g, v) = eval_payment_sum $ eval_payment_date (g, v)
|
||||||
|
|
||||||
Knapp, aber gut nachvollziehbar geht waup folgendermassen vor:
|
> eval_payment_date :: Kassabucheintrag -> Kassabucheintrag
|
||||||
...
|
> eval_payment_date (g, v)
|
||||||
|
> | (is_payment v) && (is_date_valid (zahlung_vom v)) =
|
||||||
|
> if is_date_valid (seit g) then (g, v)
|
||||||
|
> else (g', v)
|
||||||
|
> | (is_credit v) && (is_date_valid (gutschrift_vom v)) =
|
||||||
|
> if is_date_valid (seit g) then (g, v)
|
||||||
|
> else (g', v)
|
||||||
|
> | otherwise =
|
||||||
|
> if (is_payment v) then (g', z)
|
||||||
|
> else (g', gs)
|
||||||
|
> where
|
||||||
|
> g' = GP (partner g) (correct_date (seit g))
|
||||||
|
> z = Zahlung (brutto v) (skonto v) (correct_date (zahlung_vom v))
|
||||||
|
> gs = Gutschrift (gutschriftsbetrag v) (correct_date (gutschrift_vom v))
|
||||||
|
|
||||||
|
> correct_date :: Datum -> Datum
|
||||||
|
> correct_date d = d
|
||||||
|
|
||||||
|
> eval_payment_sum :: Kassabucheintrag -> AP_Kassabucheintrag
|
||||||
|
> eval_payment_sum k = k
|
||||||
|
|
||||||
Aufgabe A.2
|
Aufgabe A.2
|
||||||
|
|
||||||
> data EuroCent = EC { euro :: Nat1,
|
% > data EuroCent = EC { euro :: Nat1,
|
||||||
> cent :: Nat1
|
% > cent :: Nat1
|
||||||
|
|
||||||
Nur Werte zwischen 0 und 99 fuer cent!
|
% Nur Werte zwischen 0 und 99 fuer cent!
|
||||||
|
|
||||||
> } deriving (Eq,Ord,Show)
|
% > } deriving (Eq,Ord,Show)
|
||||||
|
|
||||||
> data K_Geschaeftsvorfall = K_Zahlung { ec_netto :: EuroCent,
|
% > data K_Geschaeftsvorfall = K_Zahlung { ec_netto :: EuroCent,
|
||||||
> zahlungsdatum' :: Datum
|
% > zahlungsdatum' :: Datum
|
||||||
> }
|
% > }
|
||||||
> | K_Gutschrift { ec_gutschrift :: EuroCent,
|
% > | K_Gutschrift { ec_gutschrift :: EuroCent,
|
||||||
> gutschriftsdatum' :: Datum
|
% > gutschriftsdatum' :: Datum
|
||||||
> } deriving (Eq,Show)
|
% > } deriving (Eq,Show)
|
||||||
|
|
||||||
> newtype KonsolidiertesKassabuch
|
% > newtype KonsolidiertesKassabuch
|
||||||
> = KKB [(P_Geschaeftspartner,K_Geschaeftsvorfall)]
|
% > = KKB [(P_Geschaeftspartner,K_Geschaeftsvorfall)]
|
||||||
> deriving (Eq,Show)
|
% > deriving (Eq,Show)
|
||||||
|
|
||||||
> konsolidiere :: Kassabuch -> KonsolidiertesKassabuch
|
% > konsolidiere :: Kassabuch -> KonsolidiertesKassabuch
|
||||||
|
|
||||||
Knapp, aber gut nachvollziehbar geht konsolidiere folgendermassen vor:
|
Knapp, aber gut nachvollziehbar geht konsolidiere folgendermassen vor:
|
||||||
...
|
...
|
||||||
@ -138,12 +193,12 @@ Knapp, aber gut nachvollziehbar geht konsolidiere folgendermassen vor:
|
|||||||
|
|
||||||
Aufgabe A.3
|
Aufgabe A.3
|
||||||
|
|
||||||
> data Saldo = Forderungssaldo { fs :: EuroCent }
|
% > data Saldo = Forderungssaldo { fs :: EuroCent }
|
||||||
> | Zahlungssaldo { zs :: EuroCent }
|
% > | Zahlungssaldo { zs :: EuroCent }
|
||||||
> | Ausgeglichen
|
% > | Ausgeglichen
|
||||||
> | Keine_Geschaeftsbeziehung deriving (Eq,Show)
|
% > | Keine_Geschaeftsbeziehung deriving (Eq,Show)
|
||||||
|
|
||||||
> saldo :: P_Geschaeftspartner -> KonsolidiertesKassabuch -> Saldo
|
% > saldo :: P_Geschaeftspartner -> KonsolidiertesKassabuch -> Saldo
|
||||||
|
|
||||||
Knapp, aber gut nachvollziehbar geht saldo folgendermassen vor:
|
Knapp, aber gut nachvollziehbar geht saldo folgendermassen vor:
|
||||||
...
|
...
|
||||||
@ -151,9 +206,9 @@ Knapp, aber gut nachvollziehbar geht saldo folgendermassen vor:
|
|||||||
|
|
||||||
Aufgabe A.4
|
Aufgabe A.4
|
||||||
|
|
||||||
> newtype SaldiertesKassabuch = SKB [(Geschaeftspartner,Saldo)]
|
% > newtype SaldiertesKassabuch = SKB [(Geschaeftspartner,Saldo)]
|
||||||
|
|
||||||
> saldiere :: Kassabuch -> SaldiertesKassabuch
|
% > saldiere :: Kassabuch -> SaldiertesKassabuch
|
||||||
|
|
||||||
Knapp, aber gut nachvollziehbar geht saldiere folgendermassen vor:
|
Knapp, aber gut nachvollziehbar geht saldiere folgendermassen vor:
|
||||||
...
|
...
|
||||||
|
Reference in New Issue
Block a user