# HG changeset patch # User Markus Kaiser # Date 1350668907 -7200 # Node ID e532198d58f4c4dde035b10a36640a48b1bce2d9 # Parent 9bd0c4f30c498234a88e9c961f783e4b7beacaa5 week 1 tutorial diff -r 9bd0c4f30c49 -r e532198d58f4 exercises/src/Exercise_1.hs --- a/exercises/src/Exercise_1.hs Wed Oct 17 14:47:38 2012 +0200 +++ b/exercises/src/Exercise_1.hs Fri Oct 19 19:48:27 2012 +0200 @@ -4,31 +4,114 @@ {---------------------------------------------------------------------} {- G1.1 -} threeDifferent :: Integer -> Integer -> Integer -> Bool -threeDifferent x y z = undefined +threeDifferent x y z = (x /= y) && (y /= z) && (z /= x) + fourEqual :: Integer -> Integer -> Integer -> Integer -> Bool -fourEqual w x y z = undefined +fourEqual w x y z = (w == x) && (x == y) && (y == z) + + +{- + threeDifferent (2+3) 5 (11 ` div ` 2) + ((2+3) /= 5) && (5 /= (11 ` div ` 2)) && ((11 ` div ` 2) /= (2+3)) + (5 /= 5) && ((5 /= (11 ` div ` 2)) && ((11 ` div ` 2) /= (2+3))) + False && ((5 /= (11 ` div ` 2)) && ((11 ` div ` 2) /= (2+3))) + False + + Schritte von oben nach unten: + threeDifferent ersetzen + Linke Seite des ersten && + 5 /= 5 auswerten + False && x = False (&& ist rechtsassoizativ) + + + --- + + + fourEqual (2+3) 5 (11 ` div ` 2) (21 ` mod ` 11) + ((2+3) == 5) && (5 == (11 ` div ` 2)) && ((11 ` div ` 2) == (21 ` mod ` 11)) + (5 == 5) && (5 == (11 ` div ` 2)) && ((11 ` div ` 2) == (21 ` mod ` 11)) + True && (5 == (11 ` div ` 2)) && ((11 ` div ` 2) == (21 ` mod ` 11)) + (5 == (11 ` div ` 2)) && ((11 ` div ` 2) == (21 ` mod ` 11)) + (5 == 5) && ((11 ` div ` 2) == (21 ` mod ` 11)) + True && ((11 ` div ` 2) == (21 ` mod ` 11)) + ((11 ` div ` 2) == (21 ` mod ` 11)) + (5 == (21 ` mod ` 11)) + (5 == 10) + False + + Schritte von oben nach unten: + fourEqual ersetzen + Linke Seite des ersten && + 5 == 5 auswerten + True && x = x + Linke Seite des zweiten && (div ist Ganzzahldivision) + 5 == 5 auswerten + True && x = x + Links nach rechts + 5 == 10 auswerten +-} {---------------------------------------------------------------------} {- G1.2 -} fac :: Integer -> Integer -fac n = undefined +fac 0 = 1 +fac n | n > 0 = n * fac (n-1) + sum_ten :: Integer -> Integer -sum_ten n = undefined +sum_ten n = sum_ten' n 9 + where + sum_ten' :: Integer -> Integer -> Integer + sum_ten' n 0 = n + sum_ten' n x = n + x + sum_ten' n (x-1) + + +sum_ten_gauss :: Integer -> Integer +sum_ten_gauss n = 10 * n + 45 {---------------------------------------------------------------------} {- G1.3 -} +{- + g ist leicht veraendert, um Mehrdeutigkeiten zu vermeiden. + Original: + g :: Integer -> Integer + g n = if n < 10 then n*n else n +-} + g :: Integer -> Integer -g n = if n < 10 then n*n else n +g n = if n < 10 then n*n else 2*n + max_g :: Integer -> Integer -max_g n = undefined +max_g n + | n <= 0 = 0 + | otherwise = + if (g x < g n) then n else x + where + x = max_g (n-1) + +max_g' :: Integer -> Integer +max_g' n + | n < 0 = 0 + | n <= 9 = n + -- Siehe Aenderung von g + | n < 41 = 9 + | otherwise = n + + +prop_max_g :: Integer -> Bool +prop_max_g n = + max_g n == max_g' n + + + +{---------------------------------------------------------------------} {- Aufgabe H1.1 -} {-WETT-} {- Diese Zeile nicht entfernen -} sum_max_sq :: Integer -> Integer -> Integer -> Integer @@ -38,7 +121,6 @@ - {---------------------------------------------------------------------} {- Aufgabe H1.2 -}