Mercurial > 12ws.info2
view exercises/src/Exercise_1.hs @ 1:e532198d58f4
week 1 tutorial
author | Markus Kaiser <markus.kaiser@in.tum.de> |
---|---|
date | Fri, 19 Oct 2012 19:48:27 +0200 |
parents | 9bd0c4f30c49 |
children | e02058a1afbd |
line wrap: on
line source
module Exercise_1 where import Test.QuickCheck {---------------------------------------------------------------------} {- G1.1 -} threeDifferent :: Integer -> Integer -> Integer -> Bool threeDifferent x y z = (x /= y) && (y /= z) && (z /= x) fourEqual :: Integer -> Integer -> Integer -> Integer -> Bool 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 0 = 1 fac n | n > 0 = n * fac (n-1) sum_ten :: Integer -> Integer 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 2*n max_g :: Integer -> Integer 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 sum_max_sq x y z = undefined {-TTEW-} {- Diese Zeile nicht enfernen! -} {---------------------------------------------------------------------} {- Aufgabe H1.2 -} {- Teil 1 -} f :: Integer -> Integer f n = undefined {- Teil 2 -} {- - Schreiben Sie ihre Lösungen in diesen Kommentar -} {- Teil 3 -} f' :: Integer -> Integer f' n = undefined {- Quickcheck test -} {---------------------------------------------------------------------} {- Aufgabe H1.3 -} {- Teil 1 -} is_square' :: Integer -> Integer -> Bool is_square' n m = undefined {- Teil 2 -} is_square :: Integer -> Bool is_square n = undefined