comparison 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
comparison
equal deleted inserted replaced
0:9bd0c4f30c49 1:e532198d58f4
2 import Test.QuickCheck 2 import Test.QuickCheck
3 3
4 {---------------------------------------------------------------------} 4 {---------------------------------------------------------------------}
5 {- G1.1 -} 5 {- G1.1 -}
6 threeDifferent :: Integer -> Integer -> Integer -> Bool 6 threeDifferent :: Integer -> Integer -> Integer -> Bool
7 threeDifferent x y z = undefined 7 threeDifferent x y z = (x /= y) && (y /= z) && (z /= x)
8
8 9
9 fourEqual :: Integer -> Integer -> Integer -> Integer -> Bool 10 fourEqual :: Integer -> Integer -> Integer -> Integer -> Bool
10 fourEqual w x y z = undefined 11 fourEqual w x y z = (w == x) && (x == y) && (y == z)
12
13
14 {-
15 threeDifferent (2+3) 5 (11 ` div ` 2)
16 ((2+3) /= 5) && (5 /= (11 ` div ` 2)) && ((11 ` div ` 2) /= (2+3))
17 (5 /= 5) && ((5 /= (11 ` div ` 2)) && ((11 ` div ` 2) /= (2+3)))
18 False && ((5 /= (11 ` div ` 2)) && ((11 ` div ` 2) /= (2+3)))
19 False
20
21 Schritte von oben nach unten:
22 threeDifferent ersetzen
23 Linke Seite des ersten &&
24 5 /= 5 auswerten
25 False && x = False (&& ist rechtsassoizativ)
26
27
28 ---
29
30
31 fourEqual (2+3) 5 (11 ` div ` 2) (21 ` mod ` 11)
32 ((2+3) == 5) && (5 == (11 ` div ` 2)) && ((11 ` div ` 2) == (21 ` mod ` 11))
33 (5 == 5) && (5 == (11 ` div ` 2)) && ((11 ` div ` 2) == (21 ` mod ` 11))
34 True && (5 == (11 ` div ` 2)) && ((11 ` div ` 2) == (21 ` mod ` 11))
35 (5 == (11 ` div ` 2)) && ((11 ` div ` 2) == (21 ` mod ` 11))
36 (5 == 5) && ((11 ` div ` 2) == (21 ` mod ` 11))
37 True && ((11 ` div ` 2) == (21 ` mod ` 11))
38 ((11 ` div ` 2) == (21 ` mod ` 11))
39 (5 == (21 ` mod ` 11))
40 (5 == 10)
41 False
42
43 Schritte von oben nach unten:
44 fourEqual ersetzen
45 Linke Seite des ersten &&
46 5 == 5 auswerten
47 True && x = x
48 Linke Seite des zweiten && (div ist Ganzzahldivision)
49 5 == 5 auswerten
50 True && x = x
51 Links nach rechts
52 5 == 10 auswerten
53 -}
11 54
12 55
13 56
14 {---------------------------------------------------------------------} 57 {---------------------------------------------------------------------}
15 {- G1.2 -} 58 {- G1.2 -}
16 fac :: Integer -> Integer 59 fac :: Integer -> Integer
17 fac n = undefined 60 fac 0 = 1
61 fac n | n > 0 = n * fac (n-1)
62
18 63
19 sum_ten :: Integer -> Integer 64 sum_ten :: Integer -> Integer
20 sum_ten n = undefined 65 sum_ten n = sum_ten' n 9
66 where
67 sum_ten' :: Integer -> Integer -> Integer
68 sum_ten' n 0 = n
69 sum_ten' n x = n + x + sum_ten' n (x-1)
70
71
72 sum_ten_gauss :: Integer -> Integer
73 sum_ten_gauss n = 10 * n + 45
21 74
22 75
23 76
24 {---------------------------------------------------------------------} 77 {---------------------------------------------------------------------}
25 {- G1.3 -} 78 {- G1.3 -}
79 {-
80 g ist leicht veraendert, um Mehrdeutigkeiten zu vermeiden.
81 Original:
82 g :: Integer -> Integer
83 g n = if n < 10 then n*n else n
84 -}
85
26 g :: Integer -> Integer 86 g :: Integer -> Integer
27 g n = if n < 10 then n*n else n 87 g n = if n < 10 then n*n else 2*n
88
28 89
29 max_g :: Integer -> Integer 90 max_g :: Integer -> Integer
30 max_g n = undefined 91 max_g n
92 | n <= 0 = 0
93 | otherwise =
94 if (g x < g n) then n else x
95 where
96 x = max_g (n-1)
31 97
98
99 max_g' :: Integer -> Integer
100 max_g' n
101 | n < 0 = 0
102 | n <= 9 = n
103 -- Siehe Aenderung von g
104 | n < 41 = 9
105 | otherwise = n
106
107
108 prop_max_g :: Integer -> Bool
109 prop_max_g n =
110 max_g n == max_g' n
111
112
113
114 {---------------------------------------------------------------------}
32 {- Aufgabe H1.1 -} 115 {- Aufgabe H1.1 -}
33 {-WETT-} {- Diese Zeile nicht entfernen -} 116 {-WETT-} {- Diese Zeile nicht entfernen -}
34 sum_max_sq :: Integer -> Integer -> Integer -> Integer 117 sum_max_sq :: Integer -> Integer -> Integer -> Integer
35 sum_max_sq x y z = undefined 118 sum_max_sq x y z = undefined
36 119
37 {-TTEW-} {- Diese Zeile nicht enfernen! -} 120 {-TTEW-} {- Diese Zeile nicht enfernen! -}
38
39 121
40 122
41 123
42 {---------------------------------------------------------------------} 124 {---------------------------------------------------------------------}
43 {- Aufgabe H1.2 -} 125 {- Aufgabe H1.2 -}