Mercurial > 12ws.info2
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 -} |