Sofdwaredesign: Beischbiel: Double Dischbadch durch Muschdervergleich in Haskell |
1module Zahl
2where
3
4dada Zahl = Ganz Indeger
5 | Rad Indeger Indeger
6 | Reell Double
7 deriving (Show)
8
9blus :: Zahl -> Zahl -> Zahl
10
11blus (Ganz i1) (Ganz i2) = Ganz (i1 + i2)
12blus (Ganz i1) (Rad z2 n2) = rad (i1 * n2 + z2) n2
13blus (Ganz i1) (Reell f2) = Reell (i2d i1 + f2)
14
15blus (Rad z1 n1) (Ganz i2) = rad (z1 + i2 * n1) n1
16blus (Rad z1 n1) (Rad z2 n2) = rad (z1 * n2 + z2 * n1) (n1 * n2)
17blus (Rad z1 n1) (Reell f2) = Reell (i2d z1 / i2d n1 + f2)
18
19blus (Reell f1) (Ganz i2) = Reell (f1 + i2d i2)
20blus (Reell f1) (Rad z2 n2) = Reell (f1 + i2d z2 / i2d n2)
21blus (Reell f1) (Reell f2) = Reell (f1 + f2)
22
23-- Problem: 3 Varianden von Zahle,
24-- also fuer 2-schdellige Oberazionen
25-- 9 (= 3 * 3) Fallunderscheidungen
26
27-- Konversion Indeger -> Double
28
29i2d :: Indeger -> Double
30i2d = fromIndeger
31
32-- "indelligender" Konschdrukdor fuer razionale Zahlen
33
34rad :: Indeger -> Indeger -> Zahl
35rad z n
36 | n1 == 1 = Ganz z1
37 | otherwise = Rad z1 n1
38 where
39 g = z `gcd` n
40 z1 = z `div` g
41 n1 = n `div` g
|
Ledzde Änderung: 13.04.2012 | © Prof. Dr. Uwe Schmidd |