Advertisement
Guest User

blatt 09 fertig

a guest
Dec 13th, 2010
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Haskell Übung 9
  2. Tatjana Harder, Christine Krömke, Peter Obert
  3.  
  4.  
  5.  
  6. Aufgabe 9.2
  7.  
  8. derive gibt die Ableitung eines Polynoms aus, das als Liste ganzer
  9. Zahlen in der Form 1+7x+5x^2+2x^3 -> [1,7,5,2] repräsentiert wird
  10.  
  11. >derive :: [Int] -> [Int]
  12. >derive [] = []
  13. >derive (as)
  14. >   |(length as>1) = derive (init as) ++ [(last as)*((length as)-1)]
  15. >   | otherwise =[]
  16.  
  17. derive' bildet die n-te Ableitung des Polynoms
  18.  
  19. >derive' :: Int -> [Int] -> [Int]
  20. >derive' n (as)
  21. >   | (n==0) = as
  22. >   | (length as == 1) = [0]
  23. >   | otherwise = derive' (n-1) (derive as)
  24.  
  25.  
  26.  
  27. Aufgabe 9.3
  28.  
  29. mysqrt berechnet die Wurzel einer (positiven) Zahl nach dem Heron-Verfahren,
  30. wobei x die Zahl und r der Startwert (z.B. 1) ist
  31.  
  32. >mysqrt :: Float -> Float -> Float
  33. >mysqrt x r
  34. >   |(x<0) || (r<0) = error "Negative Eingabe"
  35. >   |(abs(y-r)<(0.00001)) = y
  36. >   |otherwise = mysqrt x y
  37. >   where   y=0.5*(r+x/r)
  38.  
  39.  
  40. xs ist die Liste der Differenzen der haskelleigenen sqrt Funktion und mysqrt
  41.  
  42. xs = [abs((sqrt x)-(mysqrt x 1)) | x<-[2341234,35845345,4345835435,596656456,7772227272]]
  43. xs = [0.0,0.0,0.0,1.953125e-3,0.0]
  44.  
  45. Schlussfolgerung: das Heron-Verfahren bzw. mysqrt berechnet relativ präzise die Wurzel,
  46. wobei die Präzision vom Wert 0.00001 abhängt und somit eingestellt werden kann
  47.  
  48.  
  49.  
  50. Aufgabe 9.4
  51.  
  52. der Datentyp Binary ist eine Liste aus Bits, die so aussehen kann:
  53. [Eins,Null,Eins,Null,Null,Eins,Eins,Eins,Null,Null,Eins]
  54. sie repräsentiert das Binärsystem und entspricht "10100111001"
  55.  
  56. >type Binary = [Bit]
  57. >data Bit = Null | Eins deriving (Eq, Show)
  58.  
  59. int2bin wandelt einen Int wert in das Binärsystem, repräsentiert als Binary
  60.  
  61. >int2bin :: Int -> Binary
  62. >int2bin a
  63. >   |(b>0) && (c==0) = int2bin b ++ [Null]
  64. >   |(b>0) && (c==1) = int2bin b ++ [Eins]
  65. >   |(b==0) && (c==0) = [Null]
  66. >   |(b==0) && (c==1) = [Eins]
  67. >   where   b = div a 2
  68. >       c = mod a 2
  69.  
  70. bin2int macht das Gegenteil von int2bin
  71.  
  72. >bin2int :: Binary -> Int
  73. >bin2int [] = 0
  74. >bin2int as
  75. >   |(as!!0==Eins)=2^(length as-1) + bin2int (tail as)
  76. >   |otherwise = bin2int (tail as)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement