Advertisement
mikolajmki

haskell_wszystkie_zadania

Jun 10th, 2022 (edited)
409
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. =================LAB5=================
  2.  
  3. Zdefiniuj funkcje obliczające kwadrat podanego parametru. Funkcje powinny zwracać taki
  4. sam typ jak typ wejściowy. Po zapisaniu i załadowaniu modułu sprawdź zdefiniowane
  5. funkcje.
  6.  
  7. kwadratI :: Int -> Int
  8. kwadratI x = x * x
  9.  
  10. kwadratF :: Float -> Float
  11. kwadratF x = x * x
  12.  
  13. kwadratN :: Num a => a -> a
  14. kwadratN x = x * x
  15.  
  16. kwadrat x = x * x
  17.  
  18. =================LAB6=================
  19.  
  20. negacja :: Int -> Int
  21. negacja x = -x
  22.  
  23. Napisz funkcję obliczającą deltę oraz pierwiastek dla równania kwadratowego postaci
  24. y=ax^2+bx+c. Użyj dwóch funkcji delta i pdelta
  25.  
  26. pier :: Int -> Float
  27. pier x = if x > 0 then sqrt (fromIntegral x) else error "liczba ujemna"
  28. -----------
  29. delta :: Double -> Double -> Double -> Double
  30. delta a b c = b * b - 4 * a * c
  31.  
  32. pdelta :: Double -> Double -> Double -> Double
  33. pdelta a b c = sqrt (delta a b c)
  34. ----------
  35. delta :: Double -> Double -> Double -> Double
  36. delta a b c = b * b - 4 * a * c
  37.  
  38. pdelta :: Double -> Double -> Double -> Double
  39. pdelta a b c = if warunek > 0
  40.                then sqrt (delta a b c)
  41.                else if warunek == 0
  42.                     then 0
  43.                     else error "delta jest mniejsza od zera"
  44.                     where warunek = (delta a b c)
  45. ----------
  46. delta :: Double -> Double -> Double -> Double
  47. delta a b c = b * b - 4 * a * c
  48.  
  49. pdelta :: Double -> Double -> Double -> [Double]
  50. pdelta a b c = if a == 0
  51.                then error "nie jest mozliwe dzielenie przez 0"
  52.                else if(delta a b c) == 0
  53.                     then [(-b) / (2 * a)]
  54.                     else if (delta a b c) > 0
  55.                          then [(-b + pier) / (2 * a),
  56.                                (-b - pier) / (2 * a)]
  57.                          else error "delta jest mniejsza od zera, brak pierwiastkow"
  58.                where pier = sqrt (delta a b c)
  59.  
  60. =================LAB7=================
  61.  
  62. sign2 n
  63.    | n < 0 = "-"
  64.    | n > 0 = "+"
  65.    | n == 0 = "zero"
  66.    | otherwise = "error"
  67.  
  68. sign1 0 = "zero"
  69. sign1 n = case n > 0 of
  70.    True -> "+"
  71.    False -> "-"
  72.  
  73. myComp :: Ord a => a -> a -> Ordering
  74. myComp a b
  75.    | a > b = GT
  76.    | a < b = LT
  77.    | a == b = EQ
  78. -----------------------------------------------
  79.  
  80. Napisz samodzielnie poprawniej działającą
  81. wersję mnożenia.
  82.  
  83. mul1 :: Int -> Int -> Int
  84. mul1 a 1 = a
  85. mul1 1 a = a
  86. mul1 _ 0 = 0
  87. mul1 0 _ = 0
  88. mul1 a b
  89.    | (a < 0) && (b < 0) = mul1 (-a) (-b)
  90.    | b > 0 = a + mul1 a (b-1)
  91.    | b < 0 = b + mul1 b (a-1)
  92.    
  93. mul1 :: Int ->Int ->Int
  94. mul1 a 0 = 0
  95. mul1 a 1 = a
  96. mul1 a b = if b>0 then a + mul1 a (b-1)
  97.     else -(a + mul1 a ((-b)-1))
  98.  
  99. Napisz funkcje obliczającą wartość silni. Użyj rekurencji, konstrukcji ze strażnikami,
  100. konstrukcji warunkowej lub case.
  101.  
  102. silnia :: Int -> Int
  103. silnia 0 = 1
  104. silnia n = case n > 0 of
  105.    True -> n * silnia (n - 1)
  106.    False -> error "liczba <0"
  107.  
  108. Napisz funkcję obliczającą kolejne elementy ciągu Fibonacciego.
  109.  
  110. fibb 1 = 1
  111. fibb 2 = 1
  112. fibb a = case a>0 of
  113.   True -> fibb(a-1)+fibb(a-2)
  114.   False -> error "cos poszlo nie tak"
  115.  
  116.  
  117. =================LAB8=================
  118.  
  119. Napisz funkcję obliczającą iloczyn elementów listy, użyj foldr
  120.  
  121. fun :: [Int] -> Int
  122. fun x = foldr (*) 1 x
  123.  
  124. Napisz funkcję sprawdzającą czy podany znak jest dużą literą. Użyj elem.
  125.  
  126. litera a = if elem a ['a'..'z'] then "mala litera"
  127.    else if elem a ['A'..'Z'] then "duza litera"
  128.       else error "nie litera"
  129.  
  130. Napisz funkcję usuwającą z napisu duże litery. Napis to lista znaków.
  131.  
  132. usun napis = [ c | c <- napis, not(c `elem` ['A'..'Z'])]
  133.  
  134. Napisz kod programu, który ze wszystkich możliwych trójek (a, b, c) wygeneruje tylko te, dla
  135. których a^2 + b ^ 2 = c ^ 2, tak zwane trójki pitagorejskie. Wartości a,b,c należą do przedziału
  136. od 0 do 20. Użyj list comprehensions.
  137.  
  138. pitagoras = [[a,b,c] | a <- [0..20], b <- [0..20], c <- [0..20], a*a+b*b==c*c]
  139.  
  140. Napisz funkcję obliczającą silnię dla liczb parzystych w zakresie od 1 do 20. Użyj funkcji map,
  141. filter, where, even, mod i specyfikacji zasięgu listy.
  142.  
  143. factorial :: Integer -> Integer
  144. factorial 0 = 1
  145. factorial n = n * factorial (n - 1)
  146.  
  147. --silnia = map factorial (filter even1 [1..20]) where even1 x = mod x 2 == 0
  148. silnia = map (\x -> factorial x) (filter (even) [1..20])
  149.  
  150. Napisz funkcje obliczającą kwadraty kolejnych liczb naturalnych przedziale od 0 do 20. Użyj
  151. map i where. Następnie drugi program z map i funkcję lambda.
  152.  
  153. doKwadratu = map (\x -> x * x) [1..20]
  154.  
  155. Napisz kod, który zwróci największą wartość poniżej 1000000 podzielną przez 3829 bez
  156. reszty.
  157.  
  158. rev :: [Int] -> [Int]
  159. rev [] = []
  160. rev x = last x : rev (init x)
  161. lista = rev [3829..999999]
  162. lista2 = filter (\x -> x `mod` 3829 == 0) lista
  163. wartosc = take 1 lista2
  164.  
  165. Napisz funkcję obliczającą liczbę wszystkich nieparzystych kwadratów liczb od 1 do 10000.
  166. Do obliczeń możesz wykorzystać takeWhile, sum, odd, map, filter, length.
  167.  
  168. listaKwadratow = filter (odd) (map (\x -> x * x) [1..10000])
  169. doKwadratu = length listaKwadratow
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement