Kolokwium L1
Zadanie 1 napisz funkcję f:: int->int->int-> z dodawanim paramteru a i b zwracającą:
A gdy a<b / B gdy a>b / 0 gdy a=b
f :: Int -> Int -> Int
f a b | a<b =a
| a>b =b
| a==b =0
Przykład wywołania: f 3 4
Wynik: 3
Zadanie 2 przyjmijmy że liczba zespolona jst zapisywana jako dwuelementowa krotka wartości typu float. Podaj implementacje operatora dodawania liczb zespolonych.
dodawanie :: (Float, Float) -> (Float, Float) -> (Float, Float)
dodawanie (x,y) (a,b) =((x+a),(y+b))
Przykład wywołania: dodawanie (3,4) (4,5)
Wynik: (7,9)
Zadanie 3 f.horner jako argument przyjmuje downolna listę wspolczynkow wielomianiu typu float oraz wartoc x typu float i zwraca wartość wielomiany w punkcie x. Implementacja funkcji musi opeirac się na schemacie hornera
Np. [1,2,3,4] x <-> 1+2*x+3*x2+4*x3
horner :: [Double] -> Double -> Double
horner [] a = 0
horner [x] a = x
horner (x:xs) a = x + a*horner xs a
Zadanie 4
suma1 = sum(map f [1..10])
where f x = 1/(1+x)
suma2 :: Double
suma2 = foldr (*) 1 (map f [1..10])
where f x = sin x * sin x
Zadanie 5
Dana jest funkcja typu Tree
Data Tree a = Leaf a
|Node a (Tree a ) (Tree a)
|Null
Podaj implementacje funkcji countNegativeNodes, która zwraca sumę liczb ujemnych przechowywanych w drzewie
countNegativeNodes Null = 0
countNegativeNodes (Leaf x) |x<0 = 1
|x>=0 = 0
countNegativeNodes (Node y left right) | y<0 = 1+ countNegativeNodes left + countNegativeNodes right
| y>=0 = countNegativeNodes left + countNegativeNodes right
Kolokwium szpyrka AGH:
Zad1 Podaj implementacje funkcji leg :: Int -> Int -> Int, która przyjmuje dwa argumenty a i b i zwraca:
• 1 gdy a < b,
• −1 gdy b < a,
• 0 gdy a = b.
leg :: Int -> Int -> Int
leg a b |a<b = 1
|b<a = -1
|a==b = 0
Zad2. (2 pkt.) Przyjmijmy, ze liczba zespolona jest zapisywana jako dwuelementowa lista warto ˙ sci typu ´ Double. Podaj implementacj˛e operatora mnozenia liczb zespolonych.
mnozenie :: (Float, Float) -> (Float, Float) -> (Float, Float)
mnozenie (a,b) (c,d) =(a*c - b*d, a*d + b*c)
(+.):: (Double,Double) -> (Double,Double) -> (Double,Double)
(+.) (a1,b1i) (a2,b2i) = (a1+a2,b1i+b2i)
(-.):: (Double,Double) -> (Double,Double) -> (Double,Double)
(-.) (a1,b1i) (a2,b2i) = (a1-a2,b1i-b2i)
Zad3.
(2 pkt.) Podaj implementacj˛e funkcji f, która jako argument przyjmuje list˛e dowolnych wartosci i zwraca list˛e warto ´ sci o indeksach ´ nieparzystych. (Uwaga: funkcja działa dla list dowolnych typów.)
sum1 [] = 0
sum1 [_] = 0
sum1 (_:x:xs) = x+ sum1 xs
Zad4. 4. (2 pkt.) Podaj kod pozwalajacy na obliczenie:
• suma od 1 do 2000 liczb postaci 2/(i 2 + 1);
sum(map f [1..2000])
where f i = 2/(i*i+1)
• iloczyn od 20 do 45 liczb postaci sin x · cos x.
zadanie4b :: Double
zadanie4b = foldr (*) 1 (map f [20..45])
where f x = sin x * cos x
Zadanie 5
Dana jest definicja typu
Tree d a t a T r e e a = L e a f a
| Node a ( T r e e a ) ( T r e e a )
| N ull
Podaj implementacj˛e funkcji sumTree, która zwraca sum˛e liczb przechowywanych w drzewie (zakładamy, ze typ ˙ a nalezy do klasy ˙ Num).
sumTree Null=0
sumTree (Leaf x) = x
sumTree (Node y left right) =y+sumTree left+sumTree right