Kolokwium l1 szpyrka

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


Wyszukiwarka