Arvutiteaduse instituut
  1. Kursused
  2. 2018/19 sügis
  3. Programmeerimiskeeled (MTAT.03.006)
EN
Logi sisse

Programmeerimiskeeled 2018/19 sügis

  • Info
  • Õppekava
  • Moodle
  • Loengud & Praksid
  • Lisamaterjalid
  • Küsi abi! (Fleep)

Kaheksas praktikum

Eksami Haskelli ülesannete näidised.

1.

Kirjuta funktsioon f, mis saab argumendiks kolmikute (x,y,z) listi ja tagastab paari (a,b). Tagastatud paari teine komponent b on argumentide kolmandate komponentide z summa. Tagastatud paari esimene komponent a on list mis koosneb argumendi esimestest komponentidest x, kusjuures x esineb a-s y korda ning x-d on a-s vastupidises järjekorras.

Näiteks:

-- []                              ->  ("",0)
-- [('a', 1, 1.0)]                 ->  ("a", 1.0)
-- [('x', 2, 4.0), ('y', 3, 1.0)]  ->  ("yyyxx",5)
-- [('x', 2, 4.0), ('y', 3, 2.0)]  ->  ("yyyxx",6)
-- [('x', 2, 4.0), ('y', 1, 1.0)]  ->  ("yxx",5)
-- [('x', 2, 4.0), ('y', 0, 1.0)]  ->  ("xx",5)
-- [('x', 2, 4.0), ('y', 3, 2.0), ('z',2,1.0)]  ->  ("zzyyyxx",7)

f :: [(a, Int, Double)] -> ([a], Double)
f = undefined

2.

Kasutades foldr, kirjuta funktsioon g, mis võtab argumendiks täisarvude listi ja tagastab ()-de listi. Tühjale listile vastata väärtusega [(),(),(),()] ning iga 0-i kohta argumendis tuleb tagastada ühe võrra vähem ()-ge.

Näiteks:

-- []            --> [(),(),(),()]
-- [0,0,1]       --> [(),()]
-- [0,1,0]       --> [(),()]
-- [1,0,0]       --> [(),()]
-- [8,0,9]       --> [(),(),()]
-- [0,0,0]       --> [()]
-- [0,0,0,0]     --> []
-- [0,0,0,0,0,0] --> []

g :: [Int] -> [()]
g = foldr undefined undefined

3.

Kirjuta protseduur h, mis võtab kaks täisarvulist argumenti: n ja m. Protseduur genereerib (randomRIO-ga näiteks) n juhuslikku täisarvu lõigust [0, m]. Esmalt trükitakse konsooli genereeritud arvude summa ning seejärel genereeritud arvud (iga arv eri reale).

Näiteks:

-- > h 3 10
-- 14
-- 7
-- 5
-- 2
h :: Int -> Int -> IO ()
h = undefined

4.

Olgu antud järgnev andmestruktuur, kus E on graafi servade tüübipere ja G on graafide tüübipere.

data E a = E a String a  deriving (Eq)
data G a = G [a] [E a]   deriving (Eq, Show)

instance Show a => Show (E a) where
  show (E _ s _) = s

-- Näiteks on antud selline graaf:
g1 = G [1,2,3,4] [E 1 "a" 2, E 2 "b" 3, E 2 "c" 4, E 4 "d" 1]

Kirjutage funktsioon teedAlates g x ys , kus g on graaf, x on tipp ja ys on tippude list. Funktsioon peab väljastama kõikide mittetsükliliste teede listi, mis lähtuvad tipust x ja mis ei sisalda tippe listist ys.

Näiteks:

> teedAlates  g1 1 []
[[],[a],[a,b],[a,c]]

> teedAlates  g1 2 []
[[],[b],[c],[c,d]]
teedAlates :: Eq a => G a -> a -> [a] -> [[E a]]
teedAlates = undefined

5+

Kodutöö küsimused (või nende puudumisel eelmiste nädalate poolelijäänud ülesanded).

  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Courses’i keskkonna kasutustingimused