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)

Neljas kodutöö

1. Ülesanne (2/5 punkti)

Genereerida lõpmatu list, mille elemendid on kasvavas järjestuses sellised mittenegatiivsed paarisarvude kuubid, mille ruudu täisarvulisel jagamisel seitsmega saadakse jääk kaks.

St. 64, 1000 jne. kuna 4^3=64,    4*4 =16,   16 `mod` 7 = 2
                      10^3=1000, 10*10=100, 100 `mod` 7 = 2.

kasutades listikomprehensiooni

arvud1 :: [Int]
arvud1 = undefined

kasutades iterate, map ja filter funktsioone.

arvud2 :: [Int]
arvud2 = undefined

2. Ülesanne (1/5 punkti)

Olgu binaarpuud defineeritud järgnevalt:

data BinTree a = Leaf (Maybe a) | Node (BinTree a) a (BinTree a)
    deriving (Eq, Show)

Ehk siis puid esitatakse selliselt:


      Node
     / |  \
  Leaf 2   Node
   |      /  | \         =  Node (Leaf (Just 1)) 2 (Node (Leaf (Just 3)) 
 Just  Leaf  4  Leaf                       4 (Leaf (Just 5)))
   |     |        |
   1     3        5

Teha funktsioon, mis loob listist "vasakule kaldu" oleva puu, st.

                       Node
                     /  |  \
vasak [1,2,3] =   Node  1   Leaf
                 /  |  \      |
              Leaf  2  Leaf   Nothing
               |        |
              Just    Nothing
               |
               3

               Leaf
vasak [] =       |
              Nothing
vasak :: [Int] -> BinTree Int
vasak = undefined 

3. Ülesanne (2/5 punkti)

Kirjutada funktsioon maksimaalse arvu leidmiseks kahendpuust.

maks :: BinTree Int -> Maybe Int
maks = undefined

4. Ülesanne (2/5 punkti)

Andke definitsioon standardsele 52-kaardiga kaardipakile. Kasutage listikomprehensiooni.

Kasutage järgnevaid definitsioone

data Arvud   = Null | Yks | Kaks | Kolm | Neli | Viis | Kuus | Seitse | Kaheksa | Yheksa | Kymme   deriving (Eq, Enum, Show)
data Mast    = Ruutu | Risti | Artu | Poti      deriving (Eq, Enum, Show)
data Pilt    = Soldat | Emand | Kuningas | Ass      deriving (Eq, Enum, Show)

data Kaart = N Mast Arvud | P Mast Pilt
    deriving (Eq, Show)

kaardipakk :: [Kaart]
kaardipakk = undefined

5. Ülesanne (2/5 punkti)

Kirjutada funktsioon, mis arvutiab iga kahe kaardi kohta, kas esimene on tugevam kui teine. Kaartide tugevusjärjestus on alates tugevamast: äss, kuningas, emand, poiss, 10, 9, 8, 7, 6, 5, 4, 3, 2. Näiteks: Poti emand on tugevam, kui ruutu kaheksa.

v6idab :: Kaart -> Kaart -> Bool
v6idab = undefined

6. Ülesanne (1/5 punkti)

Implementeeri Ord instants Kaartide jaoks. Kasuta eelmises ülesandes defineeritud järjestust. Pane tähele et sama tugevusega aga eri masti kaardid peavad Ord funktsioonidel tagastama et nad on võrdsed:

compare (N Ruutu Viis)    (N Poti Viis)   == EQ
compare (N Ruutu Viis)    (N Poti Kuus)   == LT
compare (P Artu Kuningas) (N Ruutu Viis)  == GT
  • 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