Institute of Computer Science
  1. Courses
  2. 2018/19 fall
  3. Programming Languages (MTAT.03.006)
ET
Log in

Programming Languages 2018/19 fall

  • 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
  • Institute of Computer Science
  • Faculty of Science and Technology
  • University of Tartu
In case of technical problems or questions write to:

Contact the course organizers with the organizational and course content questions.
The proprietary copyrights of educational materials belong to the University of Tartu. The use of educational materials is permitted for the purposes and under the conditions provided for in the copyright law for the free use of a work. When using educational materials, the user is obligated to give credit to the author of the educational materials.
The use of educational materials for other purposes is allowed only with the prior written consent of the University of Tartu.
Terms of use for the Courses environment