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

Programming Languages 2019/20 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 (1 punkt)

Faili alguses impordime räside arvutamise teegi:

import Data.Hashable

Et seda kasutada peame installima ka vastava paketi:

stack install hashable

Simuleerime plokiahelat järgnevate andmastruktuuridega

type R2si  = Int
type Nimi  = String
type Raha  = Int
type Nonce = Int

data BC = BC0 [(Nimi, Raha)] 
        | BCN BC R2si (Nimi, Nimi, Raha) Nonce deriving (Show)

Plokiahela alguses on plokk BC0, kuhu on salvestatud raha algseisud. Näiteks:

start = BC0 [("Kalmer", 100), ("Simmo", 100), ("Mirjam", 100)]

Iga järgnev plokk on BCN plokk, milles on järgnevad komponendid:

  • viit eelnevale plokile
  • eelneva ploki räsi (täisarv)
  • ülekandekolmik (kellelt, kellele, summa)
  • nonce --- täisarv, mis koos plokiga räsitakse

Ahela igale plokile vastab täisarv ehk räsi

r2si :: BC -> R2si
r2si (BC0 xs)            = hashWithSalt 0 xs
r2si (BCN _ h (f,t,m) n) = hashWithSalt n (h,f,t,m)

BCN plokk on sobiv vaid siis, kui tema räsi vastab tingimusele

r2siTingimus h   = h > 0 && h < 2^58

Alamülesanne a: (2/5 punkti).

Implementeeri funktsioon kontrolliTingimused b, mis kontrollib et räsi tingimus kehtib kogu ahela igas BCN plokis.

kontrolliTingimused :: BC -> Bool
kontrolliTingimused = undefined

Alamülesanne b: (1/5 punkti).

Implementeeri funktsioon kontrolliR2si b, mis kontrollib, kas BCN plokkidesse on eelneva ploki räsi korrektselt salvestatud.

kontrolliR2si :: BC -> Bool
kontrolliR2si = undefined

Alamülesanne c: (2/5 punkti).

Implementeeri funktsioon uusPlokk b f t m, mis arvutab uue ploki, kus isikult f on isikule t üle kantud m ühikut raha. Tulemuseks saadud ploki räsi peab vastama r2siTingimus-ele. (Tuleb katsetades leida sobiv nonce. Võib eeldada, et selline leidub. Raha olemasolu pole vaja kontrollida s.t. võib minna miinusesse.)

uusPlokk :: BC -> Nimi -> Nimi -> Raha -> BC
uusPlokk = undefined
  • 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