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

Programmeerimiskeeled 2019/20 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 (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
  • 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