Arvutiteaduse instituut
  1. Kursused
  2. 2019/20 sügis
  3. Programmeerimine (LTAT.03.001)
EN
Logi sisse

Programmeerimine 2019/20 sügis

  • Pealeht
  • Videojuhised
  • Viiteid

13. praktikumi harjutused

0. Soojendusülesanne

Kirjuta rekursiivne funktsioon esineb, mille parameetriteks on mingi väärtus ja järjend ning mis tagastab True või False vastavalt sellele, kas see väärtus esineb järjendi elementide hulgas või mitte. Operaatori in kasutamine pole lubatud.

Vihje 1. Mõtle, millise järjendi korral on vastus triviaalne.

Vihje 2. Vaata siit.

Vihje 3. Mittetühja järjendi puhul esineb otsitav väärtus järjendis siis, kui ta on järjendi „päises” (s.t võrdub esimese elemendiga) või kui ta esineb järjendi „sabas” (s.o järjendi esimese elemendi järel olevate elementide seas).

Lisa 1. Proovi selle funktsiooni keha panna kirja 4 reaga.

Lisa 2. Proovi selle funktsiooni keha panna kirja 1 reaga.

1. Esineb n korda

Täienda eelmise ülesande funktsiooni ühe lisaparameetriga, mis ütleb, mitu korda vähemalt antud väärtus peab esinema. Nt

esineb('a', ['a', 'b', 'a'], 2)

peaks tagastama True, aga

esineb('a', ['a', 'b', 'a'], 3)

peaks tagastama False.

2. Kolmeaastane

Kirjuta „Kolmeaastase lapse simulaator”, aga nii, et tsükli asemel oleks kasutatud rekursiooni.

3. n-nurk

Kirjuta funktsioon n-nurga joonistamiseks (justnagu siin), aga kasutades tsükli asemel rekursiooni. Funktsioonil peaks olema ainult üks parameeter, n.

Vihje 1. Mõistlik on asi lahendada kahe funktsiooniga – nõutud üheparameetriline funktsioon peaks arvutama välja, mitu kraadi tuleb iga nurga juures pöörata; põhitöö peaks ta delegeerima kaheparameetrilisele rekursiivsele abifunktsioonile.

Vihje 2. Abifunktsiooni parameetrid peaksid näitama, mitu külge on vaja joonistada ja mitu kraadi iga nurga juures pöörata.

4. Sügavus

Kirjuta rekursiivne funktsioon sügavus, mille parameetriks on järjend või mingi muu väärtus (näiteks täisarv) ning mis tagastab täisarvu, mis näitab kui „sügav” on antud väärtus. Ütleme, et mitte-järjendite sügavus on 0; ühemõõtmeliste järjendite (s.t selliste järjendite, mille elementide hulgas ei ole ühtegi järjendit) sügavus on 1; vastasel juhul on järjendi sügavus tema kõige sügavama elementjärjendi sügavus + 1.

Vihje 1.

>>> type([1, 2, 3]) == list
True
>>> type(1) == list
False

Vihje 2. Seda ülesannet on kõige mugavam lahendada tsükli ja rekursiooni kombineerimisega. Tsükliga võiks liikuda „laiuti”, s.t läbi vaadeldava järjendi kõikide elementide, ja rekursiooniga „süviti”, s.t elementjärjendite sisse.

5. Fraktal

Kirjuta rekursiivne funktsioon, mis joonistab järgmise kujundi:

Vihje. Lõpeta rekursioon siis, kui kriipsude pikkus läheb liiga väikeseks.

Küsimus. Mitu korda peab olema iga järgnev kriips eelmisest lühem? Tegemist on ühe matemaatikas küllaltki tähtsa reaalarvuga.

  • 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.
Tartu Ülikooli arvutiteaduse instituudi kursuste läbiviimist toetavad järgmised programmid:
euroopa sotsiaalfondi logo