Institute of Computer Science
  1. Courses
  2. 2020/21 fall
  3. Computer Programming (LTAT.03.001)
ET
Log in

Computer Programming 2020/21 fall

  • Pealeht
  • Silmaringimaterjalid
  • 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.

  • 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