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

14. kodutöö

1. Tasemed

Kirjuta rekursiivne funktsioon tasemed, mis võtab argumendiks mitmemõõtmelise järjendi ning tagastab kahemõõtmelise järjendi, mille sisemised järjendid koosnevad algse järjendi elementidest tasemete kaupa, samas järjekorras (vt näidet). Tulemuse esimeses reas on kõik elemendid, mis asuvad etteantud järjendis esimesel tasemel, teises reas kõik elemendid, mis asuvad teisel tasemel jne. Proovi lahendada ülesanne globaalseid muutujaid kasutamata!

Näide funktsiooni kasutamisest:

>>> tasemed([1, [2, [3], [[4], 3], 2], 1, []])
[[1, 1], [2, 2], [3, 3], [4]]

>>> tasemed([8, [6, 7, [-1], [4, [[10]]], 2], 1])
[[8, 1], [6, 7, 2], [-1, 4], [], [10]]

VIHJE. Tõenäoliselt on vajalik iga rekursiivse väljakutse puhul kaasa anda tase, millel asud, ning järjend, mida muudetakse. Samas peaks funktsioon esmasel väljakutsel nõudma sisendiks ainsa parameetrina vaid algset järjendit. Seda võib teha vaikeparameetritega (default parameters) või abifunktsiooniga, nagu järgmistes näidetes.

Näide 1. Rekursiivne põhifunktsioon vaikeparameetritega.

def tasemed(järjend, tase = 0, tulemus = []):

    ...   

    tasemed(järjend, tase + 1, tulemus)        # Rekursiivne väljakutse

tasemed([1, 2, [3]])                           # Programmis kasutamine
                                               # Tagastab [[1, 2], [3]]

Näide 2. Rekursiivne abifunktsioon tasemedAbi, mida põhifunktsioon välja kutsub.

def tasemed(järjend):
    return tasemedAbi(järjend, 0, [])

def tasemedAbi(järjend, tase, tulemus)

    ...     

    tasemedAbi(järjend, tase + 1, tulemus)     # Rekursiivne väljakutse

tasemed([1, 2, [3]])                           # Programmis kasutamine
                                               # Tagastab [[1, 2], [3]]

2. Väljasta liin

Kirjuta rekursiivne funktsioon väljasta_liin, mis võtab argumentideks eellase nime, järglase nime ja sugupuu sõnastiku ning väljastab ekraanile põlvnemiste ahela eellasest järglaseni, kui selline ahel leidub. Kui ahelat ei leidu, siis tuleks väljastada tekst "ei leidu". Sõnastikus on võtmeks sõnena nimi ning väärtuseks ennikuna (või listina) isa nimi indeksil 0 ja ema nimi indeksil 1. Funktsioon võib tagastada vabalt valitud väärtusi, aga ekraanile tuleb väljastada nõutud nimed.

Näide programmi tööst (sõnastiku väljund on ilustatud):

>>> sõnastik
{
  'Kalle': ('Teet', 'Maris'), 
  'Maris': ('Konstantin', 'Mari'), 
  'Rita': ('Teet', 'Maris'), 
  'Siim': ('Teet', 'Maris'), 
  'Mari': ('Karl', 'Leeni'), 
  'Teet': ('Joosep', 'Adele'), 
  'Adele': ('Johannes', 'Leida'), 
  'Konstantin': ('Viktor', 'Jelena'), 
  'Joosep': ('August', 'Emma'), 
  'Viktor': ('Nikolai', 'Maria')
}

>>> väljasta_liin('Leida', 'Kalle', sõnastik)
Leida
Adele
Teet
Kalle

>>>> väljasta_liin('Mari', 'Adele', sõnastik)
ei leidu
  • 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