Informatika2-2022/CsütGyak10

A MathWikiből
(Változatok közti eltérés)
(Új oldal, tartalma: „=Feladatok= ==Elmaradt feladat== ===1. Zárt terület kifestése=== Olvassuk be a [http://sandbox.hlt.bme.hu/~gaebor/ea_anyag/Info2/picture.txt picture.txt] fájlt li…”)
 
(Feladatok)
47. sor: 47. sor:
 
Írjon egy sumtree() nevű függvényt, amely egy fában szereplő számok összegét
 
Írjon egy sumtree() nevű függvényt, amely egy fában szereplő számok összegét
 
adja vissza. Például a fenti utolsó fára 14-et.
 
adja vissza. Például a fenti utolsó fára 14-et.
 +
 +
===4. részlisták ===
 +
 +
Írjon egy sublists() nevű függvényt, amely az argumentumaként adott
 +
lista összes részlistájának listáját adja vissza (tetszőleges sorrendben). (Itt most l1 részlistája l2-nek, ha kalkulus értelemben részsorozata, azaz ha l1 minden tagja szerepel
 +
l2-ben, mégpedig ugyanabban a sorrendben.) Például:
 +
  sublists([])
 +
  [[]]
 +
  sublists([1])
 +
  [[1], []]
 +
  sublists([1,2])
 +
  [[1, 2], [1], [2], []]
 +
  sublists([1,2,3])
 +
  [[1, 2, 3], [1, 2], [1, 3], [1], [2, 3], [2], [3], []]
 +
 +
===5. Levél felsorolás ===
 +
 +
⋆ Írjon egy flatten() nevű függvényt, amely egy fában előforduló számok
 +
listáját adja vissza, mégpedig a “mélységi bejárás” szerinti sorrendben. Ez azt jelenti,
 +
hogy — ha a fa lista — az elejétől vizsgáljuk az elemeit, és ha listával találkozunk, akkor
 +
először azt vizsgáljuk, mielőtt az épp vizsgált lista további elemeire térnénk rá. Ha a fa
 +
szám, akkor az őt tartalmazó lista a visszatérési érték. Például:
 +
  flatten(1)
 +
  [1]
 +
  flatten([1])
 +
  [1]
 +
  flatten([1, 2])
 +
  [1, 2]
 +
  flatten([1, 2, [3, 4]])
 +
  [1, 2, 3, 4]
 +
  flatten([0, [0, 1, 2], [0, [0, 1, 2], 1, [0, 1, 2], 2], 2])
 +
  [0, 0, 1, 2, 0, 0, 1, 2, 1, 0, 1, 2, 2, 2]
 +
  flatten([[0, 1, 2], -1, [-2, [3, 4], [5, 6, 7, 8],
 +
  ... [9, 10, 11]], [13, 14, 15], [16, 17]])
 +
  [0, 1, 2, -1, -2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17]
 +
 +
===6. függvény meghívás ===
 +
 +
Definiáljon egy kétargumentumú apply() függvényt, ami az első argumentumát (egy egyargumentumú függvény) alkalmazza a második argumentumára,
 +
és az eredményt adja vissza.
 +
 +
===7. többszörös kompozíció ===
 +
 +
Definiáljon egy kétargumentumú self_compose függvényt úgy, hogy ha
 +
fun egyargumentumú függvény és n természetes szám, akkor
 +
self_compose(fun, n)
 +
fun n. hatványát (azaz n-szeres kompozícióját saját magával) adja vissza. Speciálisan,
 +
self_compose(fun, 1) magát fun-t, self_compose(fun, 2) pedig fun kompozícióját magával. Mit kellene visszaadnia self_compose(fun, 0)-nak? Ha nem tudja,
 +
tegye fel (és ellenőrizze assert-tel), hogy a második argumentum mindig pozitív.<br>
 +
Például:<br>
 +
  (self_compose(lambda x: x+1,3))(0)
 +
  3
 +
 +
===8. Átlag ===
 +
 +
Írjunk egy atlag() nevű függvény, melynek tetszőlegesen sok bemenete van és kimenetnénk a bemeneti számok átlagát adja vissza. Kezeljük le azt az esetet ha a bemenetek között van nem szám típusú objektum.
 +
 +
===9. jó zárójelezés ===
 +
 +
Írjunk egy függvényt, aminek a bemenete egy string és eldönti, hogy jól van-e zárójelezve, vagyis, hogy minden nyitó '(' zárójel után következik-e megfelelően egy ')' zárójel valahol a stringben.

A lap 2022. május 11., 21:21-kori változata

Tartalomjegyzék

Feladatok

Elmaradt feladat

1. Zárt terület kifestése

Olvassuk be a picture.txt fájlt listák listájába (minden karakter egy elem)! Írjunk egy fill(x,y) függvényt, ami ugyanazt csinálja, mint a Paint kitöltő funkciója! Az (x,y) pontból kiindulva a . helyére # jelet tesz, amíg a # jel által jelölt falba nem ütközik! A módszer rekurzív: kifestjük az (x,y) pontot, majd a szomszédait, ha azok nem # jelek. Hívjuk meg a szomszédokra (akik nem # jelek) a függvényt rekurzívan. Ha nincs kit kiszínezni, akkor álljunk meg!

.....................................
...#######################...........
...#.....................#...........
...#.....................#...........
...#.....................#...........
...#.....................#...........
...#.....................#...........
...#.....................#######.....
...###.................##......#.....
...#..##.............##........#.....
...#....##.........##..........#.....
...#......##.....##............#.....
...#........#####..............#.....
...#........#..................#.....
...#.......##..................#.....
...#.....##....................#.....
...#...##......................#.....
...#############################.....
.....................................
.....................................
.....................................
.....................................

Lekezelések

2. Osztás

Írjunk egy divide() nevű függvényt, aminek nincs paramétere. A függvény futásakor inputként kér két számot és kimenetként a két szám hányadosát adja vissza. Kezeljük le azokat a kivételeket ha nem számot adunk meg, hanem például stringet, illetve azt az esetet, amikor nullával osztanánk.

Függvényekről általában

3. lista összeg

Hívjunk fának egy objektumot ha szám, vagy ha fák listája. Tehát például 0, 1 és 2 fák, mert számok, és így [0, 1, 2] is fa, mert fák listája. Ugyanezért [0, 1, [0, 1, 2], 2] is fa, és [0, [0, 1, 2], [0, [0, 1, 2], 1, [0, 1, 2], 2], 2] is az.
Írjon egy sumtree() nevű függvényt, amely egy fában szereplő számok összegét adja vissza. Például a fenti utolsó fára 14-et.

4. részlisták

Írjon egy sublists() nevű függvényt, amely az argumentumaként adott

lista összes részlistájának listáját adja vissza (tetszőleges sorrendben). (Itt most l1 részlistája l2-nek, ha kalkulus értelemben részsorozata, azaz ha l1 minden tagja szerepel l2-ben, mégpedig ugyanabban a sorrendben.) Például:

  sublists([])
  [[]]
  sublists([1])
  [[1], []]
  sublists([1,2])
  [[1, 2], [1], [2], []]
  sublists([1,2,3])
  [[1, 2, 3], [1, 2], [1, 3], [1], [2, 3], [2], [3], []]

5. Levél felsorolás

⋆ Írjon egy flatten() nevű függvényt, amely egy fában előforduló számok listáját adja vissza, mégpedig a “mélységi bejárás” szerinti sorrendben. Ez azt jelenti, hogy — ha a fa lista — az elejétől vizsgáljuk az elemeit, és ha listával találkozunk, akkor először azt vizsgáljuk, mielőtt az épp vizsgált lista további elemeire térnénk rá. Ha a fa szám, akkor az őt tartalmazó lista a visszatérési érték. Például:

  flatten(1)
  [1]
  flatten([1])
  [1]
  flatten([1, 2])
  [1, 2]
  flatten([1, 2, [3, 4]])
  [1, 2, 3, 4]
  flatten([0, [0, 1, 2], [0, [0, 1, 2], 1, [0, 1, 2], 2], 2])
  [0, 0, 1, 2, 0, 0, 1, 2, 1, 0, 1, 2, 2, 2]
  flatten([[0, 1, 2], -1, [-2, [3, 4], [5, 6, 7, 8],
  ... [9, 10, 11]], [13, 14, 15], [16, 17]])
  [0, 1, 2, -1, -2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17]

6. függvény meghívás

Definiáljon egy kétargumentumú apply() függvényt, ami az első argumentumát (egy egyargumentumú függvény) alkalmazza a második argumentumára, és az eredményt adja vissza.

7. többszörös kompozíció

Definiáljon egy kétargumentumú self_compose függvényt úgy, hogy ha fun egyargumentumú függvény és n természetes szám, akkor self_compose(fun, n) fun n. hatványát (azaz n-szeres kompozícióját saját magával) adja vissza. Speciálisan, self_compose(fun, 1) magát fun-t, self_compose(fun, 2) pedig fun kompozícióját magával. Mit kellene visszaadnia self_compose(fun, 0)-nak? Ha nem tudja, tegye fel (és ellenőrizze assert-tel), hogy a második argumentum mindig pozitív.
Például:

  (self_compose(lambda x: x+1,3))(0)
  3

8. Átlag

Írjunk egy atlag() nevű függvény, melynek tetszőlegesen sok bemenete van és kimenetnénk a bemeneti számok átlagát adja vissza. Kezeljük le azt az esetet ha a bemenetek között van nem szám típusú objektum.

9. jó zárójelezés

Írjunk egy függvényt, aminek a bemenete egy string és eldönti, hogy jól van-e zárójelezve, vagyis, hogy minden nyitó '(' zárójel után következik-e megfelelően egy ')' zárójel valahol a stringben.

Személyes eszközök