Listakezelés: Programozási tételek
Első adag
- Fordítsd meg egy lista elemeinek sorrendjét!
eljárás fordít :lista
HAK (ELEMSZÁM :lista)<2
[EREDMÉNY :lista]
[EREDMÉNY UTOLSÓNAK ELSŐ :lista fordít ELSŐNÉLKÜLI :lista]
vége
- Döntsd el, hogy egy lista szimmetrikus-e!
- Válogasd ki egy listából a páros számokat!
Holocsi Szilvi megoldása:
eljárás T :elem
hak (maradék :elem 2)=0
[eredmény "igaz]
[eredmény "hamis]
vége
eljárás kiválogatás :lista
hak üres? :lista
[eredmény []]
[hak T első :lista
[eredmény elsőnek (első :lista) kiválogatás elsőnélküli :lista
]
[eredmény kiválogatás elsőnélküli :lista]]
vége
- Készítsd el két lista metszetét!
- Készítsd el két lista unióját!
Második adag
- Döntsd el, hogy egy lista rendezett-e!
eljárás rendezett :lista
HAK (ELEMSZÁM :lista) <= 1
[
EREDMÉNY "igaz
]
[
EREDMÉNY ÉS ELSŐ :lista < ELSŐ ELSŐNÉLKÜLI :lista RENDEZETT ELSŐNÉLKÜLI :lista
]
vége
A második (bonyolultabb) ágon lévő kifejezés kiértékelése:
- Számold meg, hány T tulajdonságú elem van egy listában! (A T tulajdonság egy logikai értéket visszaadó eljárás.)
- Illessz be egy rendezett listába egy elemet a helyére!
- Rendezz egy listát!
- Készítsd el két rendezett lista összefuttatását!
- Add meg egy lista középső elemét! (Ha páros sok elem van, akkor a két középső átlagát.)
- Döntsd el, hogy egy szám prím-e!
Dobossy Kristóf megoldása:
eljárás T :szám :osztó
HA :szám = 1 [EREDMÉNY "hamis]
HA :szám = 2 [EREDMÉNY "igaz]
HAK (mod :szám :osztó-1)=0
[EREDMÉNY "hamis]
[HA :osztó>3 [EREDMÉNY T :szám :osztó-1]
EREDMÉNY "igaz
]
vége
eljárás prím :szám
EREDMÉNY T :szám :szám
vége
- Állítsd elő a prímek listáját valamilyen korlátig!
Dobossy Kristóf megoldása: (Az elején üres listával kell meghívni.)
eljárás prímek :korlát :lista
HAK :korlát > 1
[HAK prím :korlát
[EREDMÉNY prímek :korlát-1 ELSŐNEK :korlát :lista]
[EREDMÉNY prímek :korlát-1 :lista]
]
[EREDMÉNY :lista]
vége
- Válogasd ki egy listából a prímeket!
Dobossy Kristóf megoldása:
eljárás prímválogatás :lista
HAK ÜRES? :lista
[EREDMÉNY []]
[HAK prím (ELSŐ :lista)
[EREDMÉNY ELSŐNEK (ELSŐ :lista) prímválogatás ELSŐNÉLKÜLI :lista]
[EREDMÉNY prímválogatás ELSŐNÉLKÜLI :lista]
]
vége
Harmadik adag
Két állattenyésztő nyilvántartást vezet állatairól. Ez a nyilvántartás kétszeres mélységű sorozat, amely ábécé szerint rendezve tartalmazza az állatfajták nevét és darabszámát.
Példa
A: [[kacsa 5] [liba 13] [nyul 66] [tyuk 4]]
B: [[kacsa 1] [kecske 33] [nyul 99]]
Készíts olyan eljárást, ami
- megadja az összes állat számát! (A fenti példában 221.)
- megadja, hogy melyik állatból mennyi van összesen!
(A példában [[kacsa 6] [kecske 33] [liba 13] [nyul 165] [tyuk 4]])
- megadja, hogy a két gazdának összesen hány fajta állata van! (A fenti példában öt fajta állat szerepel.)
- megadja, hogy melyik állatfajtából mennyit tudnak eladni akkor, ha egy-egy állatfajtából mindkettőjüknek ugyanannyit kell értékesíteniük! (A fenti példa szerint mindössze kacsát és nyulat adhatnak el, mégpedig: [[kacsa,1], [nyúl, 66]].)
- megadja, hogy hány olyan állatfajta van, amely csak egyik gazdának van! (A fenti példa szerint három ilyen állat van.)
Negyedik adag
Oldd meg a Hanoi-tornyai problémát!
Példa
[[3 2 1] [] []]
[[3 2] [] [1]]
[[3] [2] [1]]
[[3] [2 1] []]
[[] [2 1] [3]]
[[1] [2] [3]]
[[1] [] [3 2]]
[[] [] [3 2 1]]