Labor, 11. hét: láncolt listák II.
Czirkos Zoltán, Pohl László · 2026.08.11.
Láncolt listákkal és fájlkezeléssel kapcsolatos gyakorlófeladatok régebbi ZH-kból.
Ez a labor új anyagot nem mutat be. A feladatok régebbi ZH-kból származnak. Hasonlók az idei második NZH-ban is lehetnek. Ha úgy érzed, ez már jól megy, helyette dolgozhatsz a nagy házidon is.
Felkészülés a laborra:
- A listákról szóló előadás átismétlése.
- A fájlkezelésről szóló előadásrészlet átismétlése.
Szöveges fájlokban metrójáratok megállóinak neveit tároljuk, soronként egyet. A nevek maximum 50 betűsek. A programod feladata, hogy láncolt listákba beolvassa a járatok adatait, és megmondja két adott járatról, hogy át lehet-e szállni egyikről a másikra, vagy nem; ha igen, akkor az is kérdés, hogy hol.
- Írj függvényt, amely paraméterként egy fájlnevet kap, visszatérési értéke pedig egy járat megállóinak listája – a fájlban szereplő sorrendben.
- Írj függvényt, amely megvizsgál két, paraméterként kapott megállólistát, hogy van-e átszállási lehetőség (azonos megállónév). A függvény visszatérési értéke egy sztring legyen, amely a megálló neve. (Mivel kell visszatérnie a függvénynek, ha nem lehet átszállni?)
- Egészítsd ki mindezt teljes programmá, amelyben beolvasod az m2.txt és az m3.txt nevű fájlokat! Ha át lehet szállni, írd ki a megálló nevét, ha nem, akkor pedig írd ki azt! Ne felejtsd el felszabadítani a memóriát, amit foglaltál!
Adatok a teszteléshez: m1.txt, m2.txt, m3.txt és m4.txt.
Egy hétemeletes szállodában a szobafoglalásokat egy olyan struktúrában tárolják, amely egy egészként tartalmazza a szobaszámot és egy maximum 50 karakteres sztringben a vendég nevét. A szobák a szokásos módon vannak számozva, a százasok helyiértéke adja meg az emeletet, a tízesek és egyesek pedig az adott szinten lévő szoba sorszámát (pl. 712 = 7. emelet, 12. szoba). A földszint a 0. szint.
- Írj függvényt, amely a paramétereként megadott nevű szöveges fájlból beolvassa a vendégek listáját egy láncolt listába, és visszatér a lista címével! A fájlban az egyes foglalások külön sorban helyezkednek el, a sor elején a szobaszám áll, utána a név. (Hozz létre ilyen szövegfájlt néhány adattal, hogy tesztelni tudj!)
- Írj függvényt, amely paraméterként kapja a vendégek listáját és a szintek tömbjét; az utóbbi, emelet sorszámával indexelt tömbbe pedig beírja, hogy az egyes emeleteken hány vendég lakik!
- Írj függvényt, amely megkapja az így keletkezett szintek tömbjét, és visszatér a legzsúfoltabb emelet sorszámával, tehát azzal, ahol a legtöbb vendég van éppen!
Egészítsd ki ezeket teljes programmá, amely a felhasználótól beolvas egy nevet és megmondja, hogy az illető megszállt-e a szállóban a foglalasok.txt szerint, és ha igen, akkor a legzsúfoltabb emeleten van-e a szobája!