1. feladat: Televízióadások (55 pont)
1:
3 8 0 10 0
3 14 0 18 0
3:
2 12 0 20 0
2:
A. Az összes film kiírása a TVx.KIA állományba és a képernyőre TV-csatornák, s ezen belül kezdési idő szerinti sorrendben!
1 6 0 10 0 |
1 18 0 22 0 |
2 12 0 20 0 |
3 8 0 10 0 |
3 14 0 18 0 |
1 6 0 10 0 |
3 14 0 18 0 |
1 18 0 22 0 |
Egy-egy film adatait követően írd ki a TV szót, ha azonnal megnézed a filmet, illetve a VIDEO szót, ha felveszed későbbi megnézés céljából.
1 6 0 10 0 TV |
3 8 0 10 0 VIDEO |
2 12 0 20 0 VIDEO |
3 14 0 18 0 TV |
1 18 0 22 0 TV |
Egy-egy film adatait követően írd ki a TV szót, ha azonnal megnézed a filmet, a VIDEOFELVÉTEL szót, ha felveszed későbbi megnézés céljából, illetve a VIDEOLEJÁTSZÁS szót, ha a kazettán levő filmet nézed (az előtte levő számok ilyenkor a lejátszás időpontjait jelentik).
1 6 0 10 0 TV |
3 8 0 10 0 VIDEOFELVÉTEL |
3 10 0 12 0 VIDEOLEJÁTSZÁS |
3 14 0 18 0 TV |
1 18 0 22 0 TV |
2. feladat: Maga mindent kétszer mond, kétszer mond? (20 pont)
Például a személyi szám (S) meghatározza egy személy nevét (N), címét (C), telefonszámát (T) és születési helyét (H), azaz SN, SC, ST és SH, vagy tömörebben SNCTH. Az NCT szabály azt jelenti, hogy egy személy neve és címe alapján megtudhatjuk a telefonszámát. Az SN, SC és NCT szabályok mellett az ST szabály nem mond újat, hiszen a személyi számból meghatározható a név és a cím, e kettő alapján pedig a telefonszám, ezért az ST szabályt felesleges megadni.
Írj olyan programot, amely a KMKMx.BE szöveges állományból
(2) beolvas egy újabb szabályt, és kiírja a KMKMx.KI állományba, hogy ez a szabály felesleges-e, azaz levezethető-e az (1) lépésben megadott szabályokból,
(3) a (2) lépést addig ismétli, amíg újabb szabályhalmazra nem bukkan,
(4) az (1), (2) és (3) lépéseket addig ismétli, amíg van mit olvasnia a bemeneti állományból.
A szöveges állományban tetszőleges számú, szintaktikailag helyes szabálycsoport van. Egy-egy szabálycsoport három részből áll: egy egész számból, egy szabályhalmazból és további szabályokból. A szám 0-99 közötti érték lehet, és azt mondja meg, hogy a szabályhalmazban hány szabály van. A szabályhalmaz után tetszőleges számú további szabály következhet, ezek felesleges voltát kell megállapítania a programnak. Minden szabálynak egy vagy több nagybetűből álló bal és jobb oldala van, a két oldalt a -> jelpár választja el egymástól. A szabálycsoport kezdetét jelző egész szám és minden egyes szabály is új sorban van. Mivel szabályok csak nagybetűvel kezdődhetnek, újabb szabálycsoport kezdetét a szabályhalmaz elemeinek számát megadó egész szám jelzi; ha ez 0, a bemeneti állománynak vége van. A bemeneti állományban nincs szóköz, sem üres sor.
A KMKMx.KI bemeneti állomány szerkezete:
A kimeneti állományba és a képernyőre át kell másolni az összes olyan szabályt a bemeneti állományból (az előfordulásuk sorrendjében), amelyek feleslegesek. Minden sorba egy szabályt és utána a felesleges szót, ha nincs felesleges szabály, akkor a Semmi sem felesleges szöveget kell írni. Az eredetileg külön szabálycsoportokba tartozó szabályokat a Szabálycsoport #n szöveget tartalmazó sorral kell bevezetni, ahol n a szabálycsoport sorszáma (1-től kezdve, folyamatos sorszámozással).
Bemenet | Kimenet |
2 | Szabálycsoport #1 |
A->BD | A->C felesleges |
BD->C | Szabálycsoport #2 |
A->C | PS->T felesleges |
4 | QS->P felesleges |
P->RST | Szabálycsoport #3 |
VRT->SQP | A->D felesleges |
Q->TR | Szabálycsoport #4 |
SR->V | Semmi sem felesleges |
PS->T | |
QS->P | |
4 | |
A->B | |
A->C | |
B->D | |
C->D | |
A->D | |
2 | |
A->B | |
B->C | |
A->D | |
0 |