o A feladatok lényege: megfelelő típusok, adatszerkezetek használata.
o A feladat szövegéből kiderül, hogy milyen adatszerkezet van a középpontban (pl. láncoltan ábrázolt lista). Ettől nem szabad eltérni!
o A feladatokban rendszerint előfordul valamilyen felsorolási típus, amelyet szintén, mint típust, meg kell valósítani saját beolvasó és kiíró műveleteivel együtt. Ugyanez vonatkozik a dátum, az idő (stb. „speciális”) típusokra is. Az input-formátumra vonatkozó elvárásokat a feladatok példái egyértelműen mintázzák.
o Cél a kijelölt típusok (minél inkább) feladatfüggetlen megvalósítása. Ez elsősorban az „elkülönített formába öntöttséget”, különálló file-ba foglalását jelenti[1]. Kapcsolat persze van a „fő” program és a típust megvalósító modul között: a modul paraméterei (befelé irányuló) és szolgáltatásai (kifelé irányuló).
o Mivel a program kódja legalább kettő (de inkább több) file-ra osztva alkot egy egészet, lényeges, hogy ezek együttese ne keveredjen más célú file-okkal, azaz a korábban megkívánt file-struktúra létrehozása és figyelembevétele most még inkább indokolt.
<\ -- a gyökérben a
futtatási környezet (EXE + adatfile-ok)
0\FORRAS\ -- PAS programállomány + UNIT/INCLUDE forrásállományok
0\DOKU\ -- DOC-állományok
o A program a szükséges input-adatokat elsősorban file-okban várja (bár ókor-ókor biztosítani kell a „kézi” paraméterezhetőséget is), ezért az input-file-ok szerkezetére rótt elvárások tiszteletben tartása alapvető feltétele a kipróbálásnak, az érdemi értékelésnek.
o A teszteléshez „generált” file-ok a gyökérkönyvtárban legyenek, ott ahol az exe-állomány van. Nyilván ezekre történik utalás a dokumentáció teszteléssel foglalkozó részében. Elvárás, hogy a feladat szempontjából lényeges esetekhez tartozzon egy-egy tesztadatsor. (Ha az exe mellett nincs adatállomány vagy csak 1-2 árválkodik, akkor ezt annak jeleként értékeljük, hogy a program nem igazán lett kipróbálva. L. az értékelési útmutatót!)
1. Labor-foglaltság vizsgálata kétirányú, láncolt
listával.
3. Szótár-vizsgálat – láncolt listák átszervezése
4. Régészeti relikviák vizsgálata – láncolt listák fajták
szerinti szétválogatása
5. Borpince – láncolt listák szétválogatása
6. Labor-foglaltság vizsgálata kétirányú, láncolt listával,
órafajták figyelembe vételével.
7. Üdülések nyilvántartása kétirányú, láncolt listával.
8. Szótár-vizsgálat – láncolt listák átszervezése
9. Régészeti relikviák vizsgálata – láncolt listák szűrése
10. Borpince – láncolt listák összefuttatása
11. Labor-foglaltság vizsgálata kétirányú, láncolt listával.
12. Ünnepek nyilvántartása kétirányú, láncolt listákkal.
13. Szótár-vizsgálat – keresés láncolt listákban
14. Borpince – láncolt listák szétválogatása
15. Talált Tárgyak Osztálya – láncolt listák szétválogatása
kategóriák szerint
17. Szótár-vizsgálat – láncolt listák rendezése
18. Régészeti relikviák vizsgálata – láncolt listák értéklistája
19. Borpince – láncolt listák szétválogatása
20. Talált Tárgyak Osztálya – láncolt listák szétválogatása
1. Labor-foglaltság vizsgálata kétirányú, láncolt listával.
A laborok heti elfoglaltságát az alábbi szerkezetű elemeket tartalmazó kétirányú, láncolt listába foglalva tároljuk:
Típus
TLaborFoglaltságok=Lista(TLaborFoglaltság)
TLaborFoglaltság=Rekord(Nap:TNap,
Mettől,Meddig:TIdő,
Ki:TSzak),
TNap=(Hétfő,Kedd,Szerda,Csütörtök,Péntek,Szombat,
Vasárnap) [az előadáson
taglalt felsorolástípus]
TSzak=(Info, Prog, LC, Met, Fiz)
[ez is felsorolástípus]
TIdő=Rekord(óra,perc:Egész)
Laboronként külön-külön listát vezet a foglaltságról. A listákban TNap, s azon belül TIdő szerint rendezve vannak a foglaltsági adatok. Módosítsa a listákat új, file-ból jövő bejegyzésekkel. (Kezdetben üresek a listák.) Azaz ha eddig még szabad időpontra vonatkozó igény jött, illessze be; ha –részben vagy egészben– foglalt a megjelölt időintervallum, szüntesse meg az érintett összes foglaltságot, majd helyettesítse az újjal, s a „kitúrtakat” egy másik listába fűzze! Kérésre jelenítse meg a heti elfoglaltságát egy adott labornak, és az addig „kitúrtak” adatait (mely időpontban, mely laborból, mikori dátumú igénylés alapján).
TKitúrtak=Lista(TKitúrt)
TKitúrt=Rekord(Labor:TLabor,
érkIdő:TDátum,
Szak:TSzak, Mettől:TIdő)
o teremigényelések sorozata szöveges file-ban – az igénylés-file egy eleme a file 6 egymásutáni sorában (igényélési idő szerint növekvő sorrendben):
igénylésIdő:TDátum
[amikor az igénylést beadták]
labor:TLabor
nap:TNap
mettől:TIdő
meddig:TIdő
szak:TSzak
Természetesen a fent szereplő adatokat a megfelelő típus ’Be:’/’Ki:’ műveleteivel kell beolvasni/kiírni; feltételezhető a hibátlanság. Az eddig nem definiált típusokról a következőket kell tudni:
TDátum=Rekord(év,hó,nap:Egész)
TLabor=(PC1,PC2,PC3,PC5,PC5,MM,Grafika,MS)
[ez is felso-
rolástípus]
A TDátum típus input-szintaxisa: Egész+SZÓKÖZ+Egész+SZÓKÖZ+Egész.
Példa – két igénylés az input-file-ból:
2001 3 7 |
Egy 2001. március 7-diki igénylés… |
2001 3 17 |
… és egy másik … |
o Klaviatúra input: egy dátum és egy laborazonosító, amikori, és amelyik labor teremfoglaltsági állapotot kéri kiírni.
Egy példa – klaviatúra-input:
2001 3 7 |
Egy 2001. március 7. éjféli állapotkérés… |
2. Cégvezetők elfoglaltságainak kezelése kétirányú, láncolt listával, programfajta figyelembe vételével.
Egy cég néhány vezetőjének közeljövőbeli (két adott dátum közötti) elfoglaltságait az alábbi szerkezetű elemeket tartalmazó kétirányú, láncolt listába foglalva tároljuk:
Típus
TElfoglaltságok=Lista(TElfoglaltság)
TElfoglaltság=Rekord(
érkIdő:TDátum [az igény érkezési ideje],
Ki:TNév, Nap:TDátum,
Mettől:TIdő, Perc:Egész,
Ok:TProgram),
TProgram=(Megbeszélés,Előadás,Ebéd,Party)
TDátum=Rekord(év,hó,nap:Egész)
TIdő=Rekord(óra,perc:Egész)
Vezetőnként külön-külön listát kell vezetni a foglaltságról. A listában érkIdő:TDátum, Nap: TDátum, s azon belül Mettől:TIdő szerint rendezve vannak a foglaltsági adatok. Építse föl a listákat a file-ból jövő program-kérésesek alapján. Ha eddig még szabad időpontra vonatkozó programajánlat jött, illessze be a megfelelő –időrendbeli– helyre. Ha azonban –részben vagy egészben– foglalt a megjelölt időintervallum, akkor „fontosságuk” szerint szüntesse meg az érintett összes foglaltságot, és helyettesítse az újjal, vagy utasítsa vissza az igényt. A fontossági sorrend a legfontosabbal kezdve: Megbeszélés..Party. Az esetleg visszautasítottakat (vagy „kitúrtakat”) egy másik listába fűzze! Ha olyan kérés érkezik, amely megérkézésénél korábbi időpontra vonatkozik, akkor azt fűzze a rákérdezendők listájába, Nap:TDátum, azaz a kért időpont szerint rendezetten! Írja ki az elfoglaltságát minden vezetőnek, és a visszautasított elfoglaltság-igénylések adatait, valamint a rákérdezendők listáját!
Típus
TVisszautasítottak=Lista(TVisszautasított)
TVisszautasított=Rekord(
Név:TNév,
érkIdő:TDátum,
Nap:TDátum,
Mettől:TIdő, Perc:Egész,
Ok:TProgram,
Miatt:TProgram [amilyen
program miatt lett
visszautasítva])
TRákérdezendők=Lista(TRákérdezendő)
TRákérdezendő=Rekord(Név:TNév,
érkIdő:TDátum, [az
érkezés dátuma]
Nap:TDátum [a
program dátuma])
o elfoglaltsági igényelések sorozata szöveges file-ban igénylési idő szerint rendezetten érkeznek – az igénylés-file egy eleme a file 7 egymásutáni sorában:
érkIdő:TDátum
[amikor az igénylés befutott]
vezető:TVezetőNév [akire vonatkozik az igénylés]
partner:TNév [az igénylő]
nap:TDátum [amikorra vonatkozik: tetszőleges!!!]
mettől:TIdő
perc:Egész [mettől hány percet kér]
ok:TProgram [milyen jellegű az elfoglaltság]
Természetesen a fent szereplő adatokat a megfelelő típus ’Be:’/’Ki:’ műveleteivel kell beolvasni/kiírni, de feltételezhető a hibátlanság. Az eddig nem definiált típusról a következőket kell tudni:
Típus
TVezetőNév=(’Jó Isten’,’Luci
Feri’,’Angyal Gábriel’)
[ez is felsorolástípus,
lehet persze más neveket is
ide tenni]
Példa – két igénylés az input-file-ból:
1999 12 27 |
Egy 2001. március 7-diki igénylés… |
2000 1 7 |
… és egy másik … (-: Nincs tévedés: egy korábbi dátumra vonatkozó kérésről van szó. Lassú volt a postás. :-) |
3. Szótár-vizsgálat – láncolt listák átszervezése
A kétnyelvű szótárak –leegyszerűsítve– tekinthetők szópárok listájának, ahol az első szó a tárgynyelv (pl. angol) szava, a második pedig a célnyelvé (pl. magyar). Természetesen előfordulhat, hogy egy szónak több párja is van. Ez azt jelenti, hogy ugyanaz a szó több párosításban is szerepel. Feltehető, hogy a szó (mind a tárgy, mind a célnyelvi „oldalon”) egyetlen szóból áll, hossza nem haladja meg a 20 karaktert. Gyakran előfordulnak azonos alakú, de különböző szófajú szavak (pl. ír – ige, ír – jelző), ezek megkülönböztethetősége érdekében a szópár mellett közöljük a szófajt is.
Beolvasva a szópárokat, amelyeket az input két egymást követő sora tartalmaz, felépít egy láncolt listát (a „bemeneti szótárat”). Majd szervezze át dinamikusan a szótárat („szócikk-tár”) úgy, hogy egy szócikkbe sorolja azokat a célszavakat, amelyeknek azonos a tárgyszava. (Például, ha előfordul a szótárban az (ír, writes) és az (ír, Irish) szópár, akkor ők együtt alkotnak egy szócikket: ír ® writes, Irish. Ez tehát egy célszó-lista lesz.) Írja ki a szócikkbe szervezett szótárat a képernyőre lapozottan, táblázatosan!
A dinamikusan határozóval arra utaltam, hogy amint egy célszóval végzett, máris megszünteti a bemeneti listában, s így mindig a lehető legkevesebb helyet igényli a programja.
Típus
TBeSzótár=Lista(TSzópár)
TBeSzópár=Rekord(tSzó,cSzó:Szöveg,
szófaj:TSzófaj)
TSzófaj=(Ige, Főnév, Határozó, Jelző) [felsorolástípus]
TSzócikktár=Rekord(tSzó:Szöveg,
cSzavak:TCélszavak)
TCélszavak=Lista(TCélszó)
TCélszó=Rekord(cSzó:Szöveg,
szófaj:TSzófaj)
o a szópárokat tartalmazó text-file (*.DIC):
tárgyszó + szóköz + célszó:Szöveg
szófaj:TSzófaj
…
¿ Üres
sor jelzi a feldolgozás végét.
Természetesen a szófaj beolvasása a TSzófaj típus ’Be:’ műveletével végzendő el!
o Szócikk-tár:
tárgyszó -> célszó1 (szófaj1)
célszó2 (szófaj2)
…
…
Ügyeljen a képernyő fenti „strukturáltságára”! Természetesen a szófaj kiírása a TSzófaj típus ’Ki:’ műveletével végzendő el!
4. Régészeti relikviák vizsgálata – láncolt listák fajták szerinti szétválogatása
Egy ásatáson gyűjtött tárgyakról feljegyzik: a fajtáját (korsó, tányér stb.), épségét (százalék), anyagát (ami bizonyos alapanyagok halmazát jelenti) és becsült korát.
Olvassa be egy láncolt listába, majd fajtánként külön-külön szétválogatja dinamikusan. E listákat kiírja a képernyőre rendezetten és lapozottan!
A dinamikusan határozóval arra utaltam, hogy amint egy tárggyal végzett, máris megszünteti a bemeneti listában, s így mindig a lehető legkevesebb helyet igényli a programja.
A fajta-listák rendezését épség szerint csökkenőleg végzi el.
Típus
TrTárgyak=Lista(TrTárgy)
TrTárgy=Rekord(fajta:TFajta,épség:Egész
[százalék],
anyag:TAnyag,kor:Egész)
TFajta=(Korsó,Tányér,Kés,Kard,Tőr,Pohár,Egyéb)
TAnyag=Halmaz(TAlapanyag)
TAlapanyag=(Bronz,Vas,Réz,Agyag,Ón,Szövet,Más)
A fenti felsorolás és halmaz típusokat önálló modulokban kell meg valósítania. Természetesen a fent szereplő adatokat a megfelelő típus ’Be:’/’Ki:’ műveleteivel kell beolvasni/kiírni; feltételezhető a hibátlanság.
o A tárgyakat tartalmazó text-file (*.REL):
Tárgyak száma
Fajta1
Épség1
Anyag11 + vessző + Anyag12
+ …
Kor1
Fajta2
Épség2
Anyag21 + vessző + Anyag22
+ …
Kor2
…
o A tárgyak fajták szerinti listája:
Fajta1
* Épség11 , Kor11
Anyag111 , Anyag112
…
* Épség12 , Kor12
Anyag121 , Anyag122
…
…
Fajta2
* Épség21 , Kor21
Anyag211 , Anyag212
…
…
Ügyeljen
az elválasztójelekre (csillag, vessző)!
5. Borpince – láncolt listák szétválogatása
Egy borpincészet a borairól feljegyzi a következő adatokat: fajta (vörös, fehér, rozé), megnevezése, borvidék (Alföldi, Badacsonyi, Egri, Mátrai, Móri, Soproni, Tokaji, Villányi), évjárat, cukortartalom, szesztartalom, kiszerelés (hordó, üveg7, üveg5).
Olvassa be egy láncolt listába, majd válogassa szét a szerint, hogy mely évtizedbe sorolandó az adott bor. A szétválogatás a nagyszámú listára való tekintettel dinamikusan kell elvégeznie. E listákat kiírja a képernyőre fajták szerint rendezetve, lapozottan!
A dinamikusan határozóval arra utaltam, hogy amint egy borral végzett, máris megszünteti a bemeneti listában, s így mindig a lehető legkevesebb helyet igényli a programja.
Meghatározza, hogy az egyes évtizedekbe hány bor tartozik, továbbá az átlagos cukorfokot (szintén évtizedenként)!
Típus
TPincészet=Lista(TBor)
TBor=Rekord(fajta:TFajta,név:Szöveg,vidék:TVidék,
évjárat:Egész,cukor,szesz:Valós [tömegszázalék],
kiszerelés:TKiszerelés)
TFajta=(vörös,fehér,rozé)
TVidék=(Alföldi,Badacsonyi,Egri,Mátrai,Móri,Soproni,
Tokaji,Villányi)
TKiszerelés=(hordó,üveg7,üveg5)
A fenti felsorolás típusokat önálló modulokban meg kell valósítania. Természetesen a fent szereplő adatokat a megfelelő típus ’Be:’/’Ki:’ műveleteivel kell beolvasni/kiírni; feltételezhető a hibátlanság.
o A borokat tartalmazó text-file (*.BOR):
1. sor: Borok száma
2. sor:
Fajta1 + Megnevezés1 + Vidék1 + Évjárat1
+ vessző +
Cukor1
+ vessző + Szesz1 + Kiszerelés1
3.
sor: Fajta2
+ Megnevezés2 + Vidék2 + Évjárat2 + vessző +
Cukor2
+ vessző + Szesz2 + Kiszerelés2
…
o A borok dekád-listája:
Évtized-kezdet1 - Évtized-vég1
* Megnevezés11 , Fajta11
Vidék11 , Évjárat11
, Cukorfok11 , Szeszfok11
* Megnevezés12 , Fajta12
Vidék12 , Évjárat12
, Cukorfok12 , Szeszfok12
…
Évtized-kezdet2 - Évtized-vég2
* Megnevezés21 , Fajta21
Vidék21 , Évjárat21
, Cukorfok21 , Szeszfok21
* Megnevezés22 , Fajta22
Vidék22 , Évjárat22
, Cukorfok22 , Szeszfok22
…
Ügyeljen
az elválasztójelekre (csillag, vessző)!
o A borok fajták szerinti jellemzése (legidősb bor, átlag-cukorfok):
Évtized-kezdet1 - Évtized-vég1
* borszám1 * átlagcukor1
Évtized-kezdet2 -
Évtized-vég2 * borszám2 * átlagcukor2
…
Ügyeljen
az elválasztójelekre (csillag)!
6. Labor-foglaltság vizsgálata kétirányú, láncolt listával, órafajták figyelembe vételével.
A laborok heti elfoglaltságát az alábbi szerkezetű elemeket tartalmazó kétirányú, láncolt listába foglalva tároljuk:
Típus
TLaborFoglaltságok=Lista(TLaborFoglaltság)
TLaborFoglaltság=Rekord(Nap:TNap,
Mettől,Meddig:TIdő,
Ki:TSzak,
Fajta:Tfajta),
TNap=(Hétfő,Kedd,Szerda,Csütörtök,Péntek,Szombat,
Vasárnap) [az előadáson
taglalt felsorolástípus]
TSzak=(Info,Prog,LC,Met,Fiz) [ez
is felsorolástípus]
TFajta=(Egyszeri,Reguláris,Modul,Speci)
TIdő=Rekord(óra,perc:Egész)
Laboronként külön-külön listát vezet a foglaltságról. A listában TNap, s azon belül TIdő szerint rendezve vannak a foglaltsági adatok. Módosítsa a listákat új, file-ból jövő bejegyzésekkel. (Kezdetben üresek a listák.) Azaz ha eddig még szabad időpontra vonatkozó igény jött, illessze be; ha –részben vagy egészben– foglalt a megjelölt időintervallum, akkor „fontossága” szerint szüntesse meg az érintett összes foglaltságot, és helyettesítse az újjal, vagy utasítsa vissza az igényt. A fontossági sorrend a legfontosabbal kezdve: Egyszeri.. Speci. Az esetleg visszautasítottakat egy másik listába fűzze! Kérésre jelenítse meg a heti elfoglaltságát egy adott labornak, és az addig arra a laborra vonatkozó, visszautasított igénylések adatait (igénylési adatok és annak az órának az adatai –elegendő egynek, ha több is volt ilyen–, amely megakadályozta a foglalást).
TVisszautasítottak=Lista(TVisszautasított)
TVisszautasított=Rekord(
Labor:TLabor,
érkIdő:TDátum,
VSzak:TSzak, VFajta:Tfajta,
Mettől,Meddig:TIdő,
Szak:TSzak [emiatt lett
visszautasítva],
Fajta:TFajta)
o teremigényelések sorozata szöveges file-ban – az igénylés-file egy eleme a file 7 egymásutáni sorában (igényélési idő szerint növekvő sorrendben):
igénylésIdő:TDátum [amikor az igénylést beadták]
labor:TLabor
nap:TNap
mettől:TIdő
meddig:TIdő
szak:TSzak
fajta:TFajta
Természetesen a fent szereplő adatokat a megfelelő típus ’Be:’/’Ki:’ műveleteivel kell beolvasni/kiírni; feltételezhető a hibátlanság. Az eddig nem definiált típusokról a következőket kell tudni:
TDátum=Rekord(év,hó,nap:Egész)
TLabor=(PC1,PC2,PC3,PC5,PC5,MM,Grafika,MS) [ez is
felsorolástípus]
A TDátum típus input-szintaxisa: Egész+SZÓKÖZ+Egész+SZÓKÖZ+Egész.
Példa – két igénylés az input-file-ból:
2001 3 7 |
Egy 2001. március 7-diki igénylés… |
2001 3 17 |
… és egy másik … |
o Klaviatúra input: egy dátum és egy laborazonosító, amikori, és amelyik labor teremfoglaltsági állapotot és az addig visszautasítottak listáját kéri kiírni.
Egy példa – klaviatúra-input:
2001 3 7 |
Egy 2001. március 7. éjféli állapotkérés… |
7. Üdülések nyilvántartása kétirányú, láncolt listával.
Egy üdültető cég az üdülési adatokat alábbi módon tárolja egy kétirányú, láncolt listákban:
Típus
TÜdülőHely=Rekord(azonosító:TÜdülő,
szobák:Lista(TSzoba)
TÜdülő=(Kastély,Bagolyvár,Putri)
[felsorolástípus]
TSzoba=List(TNyaraló) [nyaralási
idő szerint rendezve]
TNyaroló=Rekord(Ki:TNév,
fő:Egész,
Mettől:TDátum,
NapDb:Egész)
TDátum=Rekord(év,hó,nap:Egész).
Minden egyes (Kastély..Putri) épületéhez külön-külön tartozik egy fenti lista, amelyek létrehozása egy, text-file-ból jövő adategyüttes alapján történik. Az alábbi adatok tartalmazzák, hogy helyszínenként hány és milyen szobát kínál a cég:
azonosító:TÜdülő
egyÁgyas:Egész kétÁgyas:Egész
háromÁgyas:Egész
[1-ágyas; 2-ágyas; 3-ágyas szobák
száma]
Példa – üdülő file (HÁZAK.PAR):
KASTÉLY |
A „Kastély”-ban mindenfajta szobából 10 van. |
BAGOLYVÁR |
A „Bagolyvár”-ban csak 2 1-ágyas, 5 2-ágyas szoba van, s a többi (15) 3-ágyas. |
PUTRI |
A „Putri”-ban csak egy 3-ágyas szoba van. |
Ezen adatokkal létrehozható a 30-22-1 üres szoba. A valós nyaralási igényléseket szintén egy text-file tartalmazza, amelyek alapján megpróbáljuk feltölteni nyaralókkal az üdülőházakat. E file szerkezete (soronkénti bontásban); igényélési idő szerint növekvő sorrendben:
rendIdő:TDátum [a megrendelés beérkezési
ideje]
név:TNév [a megrendelő]
mettől:TDátum
napDb:Egész
fő:Egész [az igényelt ágyak száma]
azonosító:TÜdülő [amelyik üdülőben
szeretne nyaralni]
A megrendelésnél figyelembe kell venni, hogy az igénylésnek a kívánt időpontnál legalább 1 naptári hónappal hamarabb meg kell érkeznie. Ha később jön, mint kívánatos, akkor vissza kell utasítani. Gazdasági szempontból előnyös, telt ház esetén egy „drágább” ajánlatot előnyben részesíteni, még egy elfogadottal szemben is. Kedvezőbb ajánlat miatt csak akkor utasítható el kérés, ha a nyaralási időig még legalább 1 hónap van. Az ajánlatok értékét számolhatjuk így: fő*napDb.
Példa – nyaralási igények (NYARALOK.IGE):
2001 2 11 |
2001. február 11.-n érkezett a Hamari család nyaralási megrendelése, amely 4 fő elhelyezését kéri május 31.-ével kezdve 7 napon át a Bagolyvárban. |
2001 4 1 |
Pénzes hp. a Kastélyban nyaralna július 13.-ától 5 napig. Mindez egy április 1.-ei megrendelésükből derül ki. |
2001 4 1 |
Hamariék második megrendelésük –valószínűsíthetően postai okok miatt– csak április elsején érkezett meg, pedig március 31.-től 14 napon át tavaszoltak volna a Putriban. |
A visszautasított megrendeléseket egy külön listában halmozzuk föl:
Típus
TVisszamondások=Lista(TVisszamondás)
TVisszamondás=Rekord(Név:TNév,
Mettől:TDátum,
Azonosító:TÜdülő,
Ok:(JobbAjánlat,Késett))
Kérésre jelenítse meg egy adott időpontban érvényes szoba-foglaltsági adatokat, és az addig visszautasított igénylések adatait.
Egy példa – klaviatúra-input:
2001 4 2 |
A 2001. április 2. éjféli állapotkérés… |
8. Szótár-vizsgálat – láncolt listák átszervezése
A kétnyelvű szótárak –leegyszerűsítve– tekinthetők szópárok listájának, ahol az első szó a tárgynyelv (pl. angol) szava, a második pedig a célnyelvé (pl. magyar). Természetesen előfordulhat, hogy egy szónak több párja is van. Ez azt jelenti, hogy ugyanaz a szó több párosításban is szerepel. Feltehető, hogy a szó (mind a tárgy, mind a célnyelvi „oldalon”) egyetlen szóból áll, hossza nem haladja meg a 20 karaktert. Gyakran előfordulnak azonos alakú, de különböző szófajú szavak (pl. ír – ige, ír – jelző), ezek megkülönböztethetősége érdekében a szópár mellett közöljük a szófajt is.
Beolvasva a szópárokat, amelyeket amelyeket az input két egymást követő sora tartalmaz, felépít egy láncolt listát (a „bemeneti szótárat”), majd szervezze át dinamikusan a szótárat („szócikk-tár”) úgy, hogy egy szócikkbe sorolja azokat a szavakat, amelyek „összetartoznak”. (Például, ha előfordul a szótárban az (ír, writes) és az (ír, Irish) szópár, akkor ők összetartoznak, együtt alkotnak egy szócikket: ír ® writes, Irish. Ez tehát egy olyan szó-lista lesz, amelynek első szava a tárgyszó, a többiek a hozzátartozó célszavak.) Írja ki a szócikkbe szervezett szótárat a képernyőre lapozottan, táblázatosan!
A dinamikusan határozóval arra utaltam, hogy amint egy célszóval végzett, máris megszünteti a bemeneti listában, s így mindig a lehető legkevesebb helyet igényli a programja.
Típus
TBeSzótár=Lista(TSzópár)
TBeSzópár=Rekord(tSzó,cSzó:Szöveg,
szófaj:TSzófaj)
TSzófaj=(Ige,Főnév,Határozó,Jelző,NemDef)
[felsorolástípus]
TSzócikktár=Lista(TTárgyVagyCélszó)
[Típusinvariáns: l:TSzócikktár
| Hossz(l)>1
az első elem a tárgyszó]
TTárgyVagyCélszó=Rekord(szó:Szöveg, szófaj:TSzófaj)
[tárgyszó esetén
a szófaj=NemDef]
o a szópárokat tartalmazó text-file (*.DIC):
tárgyszó + szóköz + célszó:Szöveg
szófaj:TSzófaj
…
¿ Üres sor jelzi a feldolgozás végét.
Természetesen a szófaj beolvasása a TSzófaj típus ’Be:’ műveletével végzendő el!
o Szócikk-tár:
tárgyszó -> célszó1 (szófaj1)
célszó2 (szófaj2)
…
…
Ügyeljen a képernyő fenti „strukturáltságára”! Természetesen a szófaj kiírása a TSzófaj típus ’Ki:’ műveletével végzendő el!
9. Régészeti relikviák vizsgálata – láncolt listák szűrése
Egy ásatáson gyűjtött tárgyakról feljegyzik: a fajtáját (korsó, tányér stb.), épségét (százalék), anyagát (ami bizonyos alapanyagok halmazát jelenti) és becsült korát.
Olvassa be egy láncolt listába, majd fajtánként külön-külön szétválogatja, dinamikusan. E listákat rendezi kor szerint, majd kiírja a képernyőre lapozottan!
A dinamikusan határozóval arra utaltam, hogy amint egy tárggyal végzett, máris megszünteti a bemeneti listában, s így mindig a lehető legkevesebb helyet igényli a programja.
Meghatározza, hogy az egyes fajtáknak mennyi az átlagkora!
Típus
TrTárgyak=Lista(TrTárgy)
TrTárgy=Rekord(fajta:TFajta,épség:Egész
[százalék],
anyag:TAnyag,kor:Egész)
TFajta=(Korsó,Tányér,Kés,Kard,Tőr,Pohár,Egyéb)
TAnyag=Halmaz(TAlapanyag)
TAlapanyag=(Bronz,Vas,Réz,Agyag,Ón,Szövet,Más)
A fenti felsorolás és halmaz típusokat önálló modulokban kell megvalósítania. Természetesen a fent szereplő adatokat a megfelelő típus ’Be:’/’Ki:’ műveleteivel kell beolvasni/kiírni; feltételezhető a hibátlanság.
o A tárgyakat tartalmazó text-file (*.REL):
Tárgyakszáma
Fajta1
Épség1
Anyag11 + vessző + Anyag12
+ …
Kor1
Fajta2
Épség2
Anyag21 + vessző + Anyag22
+ …
Kor2
…
o A tárgyak fajták szerinti listája (és átlag kora):
Fajta1 # átlagkor1
* Épség11 , Kor11
Anyag111 , Anyag112
+
* Épség12 , Kor12
Anyag121 , Anyag122
+
…
Fajta2 # átlagkor1
* Épség21 , Kor21
Anyag211 , Anyag212
+
…
Ügyeljen
az elválasztójelekre (kettős kereszt, csillag, vessző)!
10. Borpince – láncolt listák összefuttatása
Borpincészetek a boraikról feljegyzik a következő adatokat: fajta (vörös, fehér, rozé), megnevezése, borvidék (Alföldi, Badacsonyi, Egri, Mátrai, Móri, Soproni, Tokaji, Villányi), évjárat, cukortartalom, szesztartalom, kiszerelés (hordó, üveg7, üveg5).
Olvassa be láncolt listákba a paraméterként megadott pincészet nyilvántartását, majd rendezze ezeket kiszerelés szerint! E listákat kiírja a képernyőre lapozottan! Ezek után készítsen egy olyan listát, amelyben az előbbi listák elemei kerülnek! Az összefuttatás több listára vonatkozik, ezért a részfeladatot dinamikusan kell elvégeznie.
A dinamikusan határozóval arra utaltam, hogy amint egy borral végzett, máris megszünteti a bemeneti listában, s így mindig a lehető legkevesebb helyet igényli a programja.
Meghatározza, hogy hány tétel tartozik az egyes kiszerelésekbe!
Típus
TPincészet=Lista(TBor)
TBor=Rekord(fajta:TFajta,név:Szöveg,vidék:TVidék,
évjárat:Egész,cukor,szesz:Valós [tömegszázalék],
kiszerelés:TKiszerelés)
TFajta=(vörös,fehér,rozé)
TVidék=(Alföldi,Badacsonyi,Egri,Mátrai,Móri,Soproni,
Tokaji,Villányi)
TKiszerelés=(hordó,üveg7,üveg5)
A fenti felsorolás típusokat önálló modulokban meg kell valósítania. Természetesen a fent szereplő adatokat a megfelelő típus ’Be:’/’Ki:’ műveleteivel kell beolvasni/kiírni; feltételezhető a hibátlanság.
o A pincészet nyilvántartását tartalmazó file-ok azonosítása (klaviatúra-input):
File-név1
File-név2
…
¿ Üres sor jelzi a feldolgozás végét.
o Egy pincészet nyilvántartását tartalmazó text-file (*.BOR):
1. sor: Borok száma + szóköz + pincészet neve
2. sor:
Fajta1 + Megnevezés1 + Vidék1 + Évjárat1
+ vessző +
Cukor1
+ vessző + Szesz1 + Kiszerelés1
3.
sor: Fajta2
+ Megnevezés2 + Vidék2 + Évjárat2 + vessző +
Cukor2
+ vessző + Szesz2 + Kiszerelés2
…
o Az összes bor dekád-listája:
Évtized-kezdet1 - Évtized-vég1
* Megnevezés11 , Fajta11
Vidék11 , Évjárat11
, Cukorfok11 , Szeszfok11
* Megnevezés12 , Fajta12
Vidék12 , Évjárat12
, Cukorfok12 , Szeszfok12
…
Évtized-kezdet2 - Évtized-vég2
* Megnevezés21 , Fajta21
Vidék21 , Évjárat21
, Cukorfok21 , Szeszfok21
* Megnevezés22 , Fajta22
Vidék22 , Évjárat22
, Cukorfok22 , Szeszfok22
…
Ügyeljen
az elválasztójelekre (csillag, vessző)!
o A borok kiszerelés szerinti jellemzése (darabszám):
hordó * borszámhordó
üveg7 * borszámüveg7
üveg5 * borszámüveg5
Ügyeljen
az elválasztójelekre (csillag)!
11. Labor-foglaltság vizsgálata kétirányú, láncolt listával.
A laborok heti elfoglaltságát az alábbi szerkezetű elemeket tartalmazó kétirányú, láncolt listába foglalva tároljuk:
Típus
TLaborFoglaltságok=Tömb(TNap:TLaborFoglaltság)
TLaborFoglaltság=Lista(TNapirend),
TNapirend=Rekord(Mettől,Meddig:TIdő,
Ki:TSzak),
TNap=(Hétfő,Kedd,Szerda,Csütörtök,Péntek,Szombat,
Vasárnap) [az előadáson
taglalt felsorolástípus]
TSzak=(Info,Prog,LC,Met,Fiz)
[ez is felsorolástípus]
TIdő=Rekord(óra,perc:Egész)
Laboronként külön-külön listát vezet a foglaltságról. A listában TNap, s azon belül TIdő szerint rendezve vannak a foglaltsági adatok. Építse föl a listákat a file-ból érkező adatok alapján. Ha egy foglalási igény –részben vagy egészben– ütközik a már fölvettek valamelyikével, akkor azt egy másik, „teljesíthetetlen igények” listába gyűjti!
Kérésre jelenítse meg egy adott időpontban érvényes heti foglaltsági állapotát a laboroknak, naponkénti kitöltöttségi arányokat (%-ban), és az addig visszautasított igénylések adatait (igénylési adatok és annak az órának az adatai –ha több is van, elegendő közülük egy–, amely megakadályozta a foglalást).
TNemTeljesíthetők=Lista(TNemTeljesíthető)
TNemTeljesíthető=Rekord(
Labor:TLabor,
érkIdő:TDátum,
NTSzak:TSzak,
Mettől,Meddig:TIdő,
Szak:TSzak [emiatt lett
visszautasítva])
o teremigényelések sorozata szöveges file-ban – az igénylés-file egy eleme a file 6 egymásutáni sorában (igényélési idő szerint növekvő sorrendben):
igénylésIdő:TDátum [amikor az igénylést beadták]
labor:TLabor
nap:TNap
mettől:TIdő
meddig:TIdő
szak:TSzak
Természetesen a fent szereplő adatokat a megfelelő típus ’Be:’/’Ki:’ műveleteivel kell beolvasni/kiírni; feltételezhető a hibátlanság. Az eddig nem definiált típusokról a következőket kell tudni:
TDátum=Rekord(év,hó,nap:Egész)
TLabor=(PC1,PC2,PC3,PC5,PC5,MM,Grafika,MS) [ez is
felsorolástípus]
A TDátum típus input-szintaxisa: Egész+SZÓKÖZ+Egész+SZÓKÖZ+Egész.
Példa – két igénylés az input-file-ból:
2001 3 7 |
Egy 2001. március 7-diki igénylés… |
2001 3 17 |
… és egy másik … |
o Klaviatúra input: egy dátum és egy laborazonosító, amikori, és amelyik labor teremfoglaltsági állapotot és az addig visszautasítottak listáját kéri kiírni.
Egy példa – klaviatúra-input:
2001 3 7 |
Egy 2001. március 7. éjféli állapotkérés… |
12. Ünnepek nyilvántartása kétirányú, láncolt listákkal.
Nemzeti és családi ünnepeink dátumait egy kétirányú, láncolt, ciklikus listában tároljuk, időrendi sorrendben.
Típus
TÜnnepek=Lista(TÜnnep)
TÜnnep=Rekord(Mikor:TDátum,
Kör:TKör, Fajta:TFajta,
Megjegyzés:Szöveg
[pontosítás])
[Típusinvariáns: Mikor:TDátum-szerint
rendezve]
TDátum=Rekord(év,hó,nap:Egész)
TKör=(Családi,Baráti,Nemzeti,Egyéb)
TFajta=(Születésnap,Névnap,Szilveszter,Húsvét[SzP1]…).
Építsük föl a listát text-file-ból olvasott adatok alapján, amely össze-vissza tartalmazza az ünnepeket. A bemeneti file alábbi szerkezetű:
mikor:TDátum [az ünnep időpontja]
kör:TKör [milyen körben tekintendő ünnepnek]
fajta:TFajta [ünnep megnevezése]
megjegyzés:Szöveg [további pontosítás: Anya (szülinapja)]
Példa – ünnep file (SZP.UNN):
2000 4 24 |
Április 24. = Húsvét,. egyéb (értsd: „internacionális”) körben ünnepelt ünnep. Megjegyzés nincs, helyette üres a sor! |
2000 1 1 |
Január 1. = Szilveszter, egyéb (értsd: „internacionális”) körben ünnepelt ünnep. Megjegyzés nincs, helyette üres a sor! |
2000 12 25 |
December 25. = Anya születésnapja, családi körben ünnep. |
2000 3 15 |
Március 15. = a ’48-as forradalom’ évfordulója, nemzeti ünnep. |
2000 12 25 |
December 25. = Karácsony, „több, mint” nemzeti ünnep. Megjegyzés nincs, helyette üres a sor! |
Természetesen a fent szereplő adatokat a megfelelő típus ’Be:’/’Ki:’ műveleteivel kell beolvasni/kiírni, de feltételezhető a hibátlanság.
Legyen mód arra, hogy egy adott dátumhoz kilistázzuk azon ünnepeket, amelyek a dátum 8-napos környezetébe esik (előre és vissza)! A dátumot klaviatúráról (akár ismétlődően) kéri a program:
Egy példa – klaviatúra-input:
2000 3 22 |
2000. március 22. „környéki” ünneplista-kérés |
Tegyük lehetővé az alábbi karbantartó műveletek végrehajtását:
1. adott ünnep törlése (azon ünnepekre vonatkozik, amelyekre teljesül a megadott minta),
2. új ünnep fölvitele (ha ilyen megjegyzésű volt már, akkor visszakérdezni, hogy cserélni kell, vagy újként beilleszteni),
3. bizonyos ünnepek kilistázása (azon ünnepekre vonatkozik, amelyekre teljesül a megadott minta)
4. az évszám aktualizálása (azaz minden évszám a megadottal helyettesítése)
Ez utóbbi funkciók végrehajtását egy karbantartó file vezérli, amely tartalmazza, hogy milyen funkciót kell végrehajtani, s –a 4. kivételével– egy ünnepminta, amely egy „komplett” ünnepmegadás a fentebb tisztázott szintaxissal.
Példa – karbantartó file (SZP_MOD.UNN):
AKTUALIZÁLÁS |
2002-re áttérés |
LISTÁZÁS |
Listát kérünk azokról az ünnepekről, amelyek fajtája: „HÚSVÉT”, a többi mezője tetszőleges. |
TÖRLÉS |
Töröljük az „egykori” (2000.-beli) Húsvétot. |
ÚJ |
Új ünnepként regisztráljuk a Húsvétot. |
A karbantartó file nevét –természetesen– klaviatúráról kéri be (feltéve, hogy a felhasználó igényli).
13. Szótár-vizsgálat – keresés láncolt listákban
A kétnyelvű szótárak –leegyszerűsítve– tekinthetők szópárok listájának, ahol az első szó a tárgynyelv (pl. angol) szava, a második pedig a célnyelvé (pl. magyar). Természetesen előfordulhat, hogy egy szónak több párja is van. Ez azt jelenti, hogy ugyanaz a szó több párosításban is szerepel. Feltehető, hogy a szó (mind a tárgy, mind a célnyelvi „oldalon”) egyetlen szóból áll, hossza nem haladja meg a 20 karaktert. Gyakran előfordulnak azonos alakú, de különböző szófajú szavak (pl. ír – ige, ír – jelző), ezek megkülönböztethetősége érdekében a szópár mellett közöljük a szófajt is.
Beolvasva a szópárokat, amelyeket amelyeket amelyeket az input két egymást követő sora tartalmaz, felépít egy láncolt listát (szótárat), majd rendezi a tárgynyelvi szó szerint növekvően. Írja ki a rendezett szótárat a képernyőre lapozottan, táblázatosan! Majd keressen ki a szótárból néhány, paraméterként adott szót, amelyek hovatartozása eldönthető a szótár alapján: vagy tárgyszóként vagy célszóként található meg. Ezekhez egy-egy láncolt listát generál, amely a keresett szót, és „fordításait” tartalmazza. A keresésnél ki kell használnia, hogy a lista, amiben keres, az egyik irányban rendezett.
Típus
TBeSzótár=Lista(TSzópár)
TBeSzópár=Rekord(tSzó,cSzó:Szöveg,
szófaj:TSzófaj)
TSzófaj=(Ige,Főnév,Határozó,Jelző,NemDef)
[felsorolástípus]
TSzófordítások=Lista(TSzófordítás)
TSzófordítás=Lista(TTárgyVagyCélszó)
[Típusinvariáns: l:TSzófordítás |
Hossz(l)>1
az első elem a tárgyszó]
TTárgyVagyCélszó=Rekord(szó:Szöveg, szófaj:TSzófaj)
[tárgyszó esetén
a szófaj=NemDef]
o a szópárokat tartalmazó text-file (*.DIC):
tárgyszó + szóköz + célszó:Szöveg
szófaj:TSzófaj
…
¿ Üres sor jelzi a feldolgozás végét.
Természetesen a szófaj beolvasása a TSzófaj típus ’Be:’ műveletével végzendő el!
o a keresett szavakat tartalmazó text-file (*.WRD):
Keresett szó:Szöveg
…
¿ Üres sor jelzi a feldolgozás végét.
o Rendezett szótár:
tárgyszó : célszó1 (szófaj1)
: célszó2 (szófaj2)
: …
…
Ügyeljen a képernyő fenti „strukturáltságára”! Természetesen a szófaj kiírása a TSzófaj típus ’Ki:’ műveletével végzendő el!
o Keresett szavak fordítása:
Keresett szó : fordítás-szó1 (szófaj1)
: fordítás-szó2
(szófaj2)
: …
…
Ügyeljen a képernyő fenti „strukturáltságára”! Természetesen a szófaj kiírása a TSzófaj típus ’Ki:’ műveletével végzendő el!
14. Borpince – láncolt listák szétválogatása
Egy borpincészet a borairól feljegyzi a következő adatokat: fajta (vörös, fehér, rozé), megnevezése, borvidék (Alföldi, Badacsonyi, Egri, Mátrai, Móri, Soproni, Tokaji, Villányi), évjárat, cukortartalom, szesztartalom.
Olvassa be egy láncolt listába, majd válogassa szét fajtánként külön-külön listába, dinamikusan. E listákat évjárat szerint növekvően rendezi, majd kiírja a képernyőre, lapozottan!
A dinamikusan határozóval arra utaltam, hogy amint egy borral végzett, máris megszünteti a bemeneti listában, s így mindig a lehető legkevesebb helyet igényli a programja.
Meghatározza, hogy az egyes fajtáknak melyik a legidősebb bora, továbbá, hogy mekkora az átlagos cukortartalma (szintén fajtánként)!
Típus
TPincészet=Lista(TBor)
TBor=Rekord(fajta:TFajta,név:Szöveg,vidék:TVidék,
évjárat:Egész,cukor,szesz:Valós [tömegszázalék])
TFajta=(vörös,fehér,rozé)
TVidék=(Alföldi,Badacsonyi,Egri,Mátrai,Móri,Soproni,
Tokaji,Villányi)
A fenti felsorolás típusokat önálló modulokban meg kell valósítania. Természetesen a fent szereplő adatokat a megfelelő típus ’Be:’/’Ki:’ műveleteivel kell beolvasni/kiírni; feltételezhető a hibátlanság.
o A borokat tartalmazó text-file (*.BOR):
1. sor: Borok száma
2. sor:
Fajta1 + Megnevezés1 + Vidék1 +
Évjárat1 + vessző +
Cukor1
+ vessző + Szesz1
3.
sor: Fajta2
+ Megnevezés2 + Vidék2 + Évjárat2 + vessző +
Cukor2 + vessző + Szesz2
…
o A borok fajták szerinti listája:
Fajta1
* Megnevezés11 , Vidék11
Évjárat11 , Cukorfok11
, Szeszfok11
* Megnevezés12 , Vidék12
Évjárat12 , Cukorfok12
, Szeszfok12
…
Fajta2
* Megnevezés21 , Vidék21
Évjárat21 , Cukorfok21
, Szeszfok21
* Megnevezés12 , Vidék12
Évjárat22 , Cukorfok22
, Szeszfok22
…
Ügyeljen
az elválasztójelekre (csillag, vessző)!
o A borok fajták szerinti jellemzése (legidősb bor, átlag-cukorfok):
Fajta1 * legidősb bor megnevezése1
* átlagkor1
Fajta2 * legidősb bor
megnevezése2 * átlagkor2
…
Ügyeljen
az elválasztójelekre (csillag)!
15. Talált Tárgyak Osztálya – láncolt listák szétválogatása kategóriák szerint
A Talált Tárgyak Osztályán (TTO) az egyes tárgyakról feljegyezték a következőket: azonosítószám, kategória (ruházat, háztartási, szórakoztató, ékszer, irat, egyéb), megtalálás és visszaadás dátuma, érték. Ha nem jelentkezett még a gazdája érte, akkor a visszaadás dátuma: 0.0.0.
Olvassa be láncolt listákba a TTO nyilvántartását, majd rendezze kategórák szerint! Ezután válogassa szét külön listákba az egyes kategóriákat! A rendezett kategória-listákat írja ki a képernyőre lapozottan! A szétválogatás több listára vonatkozik, ezért a részfeladatot dinamikusan kell elvégeznie.
A dinamikusan határozóval arra utaltam, hogy amint egy talált tárggyal végzett, máris szüntesse meg az eredeti listában, s így programja mindig a lehető legkevesebb helyet igényli.
Határozza, hogy hány tétel tartozik az egyes kategóriákba, s melyik a legértékesebb az egyes kategóriákban!
Típus
TTTO=Lista(TTT)
TTT=Rekord(azonosító:Egész,kategória:TKategória,
megtalálás,visszaadás:TDátum,érték:Egész)
TKategória=(Ruházat,Háztartási,Szórakoztató,Ékszer,Irat,
Egyéb)
TDátum=Rekord(év,hó,nap:Egész)
A fenti felsorolás típusokat önálló modulokban meg kell valósítania. Természetesen a fent szereplő adatokat a megfelelő típus ’Be:’/’Ki:’ műveleteivel kell beolvasni/kiírni; feltételezhető a hibátlanság.
o A TTO nyilvántartását tartalmazó text-file (*.TTO):
1. sor: TTO tételek száma
2. sor:
azonosító1 + szóköz + érték1 + szóköz + kategória1
3. sor:
Mév1 pont Mhó1 pont Mnap1
4. sor:
Vév1 pont Vhó1 pont Vnap1
5. sor:
azonosító2 + szóköz + érték2 + szóköz + kategória2
6. sor:
Mév2 pont Mhó2 pont Mnap2
7. sor:
Vév2 pont Vhó2 pont Vnap2
…
o A rendezett kategória-lista (jellemzőkkel):
Kategória1 # darabszám1
* Azonosító11 , Érték11
Mév11 . Mhó11 . Mnap11
, Vév11 . Vhó11 . Vnap11
*
Azonosító12 , Érték12
Mév12 . Mhó12 . Mnap12
, Vév12 . Vhó12 . Vnap12
…
# Azonosító1leg1 , Érték1leg1
Mév1leg1 . Mhó1leg1 .
Mnap1leg1 , Vév1leg1 . Vhó1leg1 . Vnap1leg1
Kategória2 # darabszám2
* Azonosító21 , Érték21
Mév21 . Mhó21 . Mnap21
, Vév21 . Vhó21 . Vnap21
* Azonosító22 , Érték22
Mév22 . Mhó22 . Mnap22
, Vév22 . Vhó22 . Vnap22
…
# Azonosító2leg2 , Érték2leg2
Mév2leg2 . Mhó2leg2 .
Mnap2leg2 . Vév2leg2 . Vhó2leg2 . Vnap2leg2
…
A leg1 és a leg2 … indexek az
1., a 2. … kategória legértékesebb elmének indexét jelöli. Ügyeljen az
elválasztójelekre (kettős kereszt, csillag, pont, vessző)! Üres kategóriát nem
kell megjelenítenie.
Egy cég néhány vezetőjének közeljövőbeli (két adott dátum közötti) elfoglaltságait az alábbi szerkezetű elemeket tartalmazó kétirányú, láncolt listába foglalva tároljuk:
Típus
TElfoglaltságok=Lista(TElfoglaltság)
TElfoglaltságok=Rekord(
érkIdő:TDátum [az igény érkezési ideje],
Nap:TDátum,
Mettől,Meddig:TIdő, Ki:TNév,
Fontosság:TFontosság),
TDátum=Rekord(év,hó,nap:Egész)
TIdő=Rekord(óra,perc:Egész)
TFontosság=(VIP,Normál,Halasztható).
Vezetőnként külön-külön listát kell vezetni a foglaltságról. A listában érkIdő:TDátum, Nap:TDátum, s azon belül Mettől:TIdő szerint rendezve vannak a foglaltsági adatok. Módosítsa a listákat új, file-ból jövő bejegyzésekkel. (Kezdetben üresek a listák.) Azaz ha eddig még szabad időpontra vonatkozó igény jött, illessze be; ha –részben vagy egészben– foglalt a megjelölt időintervallum, akkor „fontossága” szerint szüntesse meg az érintett összes foglaltságot, és helyettesítse az újjal, vagy utasítsa vissza az igényt. A fontossági sorrend a legfontosabbal kezdve: VIP..Halasztható. Az esetleg visszautasítottakat (vagy „kitúrtakat”) egy másik listába fűzze! Kérésre jelenítse meg a heti elfoglaltságát egy adott személynek, és az addig hozzá érkezett, de visszautasított elfoglaltság-igénylések adatait is (igénylési adatok és azon partner neve, aki „megakadályozta” a foglalást, ha több ilyen is van, akkor is elég egyet).
Típus
TVisszautasítottak=Lista(TVisszautasított)
TVisszautasított=Rekord(
Név:TNév, érkIdő:TDátum,
Nap:TDátum,
Mettől,Meddig:TIdő,
Miatt:TNév [aki miatt
lett visszautasítva])
o elfoglaltásági igényelések sorozata szöveges file-ban igénylési idő szerint rendezetten érkeznek – az igénylés-file egy eleme a file 7 egymásutáni sorában:
érkIdő:TDátum [amikor az igénylést beadták]
vezető:TVezetőNév
nap:TDátum [amikorra vonatkozik: tetszőleges!!!]
mettől:TIdő
meddig:TIdő
partner:TNév
fontosság:TFontosság
Természetesen a fent szereplő adatokat a megfelelő típus ’Be:’/’Ki:’ műveleteivel kell beolvasni/kiírni, de feltételezhető a hibátlanság. Az eddig nem definiált típusról a következőket kell tudni:
TVezetőNév=(’Jó Isten’,’Luci Feri’,’Angyal Gábriel’)
[ez is felsorolástípus,
lehet persze más neveket is
ide tenni]
Példa – két igénylés az input-file-ból:
2001 3 7 |
Egy 2001. március 7-diki igénylés… |
2001 3 17 |
… és egy másik … (-: Nincs tévedés: egy korábbi dátumra vonatkozó kérésről van szó. Lassú volt a postás. :-) |
o Klaviatúra input: egy dátum és egy vezető neve: amikori, és aki elfoglaltsági állapotát, és az addig visszautasítottak listáját kéri kiírni.
Egy példa – klaviatúra-input:
2001 3 7 |
Egy 2001. március 7. éjféli állapotkérés… |
17. Szótár-vizsgálat – láncolt listák rendezése
A kétnyelvű szótárak –leegyszerűsítve– tekinthetők szópárok listájának, ahol az első szó a tárgynyelv (pl. angol) szava, a második pedig a célnyelvé (pl. magyar). Természetesen előfordulhat, hogy egy szónak több párja is van. Ez azt jelenti, hogy ugyanaz a szó több párosításban is szerepel. Feltehető, hogy a szó (mind a tárgy, mind a célnyelvi „oldalon”) egyetlen szóból áll, hossza nem haladja meg a 20 karaktert. Gyakran előfordulnak azonos alakú, de különböző szófajú szavak (pl. ír – ige, ír – jelző), ezek megkülönböztethetősége érdekében a szópár mellett közöljük a szófajt is.
Beolvasva a szópárokat, amelyeket az input két egymást követő sora tartalmaz, felépít egy láncolt listát (szótárat), majd rendezi a tárgynyelvi szó szerint növekvően. Írja ki a rendezett szótárat a képernyőre lapozottan, táblázatosan! Válaszoljon az alábbi kérdésekre:
o hány szócikket tartalmaz a szótár, ha egynek számítandók azok a párok, amelyben a tárgyszó megegyezik? (Például, ha előfordul a szótárban az (ír, writes) és az (ír, Irish) szópár, akkor ők együtt alkotnak egy szócikket: ír ® writes, Irish.)
o melyik tárgyszónak van a legtöbb párja?
Típus
TSzótár=Lista(TSzópár)
TSzópár=Rekord(tSzó,cSzó:Szöveg,
szófaj:TSzófaj)
TSzófaj=(Ige,
Főnév, Határozó, Jelző) [felsorolástípus]
o a szópárokat tartalmazó text-file (*.DIC):
tárgyszó + szóköz + célszó:Szöveg
szófaj:TSzófaj
…
¿ Üres sor jelzi a feldolgozás végét.
Természetesen a szófaj beolvasása a TSzófaj típus ’Be:’ műveletével végzendő el!
o Rendezett szótár (lapozottan, táblázatosan):
tárgyszó -> célszó (szófaj)
… ahány szópár van a szótárban
Ügyeljen arra, hogy a képernyőn a „->” jelek egymás alá essenek!
Természetesen a szófaj kiírása a TSzófaj típus ’Ki:’ műveletével végzendő el!
o Egyéb szótárjellemzők:
szócikkek száma
a legtöbb párral rendelkező tárgyszó
18. Régészeti relikviák vizsgálata – láncolt listák értéklistája
Egy ásatáson gyűjtött tárgyakról feljegyzik: a fajtáját (korsó, tányér stb.), épségét (százalék), anyagát (ami bizonyos alapanyagok halmazát jelenti) és becsült korát. Egy tárgy értékét a következő formulával definiálják: kor*épség.
Hozzon létre egy érték szerint rendezett láncolt listát, amelyet kiír a képernyőre rendezetten és lapozottan!
Típus
TrTárgyak=Lista(TrTárgy)
TrTárgy=Rekord(fajta:TFajta,épség:Egész
[százalék],
anyag:TAnyag,kor:Egész)
TFajta=(Korsó,Tányér,Kés,Kard,Tőr,Pohár,Egyéb)
TAnyag=Halmaz(TAlapanyag)
TAlapanyag=(Bronz,Vas,Réz,Agyag,Ón,Szövet,Más)
A fenti felsorolás és halmaz típusokat önálló modulokban kell valósítania. Természetesen a fent szereplő adatokat a megfelelő típus ’Be:’/’Ki:’ műveleteivel kell beolvasni/kiírni; feltételezhető a hibátlanság.
o A tárgyakat tartalmazó text-file (*.REL):
Tárgyak száma
Fajta1
Épség1
Anyag11 + vessző + Anyag12
+ …
Kor1
Fajta2
Épség2
Anyag21 + vessző + Anyag22
+ …
Kor2
…
o A tárgyak értékszerinti listája:
Fajta1 = Épség1 , Kor1
Anyag11 , Anyag12
+
Fajta2 = Épség2 ,
Kor2
Anyag21 , Anyag22
+
…
19. Borpince – láncolt listák szétválogatása
Egy borpincészet a borairól feljegyzi a következő adatokat: fajta (vörös, fehér, rozé), megnevezése, borvidék (Alföldi, Badacsonyi, Egri, Mátrai, Móri, Soproni, Tokaji, Villányi), évjárat, cukortartalom, szesztartalom.
Olvassa be egy láncolt listába, majd válogassa szét borvidékenként külön-külön listába, dinamikusan. E listákat szesztartalom szerint rendezi, és kiírja a képernyőre, lapozottan!
A dinamikusan határozóval arra utaltam, hogy amint egy borral végzett, máris megtörli a bemeneti listából, s így folyamatosan a lehető legkevesebb helyigénnyel dolgozik a programja.
Meghatározza, hogy az egyes borvidékeknek melyik a legidősebb bora, továbbá, hogy milyen szélső határok között mozognak a borai szesztartalma (természetesen vidékenként)!
Típus
TPincészet=Lista(TBor)
TBor=Rekord(fajta:TFajta,név:Szöveg,vidék:TVidék,
évjárat:Egész,cukor,szesz:Valós [tömegszázalék])
TFajta=(vörös,fehér,rozé)
TVidék=(Alföldi,Badacsonyi,Egri,Mátrai,Móri,Soproni,
Tokaji,Villányi)
A fenti felsorolás típusokat önálló modulokban meg kell valósítania. Természetesen a fent szereplő adatokat a megfelelő típus ’Be:’/’Ki:’ műveleteivel kell beolvasni/kiírni; feltételezhető a hibátlanság.
o A borokat tartalmazó text-file (*.BOR):
1. sor: Borok száma
2. sor: Fajta1
+ Megnevezés1 + Vidék1 + Évjárat1 + vessző +
Cukor1
+ vessző + Szesz1
3. sor: Fajta2
+ Megnevezés2 + Vidék2 + Évjárat2 + vessző +
Cukor2
+ vessző + Szesz2
…
o A borok fajták szerinti listája:
Vidék 1
* Megnevezés11 , Fajta11
Évjárat11 , Cukorfok11
, Szeszfok11
* Megnevezés12 , Fajta12
Évjárat12 , Cukorfok12
, Szeszfok12
…
Vidék2
* Megnevezés21 , Fajta21
Évjárat21 , Cukorfok21
, Szeszfok21
* Megnevezés22 , Fajta22
Évjárat22 , Cukorfok22
, Szeszfok22
…
Ügyeljen az elválasztójelekre
(csillag, vessző)!
o A borok fajták szerinti jellemzése (legidősb bor, átlag-cukorfok):
Vidék1 * legidősb bor megnevezése1 * Min1
- Max1
Vidék2 * legidősb bor
megnevezése2 * Min2 - Max2
…
Ügyeljen az elválasztójelekre
(csillag, kötőjel)!
20. Talált Tárgyak Osztálya – láncolt listák szétválogatása
A Talált Tárgyak Osztályán (TTO) az egyes tárgyakról feljegyezték a következőket: azonosítószám, kategória (ruházat, háztartási, szórakoztató, ékszer, irat, egyéb), megtalálás és visszaadás dátuma, érték, és a megtaláló valamint a tulajdonos neve. Ha nem jelentkezett még a gazdája érte, akkor a visszaadás dátuma: 0.0.0, a tulajdonos: „ISMERETLEN”.
Olvassa be láncolt listákba a TTO nyilvántartását, majd növekvően rendezze a tárgy TTO-n töltött idő szerint úgy, hogy ha még nem került vissza a gazdájához, akkor a mai napot kell visszaadás dátumnak tekinteni! Ezután válogassa szét két listába a visszaadottakat és a még vissza nem adottakat! A két listát írja ki a képernyőre lapozottan! A szétválogatást dinamikusan kell végeznie.
A dinamikusan határozóval arra utaltam, hogy amint egy talált tárggyal végzett, máris szüntesse meg az eredeti listában, s így programja mindig a lehető legkevesebb helyet igényli.
Határozza, hogy hány tételből állnak az egyes listák, továbbá: melyik a legértékesebb, még a TTO-n található talált tárgy!
Típus
TTTO=Lista(TTT)
TTT=Rekord(azonosító:Egész,kategória:TKategória,
megtalálás,visszaadás:TDátum,érték:Egész,
megtaláló,tulajdonos:Szöveg)
TKategória=(Ruházat,Háztartási,Szórakoztató,Ékszer,Irat,
Egyéb)
TDátum=Rekord(év:1900..2005,hó:1..12,nap:1..31)
A fenti felsorolás típusokat önálló modulokban meg kell valósítania. Természetesen a fent szereplő adatokat a megfelelő típus ’Be:’/’Ki:’ műveleteivel kell beolvasni/kiírni; feltételezhető a hibátlanság.
o A TTO nyilvántartását tartalmazó text-file (*.TTO):
1. sor: TTO tételek száma
2. sor: azonosító1
+ szóköz + érték1 + szóköz + kategória1
3. sor: Mév1
pont Mhó1 pont Mnap1
4. sor: megtaláló1
5. sor: Vév1
pont Vhó1 pont Vnap1 + szóköz
6. sor: tulajdonos1
7. sor: azonosító2
+ szóköz + érték2 + szóköz + kategória2
8. sor: Mév2
pont Mhó2 pont Mnap2
9. sor: megtaláló2
10. sor: Vév2 pont Vhó2 pont Vnap2
11 sor: tulajdonos2
…
o A rendezett visszaadott és vissza nem adott tárgyak listája (jellemzőkkel):
Visszaadottak # darabszámva
* Azonosítóva 1 , Értékva
1
Mévva 1 . Mhóva 1
. Mnapva 1 - Vévva 1 . Vhóva 1 . Vnapva 1
* Azonosítóva 2 , Értékva
2
Mévva 2 . Mhóva
2 . Mnapva 2 - Vévva 2 . Vhóva 2 . Vnapva
2
…
# Azonosítóva leg , Értékva
leg
Nem visszaadottak # darabszámnva
* Azonosítónva 1 , Értéknva
1
Mévnva 1 . Mhónva 1
. Mnapnva 1 - Vévnva 1 . Vhónva 1 . Vnapnva
1
* Azonosítónva 2 , Értéknva
2
Mévnva 2 . Mhónva
2 . Mnapnva 2 - Vévnva 2 . Vhónva 2 .
Vnapnva 2
…
A leg … indexek a még nem visszaadottak
legértékesebb elmének indexét jelöli. Ügyeljen az elválasztójelekre (kettős
kereszt, csillag, vessző, pont)! Üres kategóriát nem kell megjelenítenie.
[SzP1] Érdemes továbbiakkal kibővíteni ezt a felsorolás.