Listák …


(
Beadandó feladatok
Programozásmódszertan 2. félévéhez,
2005 tavasza
)


Általános tudnivalók

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án­coltan á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 vonat­kozik 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 meg­kí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 bizto­sí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-állo­má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 teszt­adatsor. (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 útmuta­tót!)

 

Feladatregiszter:

1.   Labor-foglaltság vizsgálata kétirányú, láncolt listával. 4

2.   Cégvezetők elfoglaltságainak kezelése kétirányú, láncolt listával, programfajta figyelembe vételével. 6

3.   Szótár-vizsgálat – láncolt listák átszervezése. 8

4.   Régészeti relikviák vizsgálata – láncolt listák fajták szerinti szétválogatása. 9

5.   Borpince – láncolt listák szétválogatása. 10

6.   Labor-foglaltság vizsgálata kétirányú, láncolt listával, órafajták figyelembe vételével. 12

7.   Üdülések nyilvántartása kétirányú, láncolt listával. 14

8.   Szótár-vizsgálat – láncolt listák átszervezése. 16

9.   Régészeti relikviák vizsgálata – láncolt listák szűrése. 17

10. Borpince – láncolt listák összefuttatása. 18

11. Labor-foglaltság vizsgálata kétirányú, láncolt listával. 20

12. Ünnepek nyilvántartása kétirányú, láncolt listákkal. 22

13. Szótár-vizsgálat – keresés láncolt listákban. 24

14. Borpince – láncolt listák szétválogatása. 26

15. Talált Tárgyak Osztálya – láncolt listák szétválogatása kategóriák szerint 27

16. Cégvezetők elfoglaltságainak kezelése kétirányú, láncolt listával, fontosság figyelembe vételével. 29

17. Szótár-vizsgálat – láncolt listák rendezése. 31

18. Régészeti relikviák vizsgálata – láncolt listák értéklistája. 32

19. Borpince – láncolt listák szétválogatása. 33

20. Talált Tárgyak Osztálya – láncolt listák szétválogatása. 34

 


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 lis­tá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észbenfoglalt 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).

Típus

  TKitúrtak=Lista(TKitúrt)
  TKitúrt=Rekord(Labor:TLabor,
                 érkIdő:TDátum, Szak:TSzak, Mettől:TIdő)

A bemenet:

o       teremigényelések sorozata szöveges file-ban – az igénylés-file egy eleme a file 6 egymás­utá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 be­olvasni/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
PC1
HÉTFŐ
7 0
9 45
INFO

Egy 2001. március 7-diki igénylés…

2001 3 17
PC2
PÉNTEK
12 15
16 30
PROG

… és egy másik …

o       Klaviatúra input: egy dátum és egy laborazonosító, amikori, és amelyik labor teremfog­laltsági állapotot kéri kiírni.

Egy példa – klaviatúra-input:

2001 3 7
MM

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 figye­lembe 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észbenfoglalt 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 fontos­sági sorrend a legfontosabbal kezdve: Megbeszélés..Party. Az esetleg visszautasította­kat (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])

A bemenet:

o       elfoglaltsági igényelések sorozata szöveges file-ban igénylési idő szerint rendezetten ér­keznek – 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 be­olvasni/kiírni, de feltételezhető a hibátlanság. Az eddig nem definiált típusról a követke­ző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
Luci Feri
Belze Bub
1999 12 31
23 0
59
BESZÉLGETÉS

Egy 2001. március 7-diki igénylés…

2000 1 7
Jó Isten
Assisi Szent Ferenc
2000 1 1
12 15
1
ELŐADÁS

… é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őfor­dulhat, hogy egy szónak több párja is van. Ez azt jelenti, hogy ugyanaz a szó több párosítás­ban 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ön­bö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)

A bemenet:

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!

A kimenet:

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 lis­tá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észe­tesen a fent szereplő adatokat a megfelelő típus ’Be:’/’Ki:’ műveleteivel kell beolvasni/ki­írni; feltételezhető a hibátlanság.

A bemenet:

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
 

A kimenet:

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é), megne­vezé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éte­lezhető a hibátlanság.

A bemenet:

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

 

A kimenet:

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 lis­tá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észbenfoglalt a megjelölt időintervallum, akkor „fon­tossá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ény­lé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).

Típus

  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)

A bemenet:

o       teremigényelések sorozata szöveges file-ban – az igénylés-file egy eleme a file 7 egymás­utá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 be­olvasni/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
PC1
HÉTFŐ
7 0
9 45
INFO
REGULÁRIS

Egy 2001. március 7-diki igénylés…

2001 3 17
PC2
PÉNTEK
12 15
16 30
PROG
SPECI

… és egy másik …

o       Klaviatúra input: egy dátum és egy laborazonosító, amikori, és amelyik labor teremfog­laltsági állapotot és az addig visszautasítottak listáját kéri kiírni.

Egy példa – klaviatúra-input:

2001 3 7
PC2

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étre­hozá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
10 10 10

A „Kastély”-ban mindenfajta szobából 10 van.

BAGOLYVÁR
2 5 15

A „Bagolyvár”-ban csak 2 1-ágyas, 5 2-ágyas szoba van, s a többi (15) 3-ágyas.

PUTRI
0 0 1

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
Hamari Húgó
2001 5 31
7
4
BAGOLYVÁR

2001. február 11.-n érkezett a Hamari csa­lád nyaralási megrendelése, amely 4 fő el­helyezését kéri május 31.-ével kezdve 7 na­pon át a Bagolyvárban.

2001 4 1
Pénz Elek
2001 7 13
5
2
KASTÉLY

Pénzes hp. a Kastélyban nyaralna július 13.-ától 5 napig. Mindez egy április 1.-ei meg­rendelésükből derül ki.

2001 4 1
Hamari Húgó
2001 3 31
14
4
PUTRI

Hamariék második megrendelésük –való­színűsíthetően postai okok miatt– csak ápri­lis elsején érkezett meg, pedig március 31.-től 14 napon át tavaszoltak volna a Putri­ban.

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őfor­dulhat, hogy egy szónak több párja is van. Ez azt jelenti, hogy ugyanaz a szó több párosítás­ban 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ön­bö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 összetar­toznak, 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]

A bemenet:

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!

A kimenet:

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 lis­tá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észe­tesen a fent szereplő adatokat a megfelelő típus ’Be:’/’Ki:’ műveleteivel kell beolvasni/ki­írni; feltételezhető a hibátlanság.

A bemenet:

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
 

A kimenet:

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é), megne­vezé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 rendez­ze 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 vonatko­zik, 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éte­lezhető a hibátlanság.

A bemenet:

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

 

A kimenet:

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 lis­tá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 valamelyi­ké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).

Típus

  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])

A bemenet:

o       teremigényelések sorozata szöveges file-ban – az igénylés-file egy eleme a file 6 egy­má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 be­olvasni/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
PC1
HÉTFŐ
7 0
9 45
INFO

Egy 2001. március 7-diki igénylés…

2001 3 17
PC2
PÉNTEK
12 15
16 30
PROG

… és egy másik …

o       Klaviatúra input: egy dátum és egy laborazonosító, amikori, és amelyik labor teremfog­laltsági állapotot és az addig visszautasítottak listáját kéri kiírni.

Egy példa – klaviatúra-input:

2001 3 7
MM

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
EGYÉB
HÚSVÉT

Április 24. = Húsvét,. egyéb (értsd: „inter­nacionális”) körben ünnepelt ünnep.

Megjegyzés nincs, helyette üres a sor!

2000 1 1
EGYÉB
SZILVESZTER

Január 1. = Szilveszter, egyéb (értsd: „inter­nacionális”) körben ünnepelt ünnep.

Megjegyzés nincs, helyette üres a sor!

2000 12 25
CSALÁDI
SZÜLETÉSNAP
Anya

December 25. = Anya születésnapja, családi körben ünnep.

2000 3 15
NEMZETI
ÉVFORDULÓ
48-AS FORRADALOM

Március 15. = a ’48-as forradalom’ évfordu­lója, nemzeti ünnep.

2000 12 25
EGYÉB
KARÁCSONY

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 be­olvasni/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” ünnep­megadás a fentebb tisztázott szintaxissal.

Példa – karbantartó file (SZP_MOD.UNN):

AKTUALIZÁLÁS
2002

2002-re áttérés

LISTÁZÁS
*
*
HÚSVÉT
*

Listát kérünk azokról az ünnepekről, ame­lyek fajtája: „HÚSVÉT”, a többi mezője tet­szőleges.

TÖRLÉS
2002 4 24
*
HÚSVÉT
*

Töröljük az „egykori” (2000.-beli) Húsvé­tot.

ÚJ
2002 4 1
EGYÉB
HÚSVÉT

Ú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őfor­dulhat, hogy egy szónak több párja is van. Ez azt jelenti, hogy ugyanaz a szó több párosítás­ban 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ön­bö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övek­vő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 alap­já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]

A bemenet:

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.

A kimenet:

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é), megne­vezé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, dinamiku­san. 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éte­lezhető a hibátlanság.

A bemenet:

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

 

A kimenet:

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 vissza­adá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 dinami­kusan kell elvégeznie.

A dinamikusan határozóval arra utaltam, hogy amint egy talált tárggyal végzett, máris szün­tesse 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éte­lezhető a hibátlanság.

A bemenet:

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
 

A kimenet:

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 je­löli. Ügyeljen az elválasztójelekre (kettős kereszt, csillag, pont, vessző)! Üres kategóriát nem kell megjelenítenie.


16.  Cégvezetők elfoglaltságainak kezelése kétirányú, láncolt listával, fontosság 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á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ódo­sí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észbenfoglalt a megjelölt időintervallum, akkor „fontossága” szerint szüntesse meg az érintett összes foglalt­ságot, és helyettesítse az újjal, vagy utasítsa vissza az igényt. A fontossági sorrend a legfonto­sabbal 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])

A bemenet:

o       elfoglaltásági igényelések sorozata szöveges file-ban igénylési idő szerint rendezetten ér­keznek – 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 be­olvasni/kiírni, de feltételezhető a hibátlanság. Az eddig nem definiált típusról a követke­ző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
Luci Feri
2001 3 8
23 0
23 59
Belze Bub
VIP

Egy 2001. március 7-diki igénylés…

2001 3 17
Jó Isten
2001 3 9
12 15
16 30
Assisi Szent Ferenc
NORMÁL

… é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
Luci Feri

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őfor­dulhat, hogy egy szónak több párja is van. Ez azt jelenti, hogy ugyanaz a szó több párosítás­ban 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ön­bö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]

A bemenet:

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!

A kimenet:

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észe­tesen a fent szereplő adatokat a megfelelő típus ’Be:’/’Ki:’ műveleteivel kell beolvasni/ki­írni; feltételezhető a hibátlanság.

A bemenet:

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
 

A kimenet:

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é), megne­vezé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, dina­mikusan. 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 be­meneti 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éte­lezhető a hibátlanság.

A bemenet:

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

 

A kimenet:

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 vissza­adá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 dinamiku­san kell végeznie.

A dinamikusan határozóval arra utaltam, hogy amint egy talált tárggyal végzett, máris szün­tesse 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éte­lezhető a hibátlanság.

A bemenet:

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
 

A kimenet:

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. Ügyel­jen az elválasztójelekre (kettős kereszt, csillag, vessző, pont)! Üres kategóriát nem kell megjelenítenie.

 



[1] Ehhez segítségül felhasználható egy „Cserél” nevű program. (ZIP)


 [SzP1] Érdemes további­akkal kibővíteni ezt a felsorolás.