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. 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 olykor-olykor 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.
A beadandó feladat beadásáról ():
1. a meghatározott formai feltételeknek eleget nem tevő dolgozatokat nem értékelünk (azt újra be kell adni helyesen; azonban a határidő nem módosul);
2. a beadás e-mail-ben történik a papne@ludens.elte.hu címre(ennek dátuma a meghatározó); az e-mail tárgya legyen: Feladatsorszám+„Beadandó”; a dokumentációt ettől függetlenül papíron is beadhatja (ami azonban nem helyettesíti az e-mailt-és beadást!), ekkor kaphat részletes értékelést munkájáról;
3. Beadási határidő: április 30. 24 óra.
4. késedelmes beadás esetén a jegyet hetente 1 jeggyel csökkentjük;
1. Labor-foglaltság vizsgálata kétirányú, dinamikusan láncolt listával.
A laborok heti elfoglaltságát az alábbi szerkezetű elemeket tartalmazó kétirányú, dinamikusan 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,Foglalt) [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, akkor az ütközéseket egy másik listába fűzze, mégpedig úgy, hogy kerüljön be a teljesíthetetlen igény, mögé pedig azok az elemek, melyek megakadályozzák, ezekben a nap helyén a Foglalt konstans szerepeljen. Az ütközések is laboronként vannak nyilvántartva. Az ütközéseket tartalmazó lista típusa az előzőeknek megfelelően TlaborFoglaltságok. Kérésre jelenítse meg a heti elfoglaltságát egy adott labornak, és az ütközések adatait (mely időpontban, mely foglaltságok alapján nem teljesíthető az igény).
o teremigénylések sorozata szöveges file-ban – az igénylés-file egy eleme a file 5 egymásutáni sorában:
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 Tlabor típus:
TLabor=(PC1,PC2,PC3,PC5,PC5,MM,Grafika,MS) [ez is felsorolástípus]
A TIdő típus input-szintaxisa: Egész+SZÓKÖZ+Egész
Példa – két igénylés az input-file-ból:
PC1 |
Egy PC1-es igénylés… |
PC2 |
… és egy másik … |
o Klaviatúra input: egy laborazonosító, amelyik labor teremfoglaltsági állapotot kéri kiírni.
2. Cégvezetők elfoglaltságainak kezelése statikusan 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ó statikusan láncolt listába foglalva tároljuk:
Típus
TElfoglaltságok=Lista(TElfoglaltság)
TElfoglaltság=Rekord(
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 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ések 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 (ha mindegyiknél fontosabb igény érkezett), é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! Írja ki az elfoglaltságát minden vezetőnek, és a visszautasított elfoglaltság-igénylések adatait! A visszautasítottak is vezetőnként külön-külön listában vannak, egy visszautasított lista típusa ezeknek megfelelően: TElfoglaltságok.
o elfoglaltsági igénylések sorozata szöveges file-ban érkezik – az igénylés-file egy eleme a file 6 egymásutáni sorában:
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=(Kiss Feri, Tóth Jani, Angyal Gábor)
[ez is felsorolástípus, lehetnek persze
más
nevek is]
Példa –igénylés az input-file-ból:
Kiss
Feri |
Egy igénylés… |
3. Szótár-vizsgálat –dinamikusan 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 és a szófajokat, amelyeket az input 3 egymást követő sora tartalmaz, építsen fel egy dinamikusan 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.
Konstans
Maxtszó= ??
Típus
TBeSzótár=Lista(TBeSzó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=Tömb(1..
Maxtszó: TSzócikk)
TSzócikk=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:
tárgyszó:Szöveg
célszó:Szöveg
szófaj:TSzófaj
…
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!
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 kétirányú statikusan láncolt listába, majd fajtánként válogassa szét külön dinamikusan láncolt egyirányú listákba. E listákat írja ki a képernyőre rendezetten és lapozottan!
A fajta-listák rendezését épség szerint csökkenően végezze 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 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:
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 –dinamikusan 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 dinamikusan láncolt listába, majd válogassa szét a szerint, hogy mely évtizedbe sorolandó az adott bor. A szétválogatást a nagyszámú listára való tekintettel dinamikusan kell elvégeznie. E listákat írja ki a képernyőre fajták szerint rendezve, lapozottan!
A dinamikusan határozóval arra utaltam, hogy amint egy borral végzett, máris szüntesse meg a bemeneti listában, s így mindig a lehető legkevesebb helyet igényli a programja.
Határozza meg, 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])
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 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 Minden borfajtához 6 sor tartozik. A borokat tartalmazó text-file:
Fajta1
Megnevezés1
Vidék1
Évjárat1
Cukor1
Szesz1
…
o A borok évtizedenkénti 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
…
Ügyeljen az elválasztójelekre (csillag, vessző)!
o A borok évtizedenkénti jellemzése (borok száma, átlag-cukorfok):
Évtizedkezdet1 - Évtizedvég1
* borszám1 * átlcukor1
Évtizedkezdet2 - Évtizedvég2 * borszám2 *
átlcukor2
…
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ás]
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 (ha az összesnél fontosabb), é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! Ide kerülnek azok a foglaltságok is, amiket megszüntetett egy fontosabb igény érkezése miatt. Kérésre jelenítse meg a heti elfoglaltságát egy adott labornak, és az arra a laborra vonatkozó, visszautasított igénylések adatait. A visszautasítottakat tartalmazó lista típusa az előzőeknek megfelelően TlaborFoglaltságok.
o teremigényelések sorozata szöveges file-ban – az igénylés-file egy eleme a file 6 egymásutáni sorában:
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. A Tlabor típus a következő:
TLabor=(PC1,PC2,PC3,PC5,PC5,MM,Grafika,MS) [ez is felsorolástípus]
A TIdő típus input-szintaxisa: Egész+SZÓKÖZ+Egész
Példa – igénylés az input-file-ból:
PC1 |
Egy igénylés… |
o Klaviatúra input: egy laborazonosító, amikori, és amelyik labor teremfoglaltsági állapotát és az addig visszautasítottak listáját kéri kiírni.
7. Üdülések nyilvántartása dinamikusan láncolt listákkal.
Egy üdülőhelyről a cég az üdülési adatokat az alábbi módon tárolja dinamikusan láncolt listákban:
Típus
TÜdülőHely=Lista(TSzoba)
Tszoba= Rekord(Szobaszám:Egész,
Méret:Egész)
Tnyaralók=Lista(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).
Az üdülő szobái listájának létrehozása egy text-file-ból jövő adategyüttes alapján történik. Az alábbi adatok tartalmazzák, hogy milyen szobái vannak:
Szobaméret: egész
Db:egész
Szobaszámok: db darab szobasorszám
Példa – üdülő file:
1 3 |
1 ágyas szobából 3 van: ezek az 1 10 és 20-as szobák. |
2 10 |
2 ágyas szobából 10 van: ezek a 2 3 4 5 6 11 12 13 14 és 15-ös szobák. |
Ezen adatokkal létrehozhatók az üres szobák. 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ázat. E file szerkezete (soronkénti bontásban);
név:TNév [a megrendelő]
mettől:TDátum
napDb:Egész
fő:Egész [az igényelt ágyak száma]
Példa – nyaralási igények :
Hamari
Húgó |
A Hamari család nyaralási megrendelése, amely 3 fő elhelyezését kéri május 31.-ével kezdve 7 napon át. |
Pénz Elek |
Pénzes házaspár. július 13.-ától 5 napig. nyaralna |
Ha valakinek az igénye nem teljesíthető (nincs pontosan annyi személyes szabad szoba a kívánt időpontban), akkor az igény átkerül a visszautasítottak közé. A visszautasított megrendeléseket egy külön listában halmozzuk föl. Kérésre jelenítse meg az érvényes szoba-foglaltsági adatokat szobánként dátum szerint rendezve, és a visszautasított igénylések adatait.
8. Szótár-vizsgálat – statikusan 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 statikusan láncolt listát (a „bemeneti szótárat”), majd szervezze át 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!
Típus
TBeSzótár=Lista(TBeSzó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:
tárgyszó:Szöveg
célszó:Szöveg
szófaj:TSzófaj
…
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 – dinamikusan 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 az adatokat egy dinamikusan láncolt listába, majd fajtánként válogassa szét egy-egy kor szerint rendezett listába, majd írja ki a képernyőre lapozottan!
A dinamikusan határozóval arra utaltam, hogy amint egy tárggyal végzett, máris szüntesse meg a bemeneti listában, s így mindig a lehető legkevesebb helyet igényli a programja.
Határozza meg, hogy az egyes fajtáknak mennyi az átlagkora és átlagosan hányféle alapanyagból készültek!
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:
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 (átlag kora és átlag alapanyag száma):
Fajta1
# átlagkor1 # átlagalapanyagszám1
* Épség11 , Kor11
Anyag111 , Anyag112
+
* Épség12 , Kor12
Anyag121 , Anyag122
+
…
Fajta2 # átlagkor1 #
átlagalapanyagszám2
* Épség21 , Kor21
Anyag211 , Anyag212
+
…
Ügyeljen az elválasztójelekre (kettős kereszt, csillag, vessző)!
10. Borpince – statikusan 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.
Olvassa be statikusan láncolt listákba 2 megadott pincészet nyilvántartását, majd rendezze ezeket borvidék szerint! E listákat írja ki a képernyőre lapozottan! Ezek után összefuttatással készítsen egy olyan listát, amelybe az előbbi listák elemei kerülnek és ezt is írja ki a képernyőre szintén lapozottan!
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 pincészet nyilvántartását tartalmazó file-ok azonosítása (klaviatúra-input):
File-név1
File-név2
o Egy pincészet nyilvántartását tartalmazó text-file :
1. sor: Borok száma + szóköz +
pincészet neve
2. sor: Fajta1
+ vessző + Megnevezés1 + vessző + Vidék1 + Évjárat1
+ vessző + Cukor1 + vessző + Szesz1
3. sor: Fajta2
+ vessző + Megnevezés2 + vessző + Vidék2 + Évjárat2
+ vessző + Cukor2 + vessző + Szesz2
…
* Pincészet neve1 Megnevezés1 , Fajta1
Vidék1 , Évjárat1
, Cukorfok1 , Szeszfok1
* Pincészet neve2 Megnevezés2 , Fajta2
Vidék2 , Évjárat2
, Cukorfok2 , Szeszfok2
…
Ügyeljen az elválasztójelekre (csillag, vessző)!
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, Fajta:TFajta,
Megjegyzés:Szöveg
[pontosítás])
TDátum=Rekord(év,hó,nap:Egész)
TFajta=(Születésnap,Névnap,Szilveszter,Húsvét…).
Építsük föl a dátum szerint rendezett listát text-file-ból olvasott adatok alapján. A file rendezetlenül tartalmazza az ünnepeket. A bemeneti file alábbi szerkezetű:
mikor:TDátum [az ünnep időpontja]
fajta:TFajta [ünnep megnevezése]
megjegyzés:Szöveg [pontosítás: Anya (szülinapja)]
Példa – ünnep file :
2006 4 18 |
Április 18. = Húsvét Megjegyzés nincs, helyette
üres a sor! |
2006 1 1 |
Január 1. = Szilveszter Megjegyzés nincs, helyette üres a sor! |
2006 12 25 |
December 25. = Anya
születésnapja |
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 esnek (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:
2006 3 22 |
2006. 03 22. „környéki” lista-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),
Ez utóbbi funkciók végrehajtását egy karbantartó file vezérli, amely tartalmazza, hogy milyen funkciót kell végrehajtani, s egy ünnepminta, amely egy „komplett” ünnepmegadás a fentebb tisztázott szintaxissal.
Példa – karbantartó file :
TÖRLÉS |
Töröljük az „egykori”
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).
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 borvidék szerint növekvően rendezze, majd írja ki 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.
Határozza meg, 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: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 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 borokat tartalmazó text-file :
1. sor: Borok száma
2. sor: Fajta1
+ vessző + Megnevezés1 + vessző + Vidék1 + vessző +
Évjárat1 + szóköz + Cukor1
3. sor: Fajta2
+ vessző + Megnevezés2 + vessző + Vidék2 + vessző +
Évjárat2 + szóköz + Cukor2
…
o A borok fajták szerinti listája:
Fajta1
* Megnevezés11 , Vidék11
Évjárat11 , Cukorfok11
* Megnevezés12 , Vidék12
Évjárat12 , Cukorfok12
…
Fajta2
* Megnevezés21 , Vidék21
Évjárat21 , Cukorfok21
* Megnevezés12 , Vidék12
Évjárat22 , Cukorfok22
…
Ügyeljen az elválasztójelekre (csillag, vessző)!
o A borok fajták szerinti jellemzése (legidősebb bor, átlag-cukorfok):
Fajta1 * legidősebb bor megnev.1
* átlagcukorfok1
Fajta2 * legidősebb bor megnev.2 * átlagcukorfok2
…
Ü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ába a TTO nyilvántartását, majd rendezze kategóriák szerint! A rendezett kategória-listát írja ki a képernyőre lapozottan! Ezután válogassa szét külön listákba az egyes kategóriákat! A szétválogatást 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 meg, 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 : minden tárgyhoz 3 sor tartozik
1.sor: azonosító1 + szóköz + érték1 +
szóköz + kategória1
2.sor: Mév1 pont Mhó1 pont Mnap1
3.sor: Vév1 pont Vhó1 pont Vnap1
…
o A rendezett kategória-lista :
Kategória1
* 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
…
Kategória2
* 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
…
Kategória1 # darabszám1 #
Azonosító1leg1 # Érték1leg1
Kategória2 # darabszám2
# Azonosító2leg2 # Érték2leg2
A leg1 és a leg2 … indexek az 1., a 2. … kategória legértékesebb elmének indexét jelölik.
Ü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 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(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 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 utasítsa vissza az igényt. A fontossági sorrend a legfontosabbal kezdve: VIP..Halasztható. Az esetleg visszautasítottakat egy másik listába fűzze! Kérésre jelenítse meg egy adott személy egy megadott dátumot követő egy heti elfoglaltságát, és az addig hozzá érkezett, de visszautasított elfoglaltság-igénylések adatait is. A visszautasított igények is Telfoglaltságok típusú listában legyenek tárolva.
o elfoglaltsági igénylések sorozata szöveges file-ban adott, az igénylés-file egy eleme a file 6 egymás utáni sorában található:
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=(Nagy Pista, Tóth Laci,
Orosz Ede)
[ez is felsorolástípus, tetszőleges
nevek]
Példa –igénylés az input-file-ból:
Nagy Pista |
Egy igénylés… |
o Klaviatúra input: egy dátum(amit követő egy hét) és egy vezető neve(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 állapotkérés… |
17. Szótár-vizsgálat – statikusan 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, építsen fel egy statikusan láncolt listát (szótárat), majd rendezze 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 :
tárgyszó + szóköz + célszó:Szöveg
szófaj:TSzófaj
…
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 – statikusan 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 statikusan láncolt listát, amelyet kiír a képernyőre rendezetten és lapozottan! Állapítsa meg, hogy melyik fajta tárgyból szerepel a legtöbb a nyilvántartásban!
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 (minden tárgyhoz 4 sor tartozik):
Fajta1
Épség1
Anyag11 + szóköz + Anyag12
+ …
Kor1
Fajta2
Épség2
Anyag21 + szóköz + Anyag22
+ …
Kor2
…
o A tárgyak értékszerinti listája:
Fajta1 = Épség1 , Kor1
(Érték1)
Anyag11 , Anyag12
+
Fajta2 = Épség2 ,
Kor2 (Érték2)
Anyag21 , Anyag22
+
…
Legtöbb nyilvántartott fajta: Fajtaleg
19. Borpince –kétirányú 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, szesztartalom.
Olvassa be egy kétirányú láncolt listába, majd válogassa szét fajtánként külön-külön listába, dinamikusan. E listákat szesztartalom szerint rendezze, és írja ki a képernyőre, lapozottan!
A dinamikusan határozóval arra utaltam, hogy amint egy borral végzett, máris törölje a bemeneti listából, s így folyamatosan a lehető legkevesebb helyigénnyel dolgozik a programja.
Határozza meg, hogy az egyes fajtáknak melyik a legfiatalabb bora, továbbá, hogy mennyi a fajta átlagos szesztartalma!
Típus
TPincészet=Lista(TBor)
TBor=Rekord(fajta:TFajta,név:Szöveg,vidék:TVidék,
évjárat:Egész, 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 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 borokat tartalmazó text-file (*.BOR):
1. sor: Fajta1 + vessző + Megnevezés1 +
vessző + Vidék1 + vessző + Évjárat1 + szóköz + Szesz1
2.
sor: Fajta2
+ vessző + Megnevezés2 + vessző + Vidék2 + vessző +
Évjárat2 + szóköz + Szesz2
o A borok fajták szerinti listája:
Fajta 1
* Megnevezés11 , Vidék11
Évjárat11 , Szeszfok11
* Megnevezés12 , Vidék
12
Évjárat12 , Szeszfok12
…
Fajta2
* Megnevezés21 , Vidék
21
Évjárat21 , Szeszfok21
* Megnevezés22 , Vidék
22
Évjárat22 , Szeszfok22
…
Ügyeljen az elválasztójelekre (csillag, vessző)!
o A borok fajták szerinti jellemzése (legfiatalabb bor, átlag-szesztartalom):
Fajta1
* legfiatalabb bor megnev.1 * átlag-
szesztartalom1
Fajta2 * legfiatalabb bor megnev.2 * átlag-
szesztartalom2
…
Ügyeljen az elválasztójelekre (csillag, kötőjel)!
20. Talált Tárgyak Osztálya – kétirányú 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 kétirányú láncolt listába a TTO nyilvántartását, majd növekvően rendezze a tárgy TTO-n töltött ideje 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 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 meg, hogy hány visszaadott és még nem visszaadott tárgy van, 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..2006,hó:1..12,nap:1..31)
A fenti felsorolás és dátum 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 TTO nyilvántartását tartalmazó text-file (minden tárgyhoz 5 sor tartozik):
1. sor: azonosító1 + szóköz + érték1
+ szóköz + kategória1
2. sor:
Mév1 pont Mhó1 pont Mnap1
3. sor:
megtaláló1
4. sor:
Vév1 pont Vhó1 pont Vnap1
5. sor:
tulajdonos1
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
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
# Azonosítónva leg , Értéknva
leg
A leg … index 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)!