1. feladat:
Szálloda (14 pont) /tesztadatok/
Egy szállodalánc nyilvántartást vezet a szakácsairól és a cukrászairól. Ebben a szakképzettségi szint és az életkor szerint lehet keresni.A SZAKACSx.BE és a CUKRASZx.BE szöveges állományok soronként egy-egy személyről három adatot tartalmaznak, egy-egy szóközzel elválasztva: a szakképzettségi szintet (1 a legjobb, 10 a legrosszabb), az életkort (15 és 100 közötti egész) és a nevet (legfeljebb 40 karakter: az angol ábécé betűi, számjegyek és szóközök). Mindkét állományban legfeljebb 100 személy adatai vannak.
A megválaszolandó kérdések a KERDESx.BE állomány egy-egy sorában vannak xxxx:yyyy:zzzz alakban, ahol a mezőket : (kettőspont) választja el, és xxxx a szakképzettséget, yyyy a szakképzettségi szintre, zzzz pedig a korra vonatkozó követelményt adja meg.
xxxx = SZAKACS vagy CUKRASZ vagy BARMILYEN
BARMILYEN azt jelenti, hogy az illető akár szakács, akár cukrász lehet.
yyyy = <N vagy>Nvagy=Nvagy<=Nvagy>=N
Az yyyy a szakképzettségi szint és az N egész közötti relációt írja elő.
zzzz = MIN vagyMAX
A zzzz azt adja meg, hogy az előző két feltételt kielégítő személyek közül a legfiatalabb vagy a legidősebb adatait kérjük-e.
Az egyes kérdésekre válaszul kapott személyek nevét a VALASZx.KI állományba kell írni (soronként egy nevet). Ha egy kérdésre nincs megfelelő személy, az adott sorba a NINCS szöveget kell írni. Ha egynél több van, az ábécé szerinti első nevet kell megadni.
Példa:
SZAKACS0.BE | CUKRASZ0.BE | KERDES0.BE | VALASZ0.KI |
1 35 Nagy Lajos
4 49 Kiss Pal |
1 37 Jo Istvan | SZAKACS:=4:MAX
BARMILYEN:<2:MAX CUKRASZ:>=3:MIN |
Kiss Pal
Jo Istvan NINCS |
2. feladat:
Radar (20 pont) /tesztadatok/
Egy légvédelmi bázist olyan speciális radarral szereltek fel, amely egy 1000*1000-es területet ellenőriz, és észleli, ha ellenséges rakéta közeledik. A terület bal felső pontjának koordinátája (1,1). A bázis a (496,496) és (505,505) pontok által kijelölt négyzetben van.
A radar időegységenként egyetlen 100*1000-es sávot "lát". (Az 1. sávval kezdi, majd a 2. sávval folytatja s.í.t.; a 10. sáv után újra az 1. következik). Csak olyan rakétát észlel, amelyik az éppen vizsgált sávban van.
A rakétákat a területen kívülről indítják. Egy-egy rakéta időegységenként mindig ugyanakkora utat tesz meg egyenes vonal mentén haladva, és mindkét koordinátája egész értékkel (legfeljebb 10-zel) változik meg. Ugyanazon a helyen több rakéta is lehet egy időben. A rakéta becsapódik, ha egy időegység kezdetén éppen a bázis területe fölött van. A rakéta repülés közben meg is semmisülhet (pl. lelőhetik).
A bázison állomásozó katonákat riasztani kell, ha olyan rakéta tart a bázis felé, amely a bázison csapódna be, és amelyet a radar már háromszor észlelt. Minden ilyen rakéta közeledését csak egyszer kell jelezni.
Feladat:
Írj programot, amely szükség esetén riasztja a katonákat!Bemenet:A RAKETAx.BE állományban legfeljebb 1000 sor, minden sorban egy-egy észlelés három adata van, három egész szám, amelyeket egy-egy szóköz választ el: az időegység sorszáma, az észlelt rakéta sorindexe és oszlopindexe.Kimenet:A program írja ki a képernyőre és a RAKETAx.KI állományba a riasztási adatokat! Minden sorba négy egész számot írjon, egy-egy szóközzel elválasztva: a riasztás idejét, a becsapódás várható idejét, sorindexét és oszlopindexét.
Példa:
RAKETA0.BE | RAKETA0.KI |
1 1 1
7 506 5 11 21 21 17 526 35 21 41 41 27 546 65 31 61 61 37 566 95 41 81 81 48 588 128 51 101 101 61 121 121 |
21 249 497 497 |
3. feladat:
Járműkölcsönzés (11 pont) /tesztadatok/
Egy közlekedési vállalat járműveket ad bérbe. Egyik különleges szállítójárművére nagy az igény, ezért a megrendeléseket a következő évre előre összegyűjtik. A megrendelést az A B számpárral adják meg, ami azt jelenti, hogy a megrendelő a járművet az év A-adik napjától a B-edik napjáig akarja bérbe venni. A vállalat a járművet a lehető legjobban akarja hasznosítani, ezért olyan megrendeléseket fogad el, amelyeket teljes egészükben úgy tud teljesíteni, hogy a jármű a lehető legtöbb napra ki legyen adva.Feladat:
Írj programot, amely kiszámítja, hogy a megrendelések alapján a jármű a legjobb esetben hány napra lesz bérbe adva.Bemenet:A JARMU0.BE állomány tartalmazza a megrendeléseket. Az első sorban a megrendelések N száma van (1<=N<=1000). A következő N sor mindegyikében egy-egy megrendelés, azaz egy-egy A B számpár van, egyetlen szóközzel elválasztva (1<=A,B<=365).Kimenet:A megoldást a képernyőre és a JARMU0.KI állományba kell kiírni.
Példa:
JARMU0.BE | JARMU0.KI |
9
1 23 6 37 24 43 46 71 12 54 44 66 13 25 22 33 5 10 |
69 |
4. feladat:
Robot (12 pont) /tesztadatok/
Egy üzemben a gyártást automatizálták. A szerszámgépek egy nagy gépcsarnokban négyzetrács mentén vannak elhelyezve. A műszak végén robotok gyűjtik össze a szerszámgépek gyártotta alkatrészeket. A robotok négyzetrács alakú pályán mozognak a szerszámgépek fölötti térben. A négyzetrács bal felső sarkából, az (1,1) pontból indulnak, és a jobb alsó sarokba viszik el az alkatrészeket. A robotokat úgy tervezték, hogy csak jobbra és "lefelé" haladhatnak.Feladat:
Írj olyan programot, amely kiszámítja, hogy minimálisan hány robotot kell elindítani az összes alkatrész begyűjtéséhez, feltéve hogy minden robot tetszőleges számú alkatrészt szállíthat.Bemenet:
A feladat megoldásához rendelkezésre áll az üzemcsarnok térképe, amely egy 0 és 1 elemeket tartalmazó M*N-es mátrix (M a sorok, N az oszlopok száma). A 0 jelöli az üres helyet gépcsarnokban, az 1 pedig azt, hogy azon a helyen szerszámgép van.A ROBOTx.BE állomány első sorában az M és N értékek vannak, egyetlen szóközzel elválasztva (1<=M,N<=100). A következő M sor mindegyike a térkép egy-egy sora, azaz minden sorban N szám (0 vagy 1) van, a számokat ismét egyetlen szóköz választja el.Kimenet:A feladat megoldásaként egyetlen számot kell írni a ROBOTx.KI állományba.
Példa:
ROBOTx.BE | ROBOTx.KI |
10 12
0 1 1 1 0 0 1 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 |
5 |
5. feladat:
Fordítóprogram (18 pont) /tesztadatok/
Az alábbi programozási nyelven írt programokkal egy tár legfeljebb 1024 db 8 bites rekeszét adatokkal tölthetjük fel (az 1. rekesztől kezdve):
A Cimke: maximum hat, az angol ábécé betűiből álló karaktersorozat, amelyet kettőspont követ. A Cimke: el is maradhat. A számok és címkék belsejét kivéve mindenütt tetszőleges számú szóköz lehet.
- Cimke: x(DB) x-et beírja a tár következő DB rekeszébe (0 x, DB 255)
- Cimke: 'x'(DB) az x karakter kódját beírja a tár következő DB rekeszébe (0 DB 255)
- Cimke: "xxxxxx" az xxxxxx karaktersorozat elemeinek kódját beírja a tár következő rekeszeibe
- Cimke: <X> az X címkének megfelelő 16 bites címet írja a tár következő két rekeszébe (előbb a kisebb helyi értékű részét, utána a nagyobbat)
- Cimke: [X] az X címkének megfelelő címen levő 8 bites értéket írja a tár következő rekeszébe
Írj olyan programot, amely beolvassa a lefordítandó, biztosan helyes programot a PROGRAMx.BE állományból, és kiírja a képernyőre és a PROGRAMx.KI állományba a fordítás eredményét (a tár rekeszeinek tartalmát)! A PROGRAMx.BE állományban minden utasítás külön sorban van.
Példa:
PROGRAM0.BE | PROGRAM0.KI |
A: 12 (2)
'a'(3) B: "bcd" [A] < A > <C > C: [B] |
12 12 97 97 97 98 99 100 12 1 0 14 0 98 |