Az I. 247. feladat (2010. október) |
I. 247. (É) Egy automata fizetőparkoló be- és kijáratai két-két, egymás után elhelyezett fénykapuval és rendszámleolvasó kamerával vannak felszerelve. A járművek a fénykapukon áthaladva megszakítják a fény útját, amely események időpontjait és a leolvasott rendszámokat a mérés-adatgyűjtő rendszer egy szövegállományban rögzíti.
A parkolóban 8:00:00 és 17:59:59 időpontok között kell fizetni. A fennmaradó időszak ingyenes, de biztonsági okokból az adatokat ilyenkor is rögzítik.
A honlapunkról letölthető parkolo.be állományban egy nap adatai találhatóak. Minden egyes sorban a külső, illetve belső fénykapu megszakításának óra, perc, másodperc formátumú időpontja és az áthaladó a jármű rendszáma áll.
Például:
3 32 42 3 32 44 JLQ-960
3 45 16 3 45 13 JOJ-962
3 57 3 3 57 1 AJA-221
...
A példa jelentése:
-- Az első sor szerint a jármű 3 óra 32 perc 42 másodperckor szakította meg a külső fénykapu útját és 3 óra 32 perc 44 másodperckor a belsőét. A második időpont a későbbi, tehát a jármű befelé ment át a kapun.
-- A második sor szerint a JOJ-962 rendszámú jármű a kapun kifelé haladt át.
Készítsünk programot i247 néven, amely az alábbi problémákat oldja meg.
A képernyőre írást igénylő részfeladatok eredményének megjelenítése előtt írja a képernyőre a feladat sorszámát (például 3. feladat:).
1. Olvassa be a parkolo.be állományban talált adatokat, és annak felhasználásával oldja meg a következő feladatokat.
2. Határozza meg az adatállomány minden bejegyzéséhez, hogy a jármű a parkolóba be- vagy kilépett. Írja ki a képernyőre a rendszámokat, és melléjük a Be vagy Ki szót.
3. Írja ki a képernyőre, hogy a nap melyik órájában érkezett a parkolóba a legtöbb jármű.
4. Határozza meg, hogy hány különböző rendszámú jármű haladt át a parkoló kapuin.
5. Összesítse a legalább egyszer a parkolót elhagyó járművek egész napi parkolási idejét és írassa ki a képernyőre a legtöbb időt ott töltő járműét, a jármű rendszámával együtt.
6. Határozza meg minden kilépéshez, hogy kell-e és ha igen hány megkezdett óra után fizetni. Az eredményeket a parkolo.ki szöveges állományba rendszám és órák száma párban írassa ki.
Beküldendő a program forráskódja (i245.pas, i245.cpp, ...), valamint a program rövid dokumentációja (i245.txt, i245.pdf, ...), amely tartalmazza a megoldás rövid leírását, és megadja, hogy a forrásállomány melyik fejlesztő környezetben fordítható.
(10 pont)
A beküldési határidő 2010. november 10-én LEJÁRT.
Megoldásokról
Az érettségi típusú feladatra 17 megoldás érkezett. Viszonylag alacsony a megoldások száma ahhoz képest, hogy az érettségi vizsgára való felkészüléshez jól használható. Kevés maximális pontszámú feladat születet. Általában a 6. részfeladat megoldása volt a téves. A leírások beküldésével még mindig gondok vannak. Ez több versenyzőnél elmaradt.
Mintamegoldásként Gema Barnabás 10. osztályos (Veszprém, Lovassy László Gimnázium) tanuló munkáját közöljük: i247.pas, parkolo.ki
Az egyes feladatokat a könnyebb áttekinthetőség érdekében külön eljárásba szedtem. Feltételeztem, hogy a parkoló vezetősége minél több hasznot szeretne, ezért a külső fénykaputól a külső fénykapuig tekintettem a parkolási időt.
1. Feltételeztem, hogy az adat nem tartalmaz 5000-nél több bejegyzést, így ennél többet nem tud kezelni a program. A program a bemenet minden adatát eltárolja egy tömbben, külön órára, percre, és másodpercre bontva az időket. Egy változóban eltárolja a bemeneti rekordok számát is.
2. A program először megvizsgálja, hogy az óra alapján eldönthető-e az irány. Ha nem, akkor megvizsgálja a percet, majd a másodpercet. Az irányokat a kiíráson kívül el is tárolja, mert a további feladatoknál szükség lesz rá. Ha nem dönthető el az irány, akkor három kérdőjelet ír ki a program.
3. A program először minden órában az érkező autók számát nullára állítja. Ezután az adat minden rekordján megvizsgálja az irányt. Ha az irány be, akkor a belépés órájának számlálóját megnöveli eggyel. Ezután megkeresi a legforgalmasabb órát, és kiírja.
4. Létrehoztam egy tömböt, amiben az egyes autók különböző adatait fogom tárolni, amik majd a következő feladatoknál is szükségesek. A program ismét megvizsgálja az adat összes sorát. Minden rendszámot megpróbál visszakeresni a létrehozott tömbből. Ha megtalálja, akkor a következő sorra ugrik, ha nem, akkor hozzáadja a tömbhöz. Eközben számolja a hozzáadott rendszámokat, majd az eredményt eltárolja és kiírja.
5. A program megvizsgál minden kilépést, és az előző feladatban létrehozott tömbben minden autónál jelzi, hogy elhagyta-e a parkolóházat. Ezután ismét végigfuttatja az adatot. Ha egy belépés egy olyan autóhoz tartozik, ami elhagyta a parkolót, akkor annál az autónál eltárolja a belépés idejét. Kilépéseknél egy számlálóhoz hozzáadja a legutolsó belépéstől a kilépésig eltelt időt. Ha nem volt előtte belépés, akkor 0:00:00-től számolja az időt. Ezek után minden autónál megvizsgálja, hogy maradt-e belépési időpont a tömbben. Ha maradt, akkor attól az időponttól 23:59:59-ig eltelt idő hozzáadja a számlálóhoz. Ezek után meghatározza a legtöbb időt ott töltő autó rendszámát és az idővel együtt kiírja.
6. A program létrehozza a kimenetfájlt, majd az előzőkben használt tömbben minden autó első belépését beállítja 8 órára, mivel ettől kell fizetni. Ezután végigfuttatja az adatot. Ha a rekord belépés és legkorábban 8 órakor történik, akkor a belépéssel felülírja a 8 órás belépést. Ha a rekord kilépés és legkésőbb 8 órakor történik, akkor kiírja, hogy nem kell fizetni. Ha 8 óra után és 18 óra között van, akkor a legutolsó belépéstől a kilépésig számolva (ha aznap nem volt 8 óra után belépés, akkor 8 órától) hány megkezdett óra után kell fizetni. Ha a kilépés 18 óra után történt, akkor kiírja, hogy a legutolsó belépéstől (ha nem volt, akkor 8 órától), 17:59:59-ig hány megkezdett óra után kell fizetnie az autósnak. Ha a legutolsó belépés legkorábban 18 órakor történt, akkor kiírja, hogy nem kell fizetni.
Statisztika:
14 dolgozat érkezett. 10 pontot kapott: Barta 111 János, Gema Barnabás, Hoffmann Áron, Kovács Kornél, Nánási József, Szabó 928 Attila. 9 pontot kapott: Kompis Ádám. 8 pontot kapott: 4 versenyző. 7 pontot kapott: 2 versenyző. 5 pontot kapott: 1 versenyző.
A KöMaL 2010. októberi informatika feladatai