Középiskolai Matematikai és Fizikai Lapok
Informatika rovattal
Kiadja a MATFUND Alapítvány
Már regisztráltál?
Új vendég vagy?

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