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. 304. feladat (2012. november)

I. 304. Tomi az interneten talált leírás alapján egy számlálót épített. A számláló - a leírás szerint - 0 másodperctől 999 másodpercig számlált volna, másodpercenként eggyel növelve a kiírt értéket. Azonban valamit elronthatott, mert az eszköz tizedmásodpercenként váltott. A hétszegmenses folyadékkristályos kijelző ráadásul nem mindig reagált a megfelelő gyorsasággal a vezérlésre, előfordult, hogy azonnal váltott egy szegmens, míg máskor várni kellett, de legfeljebb k tizedmásodpercet. Ha a k értéke 2, és egy szegmens be kell kapcsoljon, amely korábban nem világított, lehet, hogy a 0., lehet, hogy az 1., de az is lehet, hogy a 2. tizedmásodpercben kapcsol majd be. A bekapcsolás nem szükségszerűen történik meg, ha a következő jel éppen a kikapcsolás és már az jut érvényre.

Tomi elgondolkodott azon, hogy ha nem ismerjük a kezdő állapotot, és a számlálót sem állíthatjuk meg, ki lehet-e találni, hogy éppen melyik értéket kellene mutatnia az utolsó számjegynek. Rövidesen arra a megállapításra jutott, hogy bár a hiba eltérő késleltetéssel jelentkezik, megfelelő számú állapot vizsgálatával kikövetkeztethető az aktuális állás.

Írjunk olyan programot, amely az egymást követő állapotok ismeretében képes az aktuális számjegy meghatározására!

A bemeneti fájl első sorában egy egész szám, a kijelző reakcióideje szerepeljen (0\lek\le5). A következő sorban a megfigyelések n száma legyen olvasható (1\len\le100). Az ezt követő n sor a kijelző utolsó jegyének állapotát a megfigyelés kezdetétől tizedmásodpercenként adja meg. Egy-egy sor az adott pillanatban írja le a kijelző utolsó jegyét, megadva az egyes szegmensek állapotát (0 - nem világít, 1 - világít). A kimeneti fájlban meg kell adni, hogy hány állapot vizsgálata után állapítható meg a kijelző állása és akkor éppen milyen értéket kellene mutatnia. Ha a megfigyelés időtartama nem lenne elegendő a válasz megadására, a kimenetnek a 0 értéket kell tartalmaznia.

A számjegyeket felépítő szegmensek állapotainak megadása az alábbi ábra szerinti sorrendben történik:

A fenti ábra első sora a késleltetés nélküli kijelzőállapotokat mutatja 0-tól 9-ig. A második sorban a példa a k=1 késleltetés szerint mutatja a kijelzőt. A fekete szegmensek az adott számjegy esetén mindenképpen világítanak, a fehérek pedig semmiképpen sem. A szürke színű szegmensek állapota nem határozható meg. A harmadik sor fekete szegmensei a példa első három állapotát mutatják, amelyből már egyértelműen meghatározható az utolsó számjegy valós értéke.

A program első parancssori argumentuma a bemeneti fájl neve, a második argumentuma pedig a kimeneti fájl neve legyen.

Beküldendő a program forráskódja (i304.pas, i304.cpp, ...), valamint a program rövid dokumentációja (i304.txt, i304.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ő 2012. december 10-én LEJÁRT.


A beküldők által vázolt megoldási mód szinte minden esetben a következő volt:

- a reakcióidő függvényében le kell generálni minden számjegyhez a megfelelő kijelzőállapotot, amely rögzíti, hogy az egyes szegmensek biztosan be, biztosan kikapcsolt állapotot vesznek fel, vagy éppen bizonytalan a helyzetük

- a bemenetben rögzített állapotokat sorban vizsgálva a lehetséges számjegyek halmaza folyamatosan szűkíthető; a vizsgálatnál figyelembe kell venni, hogy a következő állapot vizsgálatával egy időben a halmaz elemeinek értékét is növelni kell

A feladat szövegében megadott minta eggyel nagyobb értékeket tartalmazott, mint ami a szövegből következett volna, így az értékelésnél mindkét változatot elfogadtuk, ha az indokolt volt. Ennek kiderítésére a következő vizsgálatot végeztük: a fájlban csak a a szükséges számú sort meghagyva vizsgáltuk, hogy az eredmény változik-e. Ha így is az eggyel nagyobb eredmény született, akkor a megoldást helyesnek tekintettük.

A tesztesetek: teszt304.zip

Az egyetlen 10 pontos megoldás Gema Barnabásé volt: i304.pas


Statisztika:

7 dolgozat érkezett.
10 pontot kapott:Gema Barnabás.
9 pontot kapott:Jákli Aida Karolina, Kalló Kristóf, Kocsis 789 Mátyás.
8 pontot kapott:1 versenyző.
5 pontot kapott:1 versenyző.
1 pontot kapott:1 versenyző.

A KöMaL 2012. novemberi informatika feladatai