Az S. 40. feladat (2008. december) |
S. 40. A kereskedelemben legelterjedtebb EAN-13 típusú vonalkód szerkezetéről az I. 194. feladatban olvashattunk. Az alábbi programozási feladat megoldásához nélkülözhetetlen a vonalkód szerkezetről írtak elolvasása.
Készítsünk programot, amely a bemeneti adatállományban megadott vonalkód olvasó által előállított bitsorozatból előállítja az EAN-13 számot. A bitsorozat garantáltan kellő számú 0, illetve 1 számjegyből épül fel és valamelyik irányból olvasva biztosan helyesen kódolja a számjegyeket.
A képernyő három egymást követő sorába írassuk ki, hogy a bitsorozatot meg kell-e fordítani, hogy az ellenőrzőszámjegy helyes-e és hogy mi a vonalkód által kódolt 13 számjegy.
A program parancssori argumentuma legyen a bitsorozatot tartalmazó adatállomány neve.
Beküldendő a program forráskódja (s40.pas, s40.cpp, ...), valamint a program rövid dokumentációja (s40.txt, s40.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ő 2009. január 15-én LEJÁRT.
Mintamegoldás
Mintamegoldásként Bodosi Eszter (Sepsiszentgyörgy, Mikes Kelemen Líceum, 11. évfolyam) megoldása nyomán közöljük.
Megoldás
A vonalkód feldolgozásához elengedhetetlennek tartottam létrehozni azt a két táblázatot, amely az I.194-es feladatban volt megadva. Az első táblázatban egy 7 karakter hosszúságú számsor kódol egy számot, ami aztán A-val, B-vel vagy C-vel jelölünk. A második táblázat az, amelynek a segítségével a vonalkód hat számjegye alapján meghatározható az első számjegy.
Az első táblázatban az oszlopok közt a következő felépítésbeli logikát vettem észre. A C oszlopból az A oszlop úgy alakítható ki, hogy ahol a C-ben 0-ás volt azon a pozíción az A-ban 1-es van. Ahol a C-ben 1-es volt, arra a pozícióra az A-ban 0-ás került. A B oszlop pedig a C oszlop fordítottja. Ezen elv alapján töltöttem fel az x mátrixot.
A bitsorozat értelmezését öt lépésben valósítottam meg.
Az első lépésben töröltem belőle azokat a karaktereket, amelyek nem szükséges az EAN-13-ba való átalakításhoz. Ezek a bevezető, a középen levő elválasztó és a záró két vékony vonal kódjai.
A második lépésben döntöttem el, hogy szükséges-e a bitsorozatot megfordítani ahhoz, hogy értelmes legyen. Ehhez megvizsgáltam az első és az utolsó 7 karaktert. Annak függvényében fordítottam meg a bitsorozatot vagy sem, hogy melyik szerepelt a x táblázat C oszlopában.
A harmadik lépésben értelmezem a vonalkód első hat számjegyének megfelelő kódot (a bitsorozat első 42 számjegyét). Egyszerre csak hét számjegyet értelmezek és törlöm a bitsorozatból azokat a számjegyeket, amiket már feldolgoztam. Miután megkaptam az első hat számjegyet, meghatározom az első számjegyet az y táblázat alapján.
A negyedik lépésben a értelmezem a bitsorozat utolsó hat számjegyét. Itt is törlöm a feldolgozott karaktereket.
Az utolsó lépésben meghatározom az ellenőrzőszámjegyet. Majd ellenőrzöm, hogy a vonalkódban szereplő ellenőrző számjegy helyes-e.
A program Turbo Pascal 7.0 -val készült.
Statisztika:
26 dolgozat érkezett. 10 pontot kapott: Bodosi Eszter, Englert Péter, Fábián András, Fekete 976 János, Kaposi Ágoston, Kovács 542 Zsombor, Kővágó Zoltán, Lájer Márton, Nagy 111 Miklós, Nagy Róbert, Németh Bence, Para Attila, Strenner Péter, Szabó 295 Gábor, Szenczi Zoltán, Uray Marcell János, Véges Márton, Weisz Ágoston. 9 pontot kapott: Borsos 607 Zalán, Kovács 125 András, Seregi Benjamin Martin, Várnai Péter. 8 pontot kapott: 2 versenyző. 5 pontot kapott: 1 versenyző. 3 pontot kapott: 1 versenyző.
A KöMaL 2008. decemberi informatika feladatai