Mathematical and Physical Journal
for High Schools
Issued by the MATFUND Foundation
Already signed up?
New to KöMaL?

Problem S. 40. (December 2008)

S. 40. In problem I. 194, we have examined the structure of the EAN-13 barcodes used in commerce. In order to solve this task, study problem I. 194 carefully.

You should write a program that produces an EAN-13 number from a bit string read by the scanner. The input bit string (``Példa bemenet'' in the example) will always consist of the appropriate number of 0s and 1s, and properly encodes the digits if the string is read either forwards or backwards.

The three lines of the output (``Példa kimenet'' in the example) should contain

- whether the bit string is to be reversed (``fordítás kell'') or not (``nem kell fordítani'')

- whether the check digit is valid (``helyes'') or invalid

- the 13 digits encoded by the bit string.

The command line argument of your program is the name of the file containing the bit string.

The source code of your program (s40.pas, s40.cpp, ...) together with a short documentation (s40.txt, s40.pdf, ...) should be submitted, also containing a brief description of your solution and the name of the developer environment to use for compiling.

(10 pont)

Deadline expired on January 15, 2009.


Sorry, the solution is available only in Hungarian. Google translation

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.

S40.PAS


Statistics:

26 students sent a solution.
10 points: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 points:Borsos 607 Zalán, Kovács 125 András, Seregi Benjamin Martin, Várnai Péter.
8 points:2 students.
5 points:1 student.
3 points:1 student.

Problems in Information Technology of KöMaL, December 2008