Kontrolní číslice čárového kódu (úloha z kroužku programování pro děti)

Kolik lidí si podle vás v supermarketu kontroluje účtenku, aby se ujistili, zda jim namarkovali vše správně? Obvykle ne mnoho, jelikož čárový kód je tak spolehlivý, že mu důvěřují, že funguje. (Já tedy vídám, že si to lidé kontrolují a namátkově to dělám tady. Přeci jen je tam lidský prvek, ne vše se markuje podle kódu, případně může být zboží špatně přiřazeno).

Text vyšel původně na autorově blogu a vychází z díla Parity magic (csunplugged.org) pod licencí CC BY-SA 4.0.

Pro koho je úloha určená

Úlohu jsem dělal s dětmi od druhé do páté třídy.

Potřeby

  • 15 až 20 minut
  • několik kusů zboží s čárovým kódem (případně stačí jen obaly) o délce 13 číslic

Postup

Zeptáme se dětí, jak funguje čárový kód v obchodě. Vysvětlíme, jaký je vztah mezi samotným kódem a cenou (kód sám o ceně nic neříká, identifikuje zboží v databázi, kde je cena uvedená). Jak si přístroj může být jistý, že přečetl čárový kód správně? To si dnes ukážeme.

Tady je příklad, jak spočítat poslední číslici čárového kódu o délce 13 číslic. Je to trochu divný proces sčítání a násobení, ale stejný postup vám vždycky dá správnou hodnotu třinácté kontrolní číslice (pakliže nebyla chyba v čísle).

čárový kód s číslicemi 9 400547 009879

Výše uvedený příklad čárového kódu je ze zboží, které si děti mohly vybrat, takže by vám měly sdělit těchto 12 číslic (třinácté by si zatím měly nechat pro sebe).

řekly vám tyto číslice 940054700987?

Nicméně zapište si každou druhou číslici do jiného řádku.

horní řada obsahuje 600443, dolní 35928

Číslice na liché pozici zapisujete na horní řádek, sudé na dolní.

Teď sečtěte všechna čísla v první řádce (= 29) a vezměte jen číslici z jednotkového řádu (případně můžete zapojit znalost modulo aritmetiky, 9 + 5 = 4).

9+0+5+7+0+8=29

Potom sečtěte všechna čísla na druhém řádku (= 24) a opět vezměte pouze jednotkový řád.

4+0+4+9+0+7=24

Vynásobte číslici ze součtu druhého řádku třemi. Z čísla 24 je to tedy 4 krát 3 a opět vezměte pouze jednotkový řád (2).

3*4=12

Sečtěte výsledek součtu prvního řádku s výsledkem násobení z předchozího kroku (v tomto případě 9 z 29 k 2 z 12).

9+2=11

Znovu potřebujeme pouze poslední číslici, v tomto případě 1. Teď se zeptáme, kolik potřebujeme přidat, abychom dostali 0 na posledním místě (tedy 0 nebo 10). Ptáme se: co plus 1 = 10? Odpověď je 9, což nám dá kontrolní číslici 13místného čárového kódu. Pokud by předchozí součet obsahoval hnědou nulu, tak by kontrolní číslice byla nula (jelikož přičtením nuly by opět vznikla nula na posledním místě).

?+1=10 ?=9

Toto číslo by mělo odpovídat poslední číslici čárového kódu. Zeptejte se žáků, zda jste se dopočítali ke správnému výsledku. Samozřejmě je určitá šance, že jste to uhádli, ale můžou si to teď zkusit sami a brzy zjistí, že to funguje pokaždé, pokud si číslo správně opíšou.

Nesouhlasí-li poslední číslice, tak je chyba v čárovém kódu. Což je krásná ilustrace detekce chyby v praxi. Buď jste si ho špatně opsali, nebo ho žáci špatně nadiktovali. Případně máte chybu ve výpočtu, k čemuž by na počítači nejspíš nedošlo, alespoň se však procvičí v základních počtech.

Nyní zkuste změnit jednu číslici v čárovém kódu a zkontrolujte, že konečný součet nevychází 0 a že jste schopní detekovat chybu.

Celý postup si můžete vytisknout.

Co jsme se naučili

Musí existovat systém, který ověřuje kontrolní součet, aby lidé dokázali zjistit, že se čárový kód špatně načetl. Jak operátor nebo pokladní zjistí, že došlo k chybě? Obvykle speciálním pípnutím signalizujícím chybu. Pokud je balení poškozené nebo ohnuté a kód nelze přečíst čtečkou, tak se ho operátoři mohou pokusit opsat ručně.

Didaktické poznámky

Doporučují, byť to není nutné, projít před tím se žáky lekci ohledně modulo (přeložím někdy později).

Jedná se, podle mě, o jednodušší úlohu než Detekce a korekce chyb. S tou můžete pokračovat příště.

Snažím se pořádně dělat IT, které mě živí. Jsem Javista (sňatek z rozumu), ale zamiloval jsem si Groovy. Mám blog, kam píšu i věci mimo softwarové inženýrství.

Zdroj: https://www.zdrojak.cz/?p=23242