algorytm.org

Pharmacode two-track

Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Pharmacode two-track
Ocena użytkowników:***** / 2
SłabyŚwietny 
Wpisany przez Tomasz Lubiński, 31 lipca 2007 21:37

Pharmacode two-track jest kodem kreskowym wykorzystywanym w przemyśle farmaceutycznym w celu kontroli opakowań. Pierwsza część nazwy pochodzi oczywiście od miejsca zastosowania kodu, druga część mówi nam co nieco o jego budowie. Two-track oznacza, że do odczytu muszą być wykorzystane dwie ścieżki. Jedna czyta górną część kodu, podczas gdy druga czyta dolną część kodu. Ten kod kreskowy koduje dane nie w gubości pasków ale poprzez ich wysokość i umiejscowienie. Pierwsza ścieżka odczytuje paski krótkie dolne oraz długie, natomiast druga odczytuje paski krótkie dolne i długie. Pharmacode two-track może kodować liczbę z zakresu od 4 (dwa paski) do 64570080 (szesnaście pasków) włącznie. Kod zapisywany jest od strony prawej do lewej. Rozmiary jego składowych elementów są następujące:
  • szerokość wszystkich pasków 1 mm,
  • szerokość odstępów pomiędzy paskami 1 mm,
  • wysokość paska długiego 8-12 mm,
  • Wysokość paska krótkiego 4-6 mm.
Wartości poszczególnych pasków zestawione są w tabeli poniżej, wartość całego kodu otrzymuje się poprzez zsumowanie wartości pasków składających się na kod:
Pozycja16151413121110987654321
Pasek dolny (below)14348907478296915943235314411771475904919683656121877292438127931
Pasek górny (above)28697814956593831886461062882354294118098393661312243741458486162541862
Pasek długi430467211434890747829691594323531441177147590491968365612187729243 812793

Jeżeli przez p oznaczymy pozycję to wartość poszczególnych rodzajów kresek możemy zapisać następująco:
  • Pasek krótki dolny = 3p-1
  • Pasek krótki górny = 2*3p-1
  • Pasek długi = 3*3p-1 = 3p
Spróbujmy zatem odczytać podany poniżej kod:
Pharmacode two-track
Jak już wpomnieliśmy kod czyta się od prawej do lewej. Początkowo nasz wynik wynosi zero. Pierwszy pasek po prawej jest długi, wartość długiego paska na pierwszej pozycji wynosi 3. Dodajemy tą wartość do wyniku, otrzymujemy 3. Kolejny pasek jest paskiem krótkim górnym, jego wartość odczytana z tabeli wynosi 6 (krótki górny pasek na drugiej pozycji), dodajemy do wyniku i otrzymujemy 9. Kolejny pasek krótki dolny, jego wartość to 9 (krótki dolny pasek na trzeciej pozycji), dodajemy do wyniku otrzymując tym samym 18. Kolejny ostatni już pasek krótki górny ma wartość 54 (górny krótki pasek na czwartej pozycji), dodajemy do wyniku i dostajemy otrzymując ostateczny rezultat 72.
Ponieważ pharmacode nie zawiera ani znaku sumy kontrolnej, ani znaku startu/końca sekwencji kod może być czytany albo z lewej do prawej albo z prawej do lewej dając różne wartości.
I tak gdyby nasz kod przeczytac "do góry nogami" jego wartość wynosiłaby 97.

Zajmijmy się teraz zamianą danej wartości na kod Pharmacode two-track. Algorytm generowania kodu jest dość prosty. By zamienić daną liczbę na postać kodu wykonujemy kolejne czyności tak długo, jak liczba jest większa od zera:
  • jeżeli liczba mod 3 = 0 (jest podzielna przez 3): do wyniku dopisujemy długi pasek, liczba = (liczba - 3)/3
  • jeżeli liczba mod 3 = 2: do wyniku dopisujemy krótki górny pasek, liczba = (liczba - 2)/3
  • jeżeli liczba mod 3 = 1: do wyniku dopisujemy krótki dolny pasek, liczba = (liczba - 1)/3

Przy czym należy zauważyć że paski do wyniku zapisujemy od strony prawej do lewej.

Przykład:

Spróbujmy wygenerować Pharmacode two-track dla wartości liczba = 55.
Początkowo wynik = ''
55 mod 3 = 1. Zatem do wyniku dopisujemy pasek krótki dolny ('B'), wynik = 'B', liczba = 55 - 1 / 3 = 18
18 mod 3 = 0. A więc do wyniku dopisujemy pasek długi ('N'), wynik = 'NB' (wynik zapisujemy od prawej do lewej), liczba = 18 - 3 / 3 = 5
5 mod 3 = 2. Zatem do wyniku dopisujemy pasek krótki górny ('A'), wynik = 'ANB', liczba = 5 - 2 / 3 = 1
1 mod 3 = 1. Tak więc do wyniku dopisujemy pasek krótki dolny ('B'), wynik = 'BANB', liczba = 1 - 1 / 3 = 0
liczba wynosi 0, zatem kończymy nasze obliczenia, wynik = 'BANB' co przedstawione w wersji graficznej wygląda następująco:
Pharmacode two-track

Implementacje
AutorJęzyk
programowania
KomentarzOtwórzPobierzOcena
Tomasz LubińskiC/C++Borland Builder 6
.cpp
.cpp
***** / 1
Tomasz LubińskiDelphi/PascalBorland Delphi 5
.pas
.pas
***** / 2
Tomasz LubińskiJava
.java
.java
***** / 2
 
Dodaj własną implementację tego algorytmu
  • Zaloguj się na stronie
Plik:
Język
programowania:
Komentarz:
  By móc dodać implementacje zaloguj się na stronie

Poprawiony: 29 sierpnia 2012 18:44
Dodaj komentarz