algorytm.org

Pharmacode one-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 one-track
Ocena użytkowników:***** / 4
SłabyŚwietny 
Wpisany przez Tomasz Lubiński, 25 lipca 2007 21:49

Pharmacode one-track jest kodem kreskowym wykorzystywanym w przemyśle farmaceutycznym w celu kontroli opakowań. Pharmacode może kodować liczbę z zakresu od 3 (dwa paski) do 131070 (szesnaście pasków) włącznie. Kod zapisywany jest od strony prawej do lewej. Możemy wyróżnić dwie jego formy:
  • Standardowy:
    • Szerokość wąskiego paska 0.4 - 0.7 mm, standardowo 0.5
    • Szerokość szerokiego paska 1.3 - 2.5 mm, standardowo 1.5
    • Odstępy między paskami 0.9 - 2.5 mm, standardowo 1.0
    • Wysokość paska dowolna, standardowo 8.0 mm
  • Miniaturowy:
    • Szerokość wąskiego paska 0.3 - 0.45 mm, standardowo 0.35
    • Szerokość szerokiego paska 0.9 - 1.7 mm, standardowo 1.0
    • Odstępy między paskami 0.55 - 1.65 mm, standardowo 0.65
    • Wysokość paska dowolna, standardowo 6.0 mm
Czyli jak widać szerokość szerokiego paska powinna być około 3 razy większa jak wąskiego, a odstępy pomiędzy paskami winny wynosić około 2-krotność paska wąskiego.
Dopuszcza się możliwość drukowania kodu wdzialnego tylko w świetle UV.

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 szeroki (Wide)6553632768163848192409620481024512256128643216842
Pasek wąski (Narrow)327681638481924096204810245122561286432168421

Jeżeli przez p oznaczymy pozycję to wartość poszczególnych pasków możemy zapisać następująco:
  • Pasek szeroki = 2p
  • Pasek wąski = 2p-1
Spróbujmy zatem odczytać podany poniżej kod:
Pharmacode one-track
Jak już wpomnieliśmy kod czyta się od prawej do lewej. Początkowo nasz wynik wynosi zero. Pierwszy pasek po prawej jest cienki, wartość cienkiego paska na pierwszej pozycji wynosi 1. Dodajemy tą wartość do wyniku, otrzymujemy 1. Kolejny pasek jest gruby, jego wartość odczytana z tabeli wynosi 4 (gruby pasek na drugiej pozycji), dodajemy do wyniku i otrzymujemy 5. Kolejny pasek jest gruby, jego wartość to 8 (gruby pasek na trzeciej pozycji), dodajemy do wyniku otrzymując tym samym 13. Kolejny pasek cienki ma wartość 8 (cienki pasek na czwartej pozycji), dodajemy do wyniku i dostajemy 21. Kolejny, ostatni już pasek jest gruby, jego wartość wynosi 32, dodajemy do dotychczasowego wyniku otrzymując ostateczny rezultat 53.
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 44.

Zajmijmy się teraz zamianą danej wartości na kod Pharmacode one-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 jest parzysta: do wyniku dopisujemy szeroki pasek, liczba = (liczba - 2)/2
  • jeżeli liczba jest nieparzysta: do wyniku dopisujemy wąski pasek, liczba = (liczba - 1)/2
Przy czym należy zauważyć że paski do wyniku zapisujemy od strony prawej do lewej.

Przykład:

Spróbujmy wygenerować Pharmacode one-track dla wartości liczba = 25.
Początkowo wynik = ''
25 jest nieparzyste zatem do wyniku dopisujemy pasek cienki ('N'), wynik = 'N', liczba = 25 - 1 / 2 = 12
12 jest parzyste zatem do wyniku dopisujemy pasek szeroki ('W'), wynik = 'WN' (wynik zapisujemy od prawej do lewej), liczba = 12 - 2 / 2 = 5
5 jest nieparzyste zatem do wyniku dopisujemy pasek cienki ('N'), wynik = 'NWN', liczba = 5 - 1 / 2 = 2
2 jest parzyste zatem do wyniku dopisujemy pasek szeroki ('W'), wynik = 'WNWN', liczba = 2 - 2 / 2 = 0
liczba wynosi 0, zatem kończymy nasze obliczenia, wynik = 'WNWN' co przedstawione w wersji graficznej wygląda następująco:
Pharmacode

Implementacje
AutorJęzyk
programowania
KomentarzOtwórzPobierzOcena
Tomasz LubińskiC#Microsoft Visual Studio 2010
.cs
.cs
***** / 0
Tomasz LubińskiC/C++Borland Builder 6
.cpp
.cpp
***** / 1
Tomasz LubińskiDelphi/PascalBorland Delphi 5
.pas
.pas
***** / 3
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:43
Dodaj komentarz