Nadesłany przez Tomasz Lubiński, 28 sierpnia 2007 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
Kody Kreskowe - C++/Unit1.cpp:
//--------------------------------------------------------------------------- // Generowanie kodow kreskowych UPC-A // www.algorytm.org // (c)2007 Tomasz Lubinski #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } byte UPCA[13]; byte bars[95]; byte right[10][7] = { {1, 1, 1, 0, 0, 1, 0}, {1, 1, 0, 0, 1, 1, 0}, {1, 1, 0, 1, 1, 0, 0}, {1, 0, 0, 0, 0, 1, 0}, {1, 0, 1, 1, 1, 0, 0}, {1, 0, 0, 1, 1, 1, 0}, {1, 0, 1, 0, 0, 0, 0}, {1, 0, 0, 0, 1, 0, 0}, {1, 0, 0, 1, 0, 0, 0}, {1, 1, 1, 0, 1, 0, 0} }; byte left[10][7] = { {0, 0, 0, 1, 1, 0, 1}, {0, 0, 1, 1, 0, 0, 1}, {0, 0, 1, 0, 0, 1, 1}, {0, 1, 1, 1, 1, 0, 1}, {0, 1, 0, 0, 0, 1, 1}, {0, 1, 1, 0, 0, 0, 1}, {0, 1, 0, 1, 1, 1, 1}, {0, 1, 1, 1, 0, 1, 1}, {0, 1, 1, 0, 1, 1, 1}, {0, 0, 0, 1, 0, 1, 1} }; //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { int i, j; if (Kod->Text.Length() != 12) { ShowMessage("Incorrect UPC-A number"); return; } for (i=0; i<12; i++) { UPCA[i] = Kod->Text[i+1] - 48; } for (i=0; i<95; i++) { bars[i] = 0; } if (Check() == 0) { ShowMessage("Incorrect UPC-A number"); return; } bars[0] = 1; bars[1] = 0; bars[2] = 1; for (i=0; i<6; i++) { for (j=0; j<7; j++) { bars[i*7 + 3 + j] = left[UPCA[i]][j]; } } bars[45] = 0; bars[46] = 1; bars[47] = 0; bars[48] = 1; bars[49] = 0; for (i=6; i<12; i++) { for (j=0; j<7; j++) { bars[i*7 + 8 + j] = right[UPCA[i]][j]; } } bars[92] = 1; bars[93] = 0; bars[94] = 1; DrawBars(); } //--------------------------------------------------------------------------- void TForm1::DrawBars() { int i, length; Image1->Canvas->Brush->Color = clWhite; Image1->Canvas->Rectangle(0, 0, 225, 121); Image1->Canvas->Brush->Color = clBlack; for (i=0; i<95; i++) { if ((i >= 0 && i<= 10) || (i >= 45 && i<= 49) || (i >= 85 && i<= 94)) { length = 110; } else { length = 100; } if (bars[i] == 1) { Image1->Canvas->Rectangle(i*2 + 20, 10, i*2 + 22, length); } } Image1->Canvas->Font->Size = 10; Image1->Canvas->Brush->Color = clWhite; Image1->Canvas->Font->Color = clBlack; for (i=1; i<6; i++) { Image1->Canvas->TextOutA(i*14 + 29, 100, IntToStr(UPCA[i])); } for (i=6; i<11; i++) { Image1->Canvas->TextOutA(i*14 + 39, 100, IntToStr(UPCA[i])); } Image1->Canvas->TextOutA(7, 90, IntToStr(UPCA[0])); Image1->Canvas->TextOutA(213, 90, IntToStr(UPCA[11])); } //--------------------------------------------------------------------------- int TForm1::Check() { int sum = 0; int sum_even = 0; int sum_uneven = 0; int i; for (i=1; i<11; i+=2) { sum_uneven += UPCA[i]; } for (i=0; i<11; i+=2) { sum_even += UPCA[i]; } sum = sum_uneven + sum_even*3; sum %= 10; sum = 10 - sum; sum %= 10; if (UPCA[11] == sum) { return 1; } else { return 0; } } //---------------------------------------------------------------------------