Nadesłany przez Tomasz Lubiński, 31 lipca 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 Pharmacode two-track
// www.algorytm.org
// (c)2007 Tomasz Lubinski
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int curentPos;
// reurns 1 if txt is correct, 0 otherwise
int check(char *txt)
{
int number;
number = atoi(txt);
if ((number < 4) || (number > 64570080))
{
return 0;
}
return 1;
}
void drawSignBar(char bar)
{
int top = 0;
int down = 0;
Form1->Image1->Canvas->Brush->Color = clBlack;
if (bar == 'A') /* above */
{
top = 10;
down = 34;
}
else if (bar == 'B') /* below */
{
top = 34;
down = 58;
}
else /* normal */
{
top = 10;
down = 58;
}
Form1->Image1->Canvas->Rectangle(curentPos + 20, top, curentPos + 26, down);
curentPos -= 12;
}
void drawBars(char *txt)
{
int number;
curentPos = 300;
Form1->Image1->Canvas->Brush->Color = clWhite;
Form1->Image1->Canvas->Rectangle(0, 0, 337, 89);
number = atoi(txt);
while (number != 0)
{
if ((number % 3) == 0)
{
drawSignBar('N'); /* normal */
number = (number-3)/3;
}
else if ((number % 3) == 2)
{
drawSignBar('A'); /* above */
number = (number-2)/3;
}
else
{
drawSignBar('B'); /* below */
number = (number-1)/3;
}
}
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (check(Kod->Text.c_str()) == 0)
{
ShowMessage("Incorrect text");
return;
}
drawBars(Kod->Text.c_str());
}
//---------------------------------------------------------------------------

