
Decoder.Cpp
#include <vcl.h>
#pragma hdrstop
USEFORM("Main.cpp", frmMain);
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TfrmMain), &frmMain);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
main.cpp
#include <vcl.h>
#include <dir.h>
#include <stdio.h>
#pragma hdrstop
#include "Main.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmMain *frmMain;
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
: TForm(Owner)
{
InputFile = "";
N = 9;
}
void TfrmMain::ShowBits(TMemo *Memo, int **bits, int len, int count)
{
for (int i=0;i<=len;i++)
{
AnsiString temp="";
for (int j=1;j<=count;j++)
temp += IntToStr(bits[i][j]);
Memo->Lines->Add(temp);
}
}
int xor(int x, int y)
{
if ((!x)&&(!y)) return 0;
if ((!x)&&(y)) return 1;
if ((x)&&(!y)) return 1;
if ((x)&&(y)) return 0;
}
int CorrectChecking(int *word, int len, int bit)
{
int sum = 0;
for (int i=1;i<=len;i++)
{
sum = xor(sum,word[i]);
}
return xor(sum,bit);
}
int *GetErrors(int **words, int len, int count)
{
int *ans;
ans = new int [len+1];
for (int i=0;i<=len;i++)
ans[i] = CorrectChecking(words[i],count-1,words[i][count]);
return ans;
}
void __fastcall TfrmMain::btnOpenClick(TObject *Sender)
{
if ((OpenDialog->Execute())&&(FileExists(OpenDialog->FileName)))
InputFile = OpenDialog->FileName;
mmInput->Lines->LoadFromFile(InputFile);
FILE *file;
file = fopen(InputFile.c_str(),"r");
Length = mmInput->Lines->Count;
Length--;
even = new int *[Length+1];
errors = new int [Length+1];
char ch;
for (int i=0;i<=Length;i++)
{
even[i] = new int [N+1];
even[i][0] = 0;
int j=0;
do
{
fscanf(file,"%c",&ch);
if (ch=='0') even[i][j] = 0;
if (ch=='1') even[i][j] = 1;
j++;
}while ((ch!='\n')&&(!feof(file)));
}
errors = GetErrors(even,Length,9);
for (int j=0;j<=Length;j++)
mmResult->Lines->Add(errors[j]);
}
void __fastcall TfrmMain::btnCloseClick(TObject *Sender)
{
Close();
}
Листинг программы, реализующей код Хэмминга. Кодер.
coder.cpp
#include <vcl.h>
#pragma hdrstop
USEFORM("Main.cpp", frmMain);
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TfrmMain), &frmMain);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}