
Какую работу нужно написать?
Main.Cpp
#include <vcl.h>
#include <dir.h>
#include <math.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 = 12;
};
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 *int2bit(int number, int N)
{
int *bit;
bit = new int[N+1];
for (int i=0;i<=N;i++) bit[i]=0;
int i=N;
int tmp=0;
while (number!=0)
{
tmp = fmod(number,2);
bit[i]=tmp;
number = number/2;
i--;
}
return bit;
};
int *XorArrays(int *array1,int *array2, int len)
{
int *res;
res = new int [len+1];
for (int i=0;i<=len;i++)
res[i] = xor(array1[i],array2[i]);
return res;
}
int *CorrectChecking(int *word, int len)
{
int *sum;
sum = new int [len+1];
for (int i=0; i<=len;i++)
sum[i] = 0;
int *nullArray;
nullArray = new int [len+1];
for (int i=0;i<=len;i++)
nullArray[i] = 0;
for (int i=1;i<=len;i++)
{
if (!word[i]) sum = XorArrays(sum,nullArray, len);
else sum = XorArrays(sum,int2bit(i,4),len);
}
return sum;
}
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);
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--;
hamming = new int *[Length+1];
errors = new int *[Length+1];
char ch;
for (int i=0;i<=Length;i++)
{
hamming[i] = new int [N+1];
hamming[i][0] = 0;
int j=0;
do
{
fscanf(file,"%c",&ch);
if (ch=='0') hamming[i][j+1] = 0;
if (ch=='1') hamming[i][j+1] = 1;
j++;
}
while ((ch!='\n')&&(!feof(file)));
}
// ShowBits(mmResult,hamming,Length,12);
errors = GetErrors(hamming,Length,12);
ShowBits(mmResult,errors,Length,4);
fclose(file);
}
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;
}