Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
39
Добавлен:
02.05.2014
Размер:
206.85 Кб
Скачать

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;

}