Скачиваний:
32
Добавлен:
02.05.2014
Размер:
2.85 Кб
Скачать
#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();
}

Соседние файлы в папке Decoder