Скачиваний:
31
Добавлен:
02.05.2014
Размер:
3.12 Кб
Скачать
#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;
}
void MoveArray(int *bits, int N, int insert)
{
    for(int i=1;i<=N;i++)
    {
        bits[i-1]=bits[i];
    }
    bits[N]=insert;
};
int *XorArrays(int *array1, int *array2,int N)
{
    int *res = new int [N+1];
    for (int i=0;i<=N;i++)
    res[i]=xor(array1[i],array2[i]);

    return res;
};
int **crcMethod(int **bits,int len, int count)
{
    int **res = new int *[len+1];
    for (int i=0;i<=len;i++)
    res[i] = new int[5];
    for(int i=0;i<=len;i++)
    for(int j=0;j<=4;j++)
    res[i][j]=0;

    int *polynom = new int [5];
    polynom[1]=1;
    polynom[2]=0;
    polynom[3]=1;
    polynom[4]=1;

    for (int i=0; i<=len; i++)
    {
        int *tmp = new int [5];
        tmp[1] = bits[i][1];
        tmp[2] = bits[i][2];
        tmp[3] = bits[i][3];
        tmp[4] = bits[i][4];
        int current = 5;

        while (current <= count)
        {
            tmp = XorArrays(tmp,polynom,4);
            while ((tmp[1]==0)&&(current<=count))
            {
                    MoveArray(tmp,4,bits[i][current]);
                    current++;
            }
        }
        res[i] = tmp;
    }
    return res;
}
int **InvertBit(int **bits,int Length, int N)
{
    int **invert;
    invert = new int *[Length+1];
    for (int i=0;i<=Length;i++)
    {
        invert [i] = new int[N+1];
        for (int j=1;j<=N;j++)
        invert[i][1+N-j] = bits[i][j];
    }
    return invert;
}
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--;
    crc = new int *[Length+1];
    errors = new int *[Length+1];
    char ch;
    for (int i=0;i<=Length;i++)
    {
        crc[i] = new int [N+1];
        crc[i][0] = 0;
        int j=0;
        do
        {
            fscanf(file,"%c",&ch);
            if (ch=='0') crc[i][j+1] = 0;
            if (ch=='1') crc[i][j+1] = 1;
            j++;
        }
        while ((ch!='\n')&&(!feof(file)));
    }
    errors = crcMethod(crc,Length,N);
    ShowBits(mmResult,errors,Length,4);
    fclose(file);
}
void __fastcall TfrmMain::btnCloseClick(TObject *Sender)
{
    Close();
}

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