9fr f3d b3o ATEMUGEI2X5PSHU52I6LI2KVLJLO3IPWR2JYK7Y


unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, ComCtrls, Spin, jpeg, ExtCtrls, Gauges;

type

TForm1 = class(TForm)

OpenDialog1: TOpenDialog;

Image1: TImage;

Image2: TImage;

Image3: TImage;

Image4: TImage;

Image5: TImage;

Image6: TImage;

Image7: TImage;

Image8: TImage;

Image9: TImage;

Image10: TImage;

procedure FormCreate(Sender: TObject);

procedure Image2Click(Sender: TObject);

procedure Image4Click(Sender: TObject);

procedure Image6Click(Sender: TObject);

procedure Image5Click(Sender: TObject);

procedure Image9Click(Sender: TObject);

private

procedure GF_to_DEC;

procedure bin2dec(var tablica:array of integer);

procedure GF_mnozenie;

procedure GF_dodawanie;

procedure tworz_GF256;

procedure tworz_WGEN;

// procedure Wiel_mnoz;//(var licznik:integer;wiel_1:array of integer);

procedure Wiel_dziel(var xmx:array of integer;GF_WGEN:array of integer);

procedure start_kod;

procedure start_dekod;

procedure kodowanie;

procedure dekodowanie;

procedure waga_Hamm(var syndrom:array of integer);

end;

var

Form1: TForm1;

znakD,znakD2:integer;

tabHam:array[1..7] of integer;

tabHam2:array[1..7] of integer;

tablica:array[0..7] of integer;

tab:array[0..7] of integer;

tab2:array[0..7] of integer;

tab3:array[0..7] of integer;

tabDek:array[0..7] of integer;

gx:array[0..9] of integer;

wekt_kod:array[0..254]of byte;

tab_znak:array[0..7]of byte;

GF256:array[0..255,0..7]of integer;

GF_DEC:array[0..255] of integer;

GF_mnoz:array[0..255,0..255] of integer;

GF_dod:array[0..255,0..255] of integer;

GF_WGEN:array[0..129] of integer;

INF:array[0..124] of integer;

INF_DEK:array[0..254] of integer;

INF_KOR:array[0..254] of integer;

INF_TMP:array[0..254] of integer;

wiel_1:array[0..124]of integer;

iloczyn:array[0..129]of integer;

XMX:array[0..254]of integer; // iloczyn xn_k * mx //

syndrom:array[0..128]of integer; // reszta z dzielenia //

CX:array[0..254] of integer; //wektor kodowy //

F1:file of byte;

F2:file of byte;

F3:file of byte;

// F3:textfile;

Buf:array[1..125] of byte;

Buf2:array[1..255] of byte;

Ch: byte;

znak2,N_,K_,wybor,licznikGL,licznik,waga_H:integer;

go_kod:boolean;

implementation

uses Unit2, Unit3;

{$R *.DFM}

function FileExists(FileName: string): Boolean;

{ Boolean function that returns True if the file exists; otherwise,

it returns False. Closes the file if it exists. }

var

F: file;

begin

{$I-}

AssignFile(F, FileName);

FileMode := 0;

Reset(F);

CloseFile(F);

{$I+}

FileExists := (IOResult = 0) and (FileName <> '');

end; { FileExists }

// tworzenie ciala GF(256) //

procedure TForm1.tworz_GF256;

var degGF:integer;

i,k:integer;

begin

// pierwsze 9 wektorow //

for i:=0 to 8 do

begin

for k:=0 to 7 do

begin

GF256[i,k]:=0;

end;

end;

for i:=0 to 7 do GF256[i+1,i]:=1;

// kolejne wektory //

degGF:=256;

// for i:=1 to (degGF-1-3) do

for i:=1 to (degGF-1-8) do

begin

for k:=0 to 7 do

begin

// GF256[i+3,k]:=GF256[i,k] xor GF256[i+1,k];

GF256[i+8,k]:=GF256[i,k] xor GF256[i+2,k] xor GF256[i+3,k] xor GF256[i+4,k];

end;

end;

end;

// tworzenie tablicy wartosci dziesietnych ciala GF(256) //

procedure TForm1.GF_to_DEC;

var i,k,l,potega:integer;

begin

potega:=1;

znakD:=0;

for i:=0 to 255 do

begin

for k:=0 to 7 do

begin

for l:=0 to 6-k do

begin

potega:=2*potega;

end;

znakD:=znakD+(GF256[i,k]*potega);

potega:=1;

end;

GF_DEC[i]:=znakD;

znakD:=0;

end;

end;

// tabliczka mnozenia//

procedure TForm1.GF_mnozenie;

var i,j:integer;

begin

for i:=0 to 255 do GF_mnoz[0,i]:=0;

for i:=0 to 255 do GF_mnoz[i,0]:=0;

for i:=1 to 255 do

for j:=1 to 255 do

begin

if (i+j)<=256 then GF_mnoz[i,j]:=((i+j)-1)

else GF_mnoz[i,j]:=((i+j) mod 256);

end;

end;

// tabliczka dodawania//

procedure TForm1.GF_dodawanie;

var i,j,k:integer;

begin

for i:=0 to 255 do GF_dod[0,i]:=i;

for i:=0 to 255 do GF_dod[i,0]:=i;

for i:=1 to 255 do

for j:=1 to 255 do

begin

for k:=0 to 7 do

tablica[k]:=GF256[i,k] xor GF256[j,k];

bin2dec(tablica);

for k:=0 to 255 do

if GF_DEC[k]=znakD then GF_dod[i,j]:=k;

end;

end;

procedure TForm1.bin2dec;

var k,l,potega:integer;

begin

znakD:=0;

potega:=1;

znakD:=znakD+(tablica[7]*potega);

for k:=6 downto 0 do

begin

for l:=0 to 6-k do

begin

potega:=2*potega;

end;

znakD:=znakD+(tablica[k]*potega);

potega:=1;

end;

end;

procedure TForm1.tworz_WGEN;

var wiel_2:array[0..1] of integer;

wiel1,tmp_iloczyn,tmp_iloczyn2,iloczyn2:array[0..129]of integer;

i,j,k,w,deg_w2,m:integer;

begin

for i:=0 to 129 do wiel1[i]:=0; //zerowanie wielomianu 1//

wiel1[0]:=1;

wiel1[1]:=2; // wartosci poczatkowe [1 2] //

// zerowanie tablic //

for i:=0 to 129 do tmp_iloczyn[i]:=0;

for i:=0 to 129 do iloczyn[i]:=0;

// ustalanie wspolczynnikow wielomianu 2 //

for i:=0 to 1 do wiel_2[i]:=0;

wiel_2[0]:=1;

wiel_2[1]:=3;

deg_w2:=1;

i:=129;

licznik:=3;

repeat

//mnozenie wielomianow //

for k:=deg_w2 downto 0 do

begin

for m := i downto 0 do tmp_iloczyn[m]:=GF_mnoz[wiel_2[k],wiel1[m]];

for j:=129 downto 0 do tmp_iloczyn2[j]:=GF_dod[iloczyn[j],tmp_iloczyn[j]];

for j:=0 to 129 do iloczyn2[j]:=tmp_iloczyn2[j];

iloczyn[0]:=0;

for j:=1 to 129 do iloczyn[j]:=tmp_iloczyn2[j-1];

for w:=0 to 129 do tmp_iloczyn[w]:=0;

for w:=0 to 129 do tmp_iloczyn2[w]:=0;

end;

for w:=0 to 129 do iloczyn[w]:=0;

for i:=0 to 129 do wiel1[i]:=iloczyn2[i];

licznik:=licznik+1;

wiel_2[1]:=licznik;

until licznik=131;

for i:=0 to 129 do GF_WGEN[i]:=wiel1[i];

end;

// dzielenie wielominaow i liczenie syndromu//

procedure TForm1.Wiel_dziel;

var wiel_1,iloraz:array[0..254]of integer;

wiel_2,tmp_wiel1,wiel_tmp,wiel_tmp2,reszta2:array[0..129]of integer;

i,j,deg,deg_w1,deg_w2,licznik:integer;

begin

// zczytywanie stopni wielomianow //

deg_w1:=254;

deg_w2:=129;

// zerowanie tablic wielomianow //

for i:=0 to 254 do wiel_1[i]:=0;

for i:=0 to 129 do wiel_2[i]:=0;

for i:=0 to 254 do iloraz[i]:=0;

for i:=0 to 128 do syndrom[i]:=0;

for i:=0 to 129 do reszta2[i]:=0;

for i:=0 to 129 do tmp_wiel1[i]:=0;

// ustalanie wspolczynnikow wielomianow //

case wybor of

1: for i:=0 to 254 do wiel_1[i]:=XMX[i];

2: for i:=0 to 254 do wiel_1[i]:=INF_DEK[i];

3: for i:=0 to 254 do wiel_1[i]:=INF_TMP[i];

end;

for i:=0 to 129 do wiel_2[i]:=GF_WGEN[i];

licznik:=deg_w2+1;

deg:=(deg_w1-deg_w2);

for i:=0 to 129 do tmp_wiel1[i]:=wiel_1[i];

for i:=0 to deg do

begin

iloraz[i]:=GF_mnoz[tmp_wiel1[0],wiel_2[0]];

for j:=0 to deg_w2 do wiel_tmp[j]:=GF_mnoz[iloraz[i],wiel_2[j]];

for j:=0 to deg_w2 do wiel_tmp2[j]:=GF_dod[tmp_wiel1[j],wiel_tmp[j]];

if i<deg then

begin

for j:=0 to deg_w2-1 do wiel_tmp2[j]:=wiel_tmp2[j+1];

wiel_tmp2[deg_w2]:=wiel_1[licznik];

for j:=0 to 129 do tmp_wiel1[j]:=wiel_tmp2[j];

licznik:=licznik+1;

end

else for j:=0 to deg_w2-1 do wiel_tmp2[j]:=wiel_tmp2[j+1];

end;

for i:=0 to 128 do syndrom[i]:=wiel_tmp2[i];

end;

//kodowanie//

procedure TForm1.kodowanie;

var i,j,w:integer;

begin

wybor:=1;

//1.krok algorytmu - tworzenie wektora XMX //

for i:=0 to 124 do XMX[i]:=INF[i];

for i:=125 to 254 do XMX[i]:=0;

//2.krok algorytmu - XMX podzielic przez W_GEN //

Wiel_dziel(XMX,GF_WGEN);

//3.krok algorytmu - dodanie XMX i reszty z dzielenia//

for i:=0 to 125 do CX[i]:=XMX[i];

for i:=0 to 128 do CX[i+126]:=syndrom[i];

//zapis do pliku//

for j:=0 to 254 do

begin

w:=CX[j];

Ch:=GF_DEC[w];

Write(F1,Ch);

end;

K_:=K_+1;

end;

//dekodowanie//

procedure TForm1.dekodowanie;

var i,j,w,k,licznik:integer;

OK:boolean;

begin

wybor:=2;

OK:=false;

// obliczanie syndromu

Wiel_dziel(INF_DEK,GF_WGEN);

waga_Hamm(syndrom);

if waga_H<=65 then

begin

for i:=0 to 125 do INF_KOR[i]:=INF_DEK[i];

for i:=0 to 128 do INF_KOR[i+126]:=GF_dod[INF_DEK[i+126],syndrom[i]];

//zapis do pliku//

for j:=0 to 254 do

begin

w:=INF_KOR[j];

Ch:=GF_DEC[w];

Write(F1,Ch);

if j<=124 then Write(F3,Ch);

end;

//koniec zapisu//

end

else

begin

licznik:=0;

repeat

for j:=0 to 253 do INF_TMP[j+1]:=INF_DEK[j];

INF_TMP[0]:=INF_DEK[254];

for j:=0 to 254 do INF_DEK[j]:=INF_TMP[j];

wybor:=3;

Wiel_dziel(INF_TMP,GF_WGEN);

waga_Hamm(syndrom);

if waga_H<=65 then

begin

for j:=0 to 125 do INF_KOR[j]:=INF_TMP[j];

for j:=0 to 128 do INF_KOR[j+126]:=GF_dod[INF_TMP[j+126],syndrom[j]];

// for k:=1 to licznikP do

for k:=1 to licznik+1 do

begin

for j:=1 to 254 do INF_DEK[j-1]:=INF_KOR[j];

INF_DEK[254]:=INF_KOR[0];

for w:=0 to 254 do INF_KOR[w]:=INF_DEK[w];

end;

OK:=true;

end;

licznik:=licznik+1;

until (licznik=255) (*(licznikP=255)*)or (OK=true);

// if OK=true then

// begin

//zapis do pliku//

for j:=0 to 254 do

begin

w:=INF_KOR[j];

Ch:=GF_DEC[w];

Write(F1,Ch);

if j<=124 then Write(F3,Ch);

end;

//koniec zapisu//

// end

// else begin

// Ch:=65;

// Write(F1,Ch);

// end;

end;

end;

procedure TForm1.start_kod;

var i,j,k,w,ile,licznik,rozmiar:integer;

begin

for i:=0 to 124 do INF[i]:=0;

if go_kod=true then

begin

Image7.Visible:=false;

Image8.Visible:=true;

AssignFile(F2, OpenDialog1.Filename);

Reset(F2);

rozmiar:=FileSize(F2);

AssignFile(F1, 'kod.RS' );

Rewrite(F1);

K_:=0;

ile:=1;

for licznik:=1 to rozmiar do

begin

image8.Refresh;

Read(F2,Ch);

Buf[ile]:=Ch;

if ile=125 then

begin

for i:=1 to 125 do

begin

for j:=0 to 255 do

begin

if GF_DEC[j]=Buf[i] then INF[i-1]:=j;

end;

end;

kodowanie;

// for w:=0 to 124 do INF[w]:=0;

ile:=0;

end;

ile:=ile+1;

for w:=0 to 124 do INF[w]:=0;

end;

if ile>1 then

begin

for k:=ile to 125 do Buf[k]:=32;

for i:=1 to 125 do

begin

for j:=0 to 255 do

begin

if GF_DEC[j]=Buf[i] then INF[i-1]:=j;

end;

end;

// for k:=ile to 125 do INF[k-1]:=0;

kodowanie;

// for w:=0 to 124 do INF[w]:=0;

end;

CloseFile(F1);

CloseFile(F2);

for w:=0 to 124 do INF[w]:=0;

j:=0;

for i:=1 to 100000000 do begin j:=j*i end;

image8.Visible:=false;

Image7.Visible:=true;

end

else

begin

form2.show;

go_kod:=false;

end;

end;

procedure TForm1.start_dekod;

var i,j,k,w,licznik,rozmiar,ile:integer;

begin

if go_kod=true then

begin

i:=0;

Image10.Visible:=true;

AssignFile(F2, OpenDialog1.Filename);

Reset(F2);

rozmiar:=FileSize(F2);

AssignFile(F1, 'skoryg.txt' );

Rewrite(F1);

AssignFile(F3, 'skoryg2.txt' );

Rewrite(F3);

Image7.Visible:=false;

K_:=0;

ile:=1;

(* licznikGL:=rozmiar div 255;

for i:=1 to rozmiar do

begin

image10.Refresh;

Read(F2,Ch);

Buf2[i]:=Ch;

end;

for i:=0 to licznikGL-1 do

begin

for k:=1 to 255 do

begin

for j:=0 to 255 do if GF_DEC[j]=Buf2[k+255*i] then INF_DEK[k-1]:=j;

end;

dekodowanie;

// for w:=0 to 254 do INF_DEK[w]:=0;

end; *)

(* for licznikGL:=1 to rozmiar do

begin

image10.Refresh;

Read(F2,Ch);

for j:=0 to 255 do if GF_DEC[j]=Ch then INF_DEK[ile-1]:=j;

if ile=255 then

begin

if INF_DEK[125]=3 then INF_DEK[125]:=0;

dekodowanie;

ile:=0;

end;

ile:=ile+1;

end;*)

if rozmiar>=255 then

begin

for licznik:=1 to rozmiar do

begin

image10.Refresh;

Read(F2,Ch);

Buf2[ile]:=Ch;

if ile=255 then

begin

for i:=1 to 255 do

begin

for j:=0 to 255 do if GF_DEC[j]=Buf2[i] then INF_DEK[i-1]:=j;

end;

if INF_DEK[125]=3 then INF_DEK[125]:=0;

dekodowanie;

ile:=0;

end;

ile:=ile+1;

end;

end

else

begin

for licznik:=1 to rozmiar do

begin

image10.Refresh;

Read(F2,Ch);

Buf2[licznik]:=Ch;

for j:=0 to 255 do if GF_DEC[j]=Buf2[licznik] then INF_DEK[licznik-1]:=j;

end;

for i:=rozmiar to 255 do INF_DEK[i]:=0;

if INF_DEK[125]=3 then INF_DEK[125]:=0;

dekodowanie; end;

CloseFile(F1);

CloseFile(F2);

CloseFile(F3);

j:=0;

for i:=1 to 100000000 do begin j:=j*i end;

Image10.Visible:=false;

Image7.Visible:=true;

end

else form2.show;

go_kod:=false;

end;

procedure TForm1.waga_Hamm;

var i:integer;

begin

waga_H:=0;

for i:=0 to 128 do

begin

if syndrom[i]>0 then waga_H:=waga_H+1;

end;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

go_kod:=false;

AssignFile(F2,'kod.RS');

if FileExists('kod.RS') then begin end

else begin

Rewrite(F2);

CloseFile(F2);

end;

tworz_GF256;

GF_to_DEC;

GF_mnozenie;

GF_dodawanie;

tworz_WGEN;

end;

procedure TForm1.Image2Click(Sender: TObject);

begin

close;

end;

procedure TForm1.Image4Click(Sender: TObject);

begin

Image7.Visible:=false;

OpenDialog1.Filter := 'Pliki tekstowe (*.txt)|*.txt|Pliki RS (*.RS)|*.RS|Wszystkie pliki (*.*)|*.*';

OpenDialog1.FilterIndex := 1;

if OpenDialog1.Execute then

begin

go_kod:=true;

end;

end;

procedure TForm1.Image5Click(Sender: TObject);

begin

start_kod;

go_kod:=false;

end;

procedure TForm1.Image6Click(Sender: TObject);

begin

start_dekod;

go_kod:=false;

end;

procedure TForm1.Image9Click(Sender: TObject);

begin

form3.show;

end; end




Wyszukiwarka

Podobne podstrony:
9fr f3d b3a+prawa+mi eadzynarodowego 6VMFAPVXTHZY5SVI2UWOT43VQBDDALM4NXKCVJA
w b3odzimierz+iljicz+lenin+ +trzy+ 9fr f3d b3a+i+trzy+cz ea 9cci+sk b3adow l7jubp6x2uqugjqlbk2luksrq
my 9Clenie+utopijne+i+jego+ 9Fr F3d B3a VSKM3HPUQJJ4R2C7BNRVTWWSE6TCKT2XQYZVZMY
w 9cr f3d+umar b3ych+kr f3l f3w+i+zapomnianych+bog f3w C4LYO2KVGL36X267NWE5Z7QWO7PVK4HM6KIFR2A
mi b3o 9c e6+w+literaturze+jako+prze bfycia+osobiste+lub+uwik b3ane+w+ UEI6ITSUPRRJWBQYXKTDVILI7CUPO
snu e6+mi b3o 9c e6 2c+w b9t +mi b3os + 5T52AWYH4VOTANCTEE3G4CTJO4XNZR3EXHOBQTY
dzie B3o+sejmu+4+letniego 2E3X5SIJLXIXS4KDWQSUQQATDJKKKBINAMGLKYY
8fr f3d b3a+tre 9cci+stosunku+pracy 7S7EPIW6BY36HEADHWPOEPVYTUGSDYRB4Y7Z5KQ
mi b3o 9c e6+jest+jak EBZO34YFRBHFJ7A4Y56T5S55QEE7BQ2DWIHKOGA
r f3 bfne+koncepcje+walki+o+niepodleg b3o 9c e6+polski+na+prze b3omie+xi RNK7VKVWUO2ZHWUDVXFKNOQXZSN
8Fr F3d B3a+prawa+powszechnie+obowi B9zuj B9ce FI42QZOIONNJMSBMKLLVIBFE3NUNNF45A623JWQ
myd B3o+wszystko+umyje 6PDWCPIBZRA2TJIGFOJMBCWA6FVK34RFGVGUWJY
zawi b3o 9cci+polityki+europejskiej HILEBEY6BO6VEA2MMLHAIA7IODGO4FNJYK74YDQ
pro 9Cba+o+roz B3o BFenie+na+raty+karty+podatkowej ZYKWNJ6ATY4YIBDGEWG4JS2MXHKHXZ3FT7AXGGQ
r f3 bfne+modele+mi b3o 9cci+romantycznej 7VHYWBYGAGOKM5PSO5YI4ITITUL62D5J7WTRVIQ

więcej podobnych podstron