Documente Academic
Documente Profesional
Documente Cultură
Anexa
Anexa
1
ANEXA 7 Sursa programului demonstrativ pentru codarea ciclic
program codaredecodareciclica;
{********************************************************}
{genereza un cod ciclic corector de o eroare
}
{se folosesc fisierele:"sursa.dat" si "simbinfo.dat"
}
{********************************************************}
uses crt,tti;
const p1=50; k1=8; m1=6;n1=14;
label 1;
type sursa=array[1..p1] of string;
codinf=array[1..p1] of array[1..k1] of byte;
polgen=array[1..m1+1] of byte;
matgen=array[1..k1,1..n1+1] of byte;
cuvcodinf=array[1..k1] of byte;
cuvcod=array[1..n1] of byte;
var s:sursa;ci:codinf;
gen:matgen;d:cuvcodinf;cuvint:cuvcod;
p,k,m,n,j,i1,mm:integer;g:polgen;
reluare:char;a:string;r:char;
procedure codificare(n:integer;j:integer;m:integer);
{*******************************************************
-realizeaza codificarea binara a sursei de informatie;
*********************************************************}
var i,pivot:integer;
begin
pivot:=(n+m) div 2;
for i:=n to pivot do ci[i][j]:=0;
for i:=pivot +1 to m do ci[i][j]:=1;
if pivot>n then
begin
j:=j+1; k:=j; codificare(n,j,pivot);
codificare(pivot+1,j,m);
end;
end;{procedure codificare}
procedure afisaresursa;
{*****************************************************}
{ afiseaza simbolurile sursei discrete din vectorul s[i]
}
{ si codul informational asociat
}
{***************************************************}
var i,j:integer;
begin
gotoxy(3,3);
writeln('alfabetul sursei si simbolurile de informatie:');
for i:=1 to p do
3
Anexa 7
incarcaresursa; afisaresursa; exit;
end
ELSE
BEGIN
sterge(22,1); gotoxy(2,22);
write('numarul de elemente=');readln(p);
sterge(22,1); gotoxy(2,22);
writeln('introduceti elementele sursei');
END;
for i:=1 to p do
begin
sterge(23,0); gotoxy(2,23);
write('s[',i,']='); readln(s[i]);
end;
codificare(1,1,p);
afisaresursa;
gotoxy(3,15);
write('datele afisate se salveaza pe disc ?(d/n)');
raspuns:='n';
readln(raspuns);
if raspuns='d' then
begin
assign(f,'ss.dat'); reset(f);
for i:=1 to p do write(f,s[i]);
close(f);
assign(g,'simbinfo.dat');rewrite(g);
for i:=1 to p do
for j:=1 to k do write(g,ci[i][j]);
close(g);
end;
end;{procedure creare sursa}
procedure calculdimcod(k:integer;var m:integer;var
n:integer);
{*********************************************************
}
{ calculeaza numarul bitilor de control si lungimea
cuvintului de cod}
{k=bitii de inf.,m=nr. bitilor de ctrl.,n=lungimea
cuvintului de cod }
{********************************************************}
var
gata:boolean;
aux,i:integer;
begin
STERGE(3,17);
gotoxy(3,3);
writeln('numarul bitilor de informatie=',k);
gata:=false; m:=1;
while gata=false do
begin
aux:=1;
for i:=1 to m do aux:=aux*2;
5
Anexa 7
rewrite(f);
for i:=1 to m+1 do write(f,g[i]);
close(f);
end;
gotoxy(3,5);
writeln('-----------------------------------');
gotoxy(3,7);
semnalizare;
end;{procedure definire polinom generator}
procedure genmatgen(m,n:integer;g:polgen;var
gen:matgen);
{***************************************************}
{-genereaza elementele matricei generatoare G
}
{n=lungimea codului;m=gradul polinomului generator; }
{g=coef. polinomului generator;gen=mat.generatoare }
{-se scrie mat.gen. in fisierul 'matgen.dat'
}
{***************************************************}
var i,j,z:integer; gata:char;
f:file of byte;
begin
z:=1;K:=N-M;
for i:=1 to k do
begin
for j:=1 to z do gen[i,j]:=0;
for j:=z to m+z do gen[i,j]:=g[j-z+1];
for j:=z+m+1 to n do gen[i,j]:=0;
z:=z+1;
end;
sterge(3,17);gotoxy(3,3);
writeln('***********************************');
gotoxy(3,4); writeln('matricea generatoare G:');
gotoxy(3,5); writeln('---------------------------------');
gotoxy(3,6); writeln('-numarul de linii=',k);
gotoxy(3,7); writeln('-numarul de coloane=',n);
gotoxy(3,8); writeln('----------------------------------');
for i:=1 to k do
begin
gotoxy(3,9);
for j:=1 to n do write(gen[i,j]:3);
writeln;
end;
gotoxy(3,10); writeln('-----------------------------------');
gotoxy(3,11); write('salvati matricea generatoare
pe disc ?(d/n)');
readln(gata);
if gata='d' then
begin
assign(f,'matgen.dat'); rewrite(f);
7
Anexa 7
write('Doriti o noua rulare?(D/N)');
repeat
r:=UPCASE(readkey);
until r in ['D','N'];
if r='D' then goto 1;
end.{p.p.}