Amstei
Сообщений: 4
Оценки: 0
Присоединился: 2011-08-23 15:04:06.076666
|
Здравствуйте, мне по курсовой нужно сделать программу на паскале кодирующую и декодирующую по методу Шенона-Фано, кодирование букв в код работает нормально, а вот обратно не хочет, хотя если вывести процедуру с преобразованием в отдельную программу все работает:-( будте добры, помогите:) з.ы: выделеное - есть нерабочая часть
Program kodir;
var a:string;
b,b1:string;
z:****int;
Procedure RK (a:string; var b:string);
var i:integer;
begin
b:='';
for i:=1 to length (a) do
begin
if a=' ' then b:=b+'000';
if a='а' then b:=b+'0110';
if a='б' then b:=b+'111000';
if a='в' then b:=b+'10101';
if a='г' then b:=b+'1110101';
if a='д' then b:=b+'11001';
if a='е' then b:=b+'0100';
if a='ж' then b:=b+'1110111';
if a='з' then b:=b+'1110100';
if a='и' then b:=b+'0101';
if a='й' then b:=b+'1111001';
if a='к' then b:=b+'10111';
if a='л' then b:=b+'10100';
if a='м' then b:=b+'11000';
if a='н' then b:=b+'0111';
if a='о' then b:=b+'001';
if a='п' then b:=b+'110100';
if a='р' then b:=b+'10110';
if a='с' then b:=b+'1001';
if a='т' then b:=b+'1000';
if a='у' then b:=b+'110101';
if a='ф' then b:=b+'1111110';
if a='х' then b:=b+'1111000';
if a='ц' then b:=b+'1111101';
if a='ч' then b:=b+'1110110';
if a='ш' then b:=b+'1111010';
if a='щ' then b:=b+'1111100';
if a='ь' then b:=b+'110110';
if a='ы' then b:=b+'110111';
if a='э' then b:=b+'1111111';
if a='ю' then b:=b+'1111011';
if a='я' then b:=b+'111001';
if a='_' then b:=b+'000';
if a='А' then b:=b+'0110';
if a='Б' then b:=b+'111000';
if a='В' then b:=b+'10101';
if a='Г' then b:=b+'1110101';
if a='Д' then b:=b+'11001';
if a='Е' then b:=b+'0100';
if a='Ж' then b:=b+'1110111';
if a='З' then b:=b+'1110100';
if a='И' then b:=b+'0101';
if a='Й' then b:=b+'1111001';
if a='К' then b:=b+'10111';
if a='Л' then b:=b+'10100';
if a='М' then b:=b+'11000';
if a='Н' then b:=b+'0111';
if a='О' then b:=b+'001';
if a='П' then b:=b+'110100';
if a='Р' then b:=b+'10110';
if a='С' then b:=b+'1001';
if a='Т' then b:=b+'1000';
if a='У' then b:=b+'110101';
if a='Ф' then b:=b+'1111110';
if a='Х' then b:=b+'1111000';
if a='Ц' then b:=b+'1111101';
if a='Ч' then b:=b+'1110110';
if a='Ш' then b:=b+'1111010';
if a='Щ' then b:=b+'1111100';
if a='Ь' then b:=b+'110110';
if a='Ы' then b:=b+'110111';
if a='Э' then b:=b+'1111111';
if a='Ю' then b:=b+'1111011';
if a='Я' then b:=b+'111001';
end;
end;
procedure PER (b:string; var b1:string);
var i:integer;
begin
randomize;
b1:='';
for i:=1 to length(b) do
if random<0.995 then b1:=b1+b
else case random(5) of
0: b1:=b1+'0'+b;
1: b1:=b1+'1'+b;
2: b1:=b1+'0';
3: b1:=b1+'1';
4: b1:=b1;
end;
end;
procedure DRK (b:string; var a:string);
var i,n:integer;
begin
a:='';
i:=1;
repeat
if copy (b,i,3)='000' then begin a:=a+' '; i:=i+3 end;
if copy (b,i,4)='0110' then begin a:=a+'а'; i:=i+4 end;
if copy (b,i,6)='111000' then begin a:=a+'б'; i:=i+6 end;
if copy (b,i,5)='10101' then begin a:=a+'в'; i:=i+5 end;
if copy (b,i,7)='1110101' then begin a:=a+'г';i:=i+7 end;
if copy (b,i,5)='11001' then begin a:=a+'д';i:=i+5 end;
if copy (b,i,4)='0100' then begin a:=a+'е'; i:=i+4 end;
if copy (b,i,7)='1110111' then begin a:=a+'ж';i:=i+7 end;
if copy (b,i,7)='1110100' then begin a:=a+'з';i:=i+7 end;
if copy (b,i,4)='0101' then begin a:=a+'и'; i:=i+4 end;
if copy (b,i,7)='1111001' then begin a:=a+'й'; i:=i+7 end;
if copy (b,i,5)='10111' then begin a:=a+'к'; i:=i+5 end;
if copy (b,i,5)='10100' then begin a:=a+'л';i:=i+5 end;
if copy (b,i,5)='11000' then begin a:=a+'м';i:=i+5 end;
if copy (b,i,4)='0111' then begin a:=a+'н'; i:=i+4 end;
if copy (b,i,3)='001' then begin a:=a+'о';i:=i+3 end;
if copy (b,i,6)='110100' then begin a:=a+'п'; i:=i+6 end;
if copy (b,i,5)='10110' then begin a:=a+'р';i:=i+5 end;
if copy (b,i,4)='1001' then begin a:=a+'с'; i:=i+4 end;
if copy (b,i,4)='1000' then begin a:=a+'т';i:=i+4 end;
if copy (b,i,6)='110101' then begin a:=a+'у';i:=i+6 end;
if copy (b,i,7)='1111110' then begin a:=a+'ф'; i:=i+7 end;
if copy (b,i,7)='1111000' then begin a:=a+'х';i:=i+7 end;
if copy (b,i,7)='1111101' then begin a:=a+'ц';i:=i+7 end;
if copy (b,i,7)='1110110' then begin a:=a+'ч';i:=i+7 end;
if copy (b,i,7)='1111010' then begin a:=a+'ш';i:=i+7 end;
if copy (b,i,7)='1111100' then begin a:=a+'щ';i:=i+7 end;
if copy (b,i,6)='110110' then begin a:=a+'ь'; i:=i+6 end;
if copy (b,i,6)='110111' then begin a:=a+'ы'; i:=i+6 end;
if copy (b,i,7)='1111111' then begin a:=a+'э';i:=i+7 end;
if copy (b,i,7)='1111011' then begin a:=a+'ю';i:=i+7 end;
if copy (b,i,6)='111001' then begin a:=a+'я'; i:=i+6 end;
if copy (b,i,3)='000' then begin a:=a+'_'; i:=i+3 end;
if copy (b,i,4)='0110' then begin a:=a+'А'; i:=i+4 end;
if copy (b,i,6)='111000' then begin a:=a+'Б'; i:=i+6 end;
if copy (b,i,5)='10101' then begin a:=a+'В'; i:=i+5 end;
if copy (b,i,7)='1110101' then begin a:=a+'Г';i:=i+7 end;
if copy (b,i,5)='11001' then begin a:=a+'Д';i:=i+5 end;
if copy (b,i,4)='0100' then begin a:=a+'Е'; i:=i+4 end;
if copy (b,i,7)='1110111' then begin a:=a+'Ж';i:=i+7 end;
if copy (b,i,7)='1110100' then begin a:=a+'З';i:=i+7 end;
if copy (b,i,4)='0101' then begin a:=a+'И'; i:=i+4 end;
if copy (b,i,7)='1111001' then begin a:=a+'Й'; i:=i+7 end;
if copy (b,i,5)='10111' then begin a:=a+'К'; i:=i+5 end;
if copy (b,i,5)='10100' then begin a:=a+'Л';i:=i+5 end;
if copy (b,i,5)='11000' then begin a:=a+'М';i:=i+5 end;
if copy (b,i,4)='0111' then begin a:=a+'Н'; i:=i+4 end;
if copy (b,i,3)='001' then begin a:=a+'О';i:=i+3 end;
if copy (b,i,6)='110100' then begin a:=a+'П'; i:=i+6 end;
if copy (b,i,5)='10110' then begin a:=a+'Р';i:=i+5 end;
if copy (b,i,4)='1001' then begin a:=a+'С'; i:=i+4 end;
if copy (b,i,4)='1000' then begin a:=a+'Т';i:=i+4 end;
if copy (b,i,6)='110101' then begin a:=a+'У';i:=i+6 end;
if copy (b,i,7)='1111110' then begin a:=a+'Ф'; i:=i+7 end;
if copy (b,i,7)='1111000' then begin a:=a+'Х';i:=i+7 end;
if copy (b,i,7)='1111101' then begin a:=a+'Ц';i:=i+7 end;
if copy (b,i,7)='1110110' then begin a:=a+'Ч';i:=i+7 end;
if copy (b,i,7)='1111010' then begin a:=a+'Ш';i:=i+7 end;
if copy (b,i,7)='1111100' then begin a:=a+'Щ';i:=i+7 end;
if copy (b,i,6)='110110' then begin a:=a+'Ь'; i:=i+6 end;
if copy (b,i,6)='110111' then begin a:=a+'Ы'; i:=i+6 end;
if copy (b,i,7)='1111111' then begin a:=a+'Э';i:=i+7 end;
if copy (b,i,7)='1111011' then begin a:=a+'Ю';i:=i+7 end;
if copy (b,i,6)='111001' then begin a:=a+'Я'; i:=i+6 end
until i>=length(b)
end;
procedure dekod;
begin
writeln ('Введите строку - ');
read (b);
drk (b,a);
writeln ('Полученное сообщение- ',a);
end;
procedure kod;
begin
writeln ('Введите строку - ');
read (a);
rk (a,b);
writeln ('Полученное сообщение- ',b);
end;
begin
writeln('Меню');
writeln('1-');
writeln('2-');
read(z);
if z=1 then dekod;
if z=2 then kod;
end.
Также если у кого есть какие программы по Шенону-Фено буду благодарен:)
|