Здравствуйте!
Получил от учителя задание: написать на TurboPascal шифратор и дешифратор по шифру Виженера.
Помогите, пожалуйста, составить эти 2-е программы.
Я нашел 2 варианта шифратора, но они дают разные результаты, что меня настораживает:
1:
program p1;
var
a,kl,sh:string;
th: array[1..255] of Char;
ch,dh,ah:array[1..255] of integer;
l,d,i,i2:integer;
BEGIN
i2:=0;
writeln('Input key:');
readln(kl);
writeln('Input word:');
readln(sh);
l:=Length(kl);
for i:=1 to l do
case kl<span style="font-style: italic"> of
'a': ch[i]:=0;
'b': ch[i]:=1;
'c': ch[i]:=2;
'd': ch[i]:=3;
'e': ch[i]:=4;
'f': ch[i]:=5;
'g': ch[i]:=6;
'h': ch[i]:=7;
'i': ch[i]:=8;
'j': ch[i]:=9;
'k': ch[i]:=10;
'l': ch[i]:=11;
'm': ch[i]:=12;
'n': ch[i]:=13;
'o': ch[i]:=14;
'p': ch[i]:=15;
'q': ch[i]:=16;
'r': ch[i]:=17;
's': ch[i]:=18;
't': ch[i]:=19;
'u': ch[i]:=20;
'v': ch[i]:=21;
'w': ch[i]:=22;
'x': ch[i]:=23;
'y': ch[i]:=24;
'z': ch[i]:=25;
end;
for i:=1 to Length(sh) do
begin
case sh[i] of
'a': dh[i]:=0;
'b': dh[i]:=1;
'c': dh[i]:=2;
'd': dh[i]:=3;
'e': dh[i]:=4;
'f': dh[i]:=5;
'g': dh[i]:=6;
'h': dh[i]:=7;
'i': dh[i]:=8;
'j': dh[i]:=9;
'k': dh[i]:=10;
'l': dh[i]:=11;
'm': dh[i]:=12;
'n': dh[i]:=13;
'o': dh[i]:=14;
'p': dh[i]:=15;
'q': dh[i]:=16;
'r': dh[i]:=17;
's': dh[i]:=18;
't': dh[i]:=19;
'u': dh[i]:=20;
'v': dh[i]:=21;
'w': dh[i]:=22;
'x': dh[i]:=23;
'y': dh[i]:=24;
'z': dh[i]:=25;
end;
end;
for i:=1 to Length(sh) do
begin
if (i <= l) then
ah[i] := ch[i] + dh[i]
else
if ((i mod l) <> 0) then
ah[i] := ch[i mod l] + dh[i]
else
ah[i] := ch[Length(kl)] + dh[i];
if (ah[i]>25) then
ah[i]:=ah[i]-26;
end;
for i:=1 to Length(sh) do
begin
case ah[i] of
0: th[i]:='a';
1: th[i]:='b';
2: th[i]:='c';
3: th[i]:='d';
4: th[i]:='e';
5: th[i]:='f';
6: th[i]:='g';
7: th[i]:='h';
8: th[i]:='i';
9: th[i]:='j';
10: th[i]:='k';
11: th[i]:='l';
12: th[i]:='m';
13: th[i]:='n';
14: th[i]:='o';
15: th[i]:='p';
16: th[i]:='q';
17: th[i]:='r';
18: th[i]:='s';
19: th[i]:='t';
20: th[i]:='u';
21: th[i]:='v';
22: th[i]:='w';
23: th[i]:='x';
24: th[i]:='y';
25: th[i]:='z';
end;
end;
writeln('cipher text: ');
writeln(th);
readln;
end.
[i]2:
program vigener;
uses crt;
var a,b,c,d:string;
i,j,k,t,s:integer; key:array [1..100]of integer;
begin
clrscr;
writeln('Vvedite text ');
readln(a);
b:='AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz';
writeln('Vvedite kliucevoe slovo ');
readln(d);
for i:=1 to length(d) do begin
for j:=1 to length(b) do begin
if d[i]=b[j] then key[i]:=(j+1) div 2;
end;end;
for i:=1 to length(a) do begin
for j:=1 to length(b) do begin
s:= (i-1) mod length(d) +1;
t:=key[s];
k:=(j+2*t-1) mod length(b)+1;
if a[i]=b[j] then c:=c+b[k];
end;end;
writeln('Rezultat: ');
writeln(c);
readln;
end.
Прошу Вашей помощи.
Заранее благодарен!