Здравствуйте!
Получил от учителя задание: написать на 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.
  Прошу Вашей помощи.
Заранее благодарен!