Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2016, 12:08   #1
Smile189
Пользователь
 
Регистрация: 01.10.2016
Сообщений: 25
По умолчанию Шифр Виженера. Паскаль. Помогите исправить ошибки

Шифр Виженера.


Код:
program Shifr_Vizhenera;
uses crt;
 
const
n=32;
 
mal : array [1..n] of char =
('а','б','в','г','д','е','ж','з'
,'и','й','к','л','м','н','о','п'
,'р','с','т','у','ф','х','ц','ч',
'ш','щ','ъ','ы','ь','э','ю','я');
 
bol : array [1..n] of char =
('А','Б','В','Г','Д','Е','Ж','З'
,'И','Й','К','Л','М','Н','О','П',
'Р','С','Т','У','Ф','Х','Ц','Ч'
,'Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я');
 
 
var
i, j , k, p : integer;
s1, s2, s3, s4  : string;
 
begin
clrscr;
 
writeln('Введите ключевое слово для шифрования : ');
write('====> ');
readln( s1 );
writeln;
writeln('Введите текст который хотите зашифровать : ');
readln( s2 );
k:=1;
j:=0;
   repeat
           for i:=1 to length(s1) do
      begin
             j:=j+1;
               if k<=length(s2) then
               if  (ord(s2[j]) <> 32) then
              begin
 
       insert(s1[i], s3, j);
              end
       else
            if  (ord(s2[j]) = 32 ) then
       begin
 
           insert(chr(ord(s2[j])), s3, j);
           i:=i-1;
       end;
           k:=k+1;
      end;
   until length(s2) < k;
 
writeln('                            РЕЗУЛЬТАТ ПРОГРАММЫ                  ' );
writeln('Ключевое слово       : ', s1);
writeln('Шифруемая фраза      : ', s2);
writeln('Ключевые позиции     : ', s3);
 
 
for i:=1 to length(s3) do
    for j:=1 to n do
    if (s3[i]=mal[j]) or (s3[i]=bol[j]) then
       begin
       for p:=1 to n do
          begin
       if (s2[i]=mal[p])  then
    begin
      if (p+j-1<=32) then
       begin
       s2[i]:=mal[p+j-1];
       p:=32;
       end
       else
       s2[i]:=mal[p+j-1-32];
       p:=32;
    end;
 
       if(s2[i]=bol[p])   then
    begin
      if (p+j-1<=32) then
       begin
       s2[i]:=bol[p+j-1];
       p:=32;
       end
      else
      s2[i]:=bol[p+j-1-32];
      p:=32;
    end;
 
       end;
      end
    else
    if (ord(s3[i]) = 32) then
    begin
    s2[i]:=chr(ord(s3[i]));
 
    end;
 
writeln('Зашифрованная фраза  : ', s2 );
readln;
writeln(‘-----------------------------------------------------------------‘);
 
 
writeln('Введите ключевое слово для дешифрования : ');
write('====> ');
readln( s1 );
writeln;
writeln('Введите текст который хотите расшифровать : ');
readln( s2 );
k:=1;
j:=0;
   repeat
           for i:=1 to length(s1) do
      begin
             j:=j+1;
               if k<=length(s2) then
               if  (ord(s2[j]) <> 32) then
              begin
 
       insert(s1[i], s4, j);
              end
       else
            if  (ord(s2[j]) = 32 ) then
       begin
 
           insert(chr(ord(s2[j])), s4, j);
           i:=i-1;
       end;
           k:=k+1;
      end;
   until length(s2) < k;
 
writeln('                            РЕЗУЛЬТАТ ПРОГРАММЫ                  ' );
writeln('Ключевое слово       : ', s1);
writeln('Дешифруемая фраза    : ', s2);
writeln('Ключевые позиции     : ', s4);
 
 
for i:=1 to length(s4) do
    for j:=1 to n do
    if (s4[i]=mal[j]) or (s4[i]=bol[j]) then
       begin
       for p:=1 to n do
          begin
       if (s2[i]=mal[p])  then
    begin
      if (p-j+1>=1) then
       begin
       s2[i]:=mal[p-j+1];
       p:=32;
       end
       else
       s2[i]:=mal[p-j+1+32];
       p:=32;
    end;
 
       if(s2[i]=bol[p])   then
    begin
      if (p-j+1>=1) then
       begin
       s2[i]:=bol[p-j+1];
       p:=32;
       end
      else
      s2[i]:=bol[p-j+1+32];
      p:=32;
    end;
 
       end;
      end
    else
    if (ord(s4[i]) = 32) then
    begin
    s2[i]:=chr(ord(s4[i]));
 
    end;
 
writeln('Зашифрованная фраза  : ', s2 );
readln;
 
end.
Smile189 вне форума Ответить с цитированием
Старый 25.10.2016, 16:27   #2
Zams
Пользователь
 
Аватар для Zams
 
Регистрация: 25.10.2016
Сообщений: 15
По умолчанию

Код:
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[i] 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.
Типо того?
Zams вне форума Ответить с цитированием
Старый 25.10.2016, 16:36   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Zams, так писать нельзя.
для начала, откройте для себя функции ord() и chr()
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.10.2016, 18:21   #4
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Zams, так писать нельзя.
для начала, откройте для себя функции ord() и chr()
Ну почему нельзя? - я тоже когда-то так писал (писал программу, которая генерировала мне вот примерно такую программу как в посте выше). В надежде, что студент попробует сдать это преподу и мы увидим новые интересные вопросы от него на форуме. Это работало )
rrrFer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шифр Виженера (Взлом) RXK Помощь студентам 1 21.06.2015 19:25
Шифр Виженера в Delphi makson4ik Помощь студентам 2 07.05.2012 22:44
Шифр Виженера Radiy Паскаль, Turbo Pascal, PascalABC.NET 7 12.06.2010 10:05