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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2010, 13:45   #1
Sianessa
Форумчанин
 
Регистрация: 18.01.2009
Сообщений: 144
По умолчанию Delphi: ошибки в синтаксисе

В общем такая проблема, нашла исходник Шифра Винжера в интернете,
но когда вставляю код в форму - выдаёт ошибки.
Исправить не получается, помогите:
Сам код:
Код:
var
  Form1: TForm1;
  mas_alf: array[1..32] of char =('А','Б','В','Г','Д','Е','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ь','Ы','Ъ','Э','Ю','Я');
  tab_Vig: array[1..32,1..32] of Char;

implementation

{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
  i,j,k,n:integer;
begin
 k:=0;
 n:=k;

 for i:=Ord('А')-191 to Ord('Я')-191 do
 begin
   k:=n+1;
   for j:=Ord('А')-191 to Ord('Я')-191 do
    begin
     if k = 33 then
        k:=1;
     tab_vig[i][j]:=mas_alf[k];
     k:=k+1;
    end;
    n:=n+1;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
  key : array [0..255] of Char;
  s:char;
  k:Boolean;
  length_key,length_text,i,j,c,stroka,stolbec: integer;
begin
  Label5.Caption:='';//
  Memo2.Clear;//
  length_key:=Edit1.GetTextLen;
  Edit1.GetTextBuf(key,sizeof(key));
  length_text:=Memo1.GetTextLen;
//выводим таблицу Виженера
 for i:=Ord('А')-191 to Ord('Я')-191 do
 begin
    for j:=Ord('А')-191 to Ord('Я')-191 do
    begin
      Label5.Caption:= Label5.Caption +'  '+ tab_Vig[i][j];
    end;
    Label5.Caption := Label5.Caption + #13+#10;
 end;
//приступаем к процессу шифрования
 j:=1;
 c:=0;
 k:=false;
 Memo2.Lines.Add('Зашифрованный текст:');
 Memo2.Lines.Add('------------------------');
  for i:= 0 to Memo1.Lines.Count-1 do
  begin
     s:=Memo1.Lines[i][j];
     if ((s <> #0) or (s <> #13)) then
     while k = false do
     begin
       if Ord(key[c])>223 then
         stolbec:=Ord(key[c])-32-191
       else
         stolbec:=Ord(s)-191;
       if Ord(s)>223 then
         stroka:=Ord(s)-32-191
       else
         stroka:=Ord(s)-191;
       Memo2.Text:=Memo2.Text+tab_Vig[stroka][stolbec];
       if(c < length_key-1)then
         c:=c+1
       else
         c:=0;
       j:=j+1;
       s:=Memo1.Lines[i][j];
       if(s = #0) then
         k:=true;
     end;
     k:=false;
     j:=1;
  end;
 Memo2.Lines.Add('------------------------');
end;

procedure TForm1.Button2Click(Sender: TObject);

var
  key : array [0..255] of Char;
  s:char;
  k:Boolean;
  length_key,length_text,i,j,c,stroka,stolbec,q: integer;
begin
  Label5.Caption:='';//
  Memo2.Clear;//
  length_key:=Edit1.GetTextLen;
  Edit1.GetTextBuf(key,sizeof(key));
  length_text:=Memo1.GetTextLen;
  j:=1;
  c:=0;
  k:=false;
  Memo2.Lines.Add('Расшифрованный текст:');
  Memo2.Lines.Add('------------------------');
  for i:= 0 to Memo1.Lines.Count-1 do
  begin
     if Ord(Memo1.Lines[i][j])>223 then
         s:=Ord(Memo1.Lines[i][j])-32-191
     else
         s:=Ord(Memo1.Lines[i][j])-191;
     s:=Memo1.Lines[i][j];
     if ((s <> #0) or (s <> #13)) then
     while k = false do
     begin
       if Ord(key[c])>223 then
         stolbec:=Ord(key[c])-32-191
       else
         stolbec:=Ord(s)-191;
       for q:=1 to 32 do
       begin
         if tab_Vig[q][stolbec] = s then
         begin
           Memo2.Text:=Memo2.Text+Chr(q+191);
            break;
         end;
       end;

       if(c < length_key-1)then
         c:=c+1
       else
         c:=0;
       j:=j+1;
       s:=Memo1.Lines[i][j];
       if(s = #0) then
         k:=true;
     end;
     k:=false;
     j:=1;
  end;
 Memo2.Lines.Add('------------------------');
end;


end.
Сам исходник если нужно прикрепляю

Помогите пожалуйста сделать так чтобы прога работала!
Вложения
Тип файла: rar проба 2.rar (5.5 Кб, 17 просмотров)
Sianessa вне форума Ответить с цитированием
Старый 24.10.2010, 14:33   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
     if Ord(Memo1.Lines[i][j])>223 then
         s:=chr(Ord(Memo1.Lines[i][j])-32-191)
     else
         s:=chr(Ord(Memo1.Lines[i][j])-191);
Только я не вьехал как программа работает...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.10.2010, 14:39   #3
Sianessa
Форумчанин
 
Регистрация: 18.01.2009
Сообщений: 144
По умолчанию

Stilet, благодарю за помощь!
Всё работает)
Это алгоритм шифрования Виженера ^__^

А работает так:
В первый Мемо вводишь сообщение, которое надо зашифровать, в Эдит - слово-ключ)
По нажатию первой кнопки - зашифровывает, второй - расшифровывает))

Последний раз редактировалось Stilet; 24.10.2010 в 15:28.
Sianessa вне форума Ответить с цитированием
Старый 25.01.2012, 22:11   #4
Alvi
Новичок
Джуниор
 
Регистрация: 25.01.2012
Сообщений: 1
По умолчанию ошибка

в таблице Ё не хватает. мужик, написавший прогу этот момент упустил.
Alvi вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
smtp - сообщение об ошибке: 501, типа ошибка в синтаксисе, косяк с аргументами Dimarik Win Api 5 10.04.2010 22:06
Ошибки Delphi faraon1792 Помощь студентам 0 26.03.2010 15:51
Ошибки в Delphi zombikkk Общие вопросы Delphi 9 13.12.2009 14:20
Ошибки в Delphi dvj_serg_grin Общие вопросы Delphi 2 15.06.2009 20:19
ошибка в синтаксисе Dimarik Общие вопросы C/C++ 7 30.04.2009 21:43