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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2010, 17:43   #1
Aleksey1989
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 127
По умолчанию Кодирование сообщения

Помогите, пожалуйста, найти ошибку в коде. Ошибка возникает при пользовании данной процедурой.

Код:
procedure TForm1.kodirovanie(slovo,kl_slovo: string);
var
 por_sl,por_kl_sl,summa_por:array [0..200] of integer;
 i,k:integer;
 rezult:string;
begin
rezult:='';
//Порядок букв в слове__________________________________________________________
  for i:=0 to length(slovo) do
    for k:=1 to 26 do
      if slovo[i]=abc[k] then por_sl[i]:=k
      else por_sl[i]:=400;
//______________________________________________________________________________


//Порядок букв в ключевом слове_________________________________________________
  for i:=0 to length(kl_slovo) do
    for k:=1 to 26 do
      if kl_slovo[i]=abc[k] then por_kl_sl[i]:=k;
//______________________________________________________________________________


//Сложение порядков букв________________________________________________________
  k:=0;
  for i:=0 to length(slovo) do
    begin
      summa_por[i]:=por_sl[i]+por_kl_sl[k];
      k:=k+1;
      if k>(length(kl_slovo)-1) then k:=0;
    end;
//______________________________________________________________________________


//Законченный порядок зашифрованного сообщения__________________________________
  for i:=0 to length(slovo) do
    begin
      if summa_por[i]>=26 then summa_por[i]:=summa_por[i]-26;
    end;
//______________________________________________________________________________


//Преобразование порядка зашифрованного сообщения в зашифрованное сообщение_____
  for i:=0 to length(slovo) do
    begin
      k:=summa_por[i];
      if summa_por[i]<300 then rezult[i]:=abc[k]
      else rezult[i]:=' ';
    end;
//______________________________________________________________________________
Изображения
Тип файла: jpg 1212.JPG (34.6 Кб, 147 просмотров)
Aleksey1989 вне форума Ответить с цитированием
Старый 22.11.2010, 13:53   #2
Aleksey1989
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 127
По умолчанию

Проблема всё ещё актуальна
Aleksey1989 вне форума Ответить с цитированием
Старый 22.11.2010, 13:57   #3
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Иногда проблема возникает немного раньше. И скорее всего в Вашем случае речь идет о неверном индексе. В частности Rezult[i] строка, то есть не имеет элемента с индексом нуль. В данном случае лучше использовать Rezult[i+1].
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 22.11.2010 в 14:01.
Utkin вне форума Ответить с цитированием
Старый 22.11.2010, 14:57   #4
Aleksey1989
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 127
По умолчанию

Согласен. Вот исправленный код, но ошибка всё равно появляется.
Код:
procedure TForm1.kodirovanie(slovo,kl_slovo: string);
var
 por_sl,por_kl_sl,summa_por:array [1..200] of integer;
 i,k:integer;
 rezult:string;
begin

//Порядок букв в слове__________________________________________________________
  for i:=1 to length(slovo) do
    for k:=1 to 26 do
      begin
        if slovo[i]=abc[k] then begin por_sl[i]:=k; break; end
        else if k=26 then por_sl[i]:=400;
      end;
//______________________________________________________________________________


//Порядок букв в ключевом слове_________________________________________________
  for i:=1 to length(kl_slovo) do
    for k:=1 to 26 do
      if kl_slovo[i]=abc[k] then begin por_kl_sl[i]:=k; break; end;
//______________________________________________________________________________


//Сложение порядков букв________________________________________________________
  k:=1;
  for i:=1 to length(slovo) do
    begin
      summa_por[i]:=por_sl[i]+por_kl_sl[k];
      k:=k+1;
      if k>(length(kl_slovo)) then k:=1;
    end;
//______________________________________________________________________________


//Законченный порядок зашифрованного сообщения__________________________________
  for i:=1 to length(slovo) do
    begin
      if summa_por[i]>=26 then summa_por[i]:=summa_por[i]-26;
    end;
//______________________________________________________________________________


//Преобразование порядка зашифрованного сообщения в зашифрованное сообщение_____
  for i:=1 to length(slovo) do
    begin
      if summa_por[i]<300 then rezult[i]:=abc[(summa_por[i])]
      else rezult[i]:=' ';
    end;
//______________________________________________________________________________

  Memo1.Lines.Add(rezult);
end;
Может быть ошибка связана с тем, что нужно как-то показать программе, что строковой переменной rezult необходимо выделить память?
Aleksey1989 вне форума Ответить с цитированием
Старый 22.11.2010, 15:41   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Верно. Ты инициализируешь rezult пустой строкой, то есть ничем. Нужно выделить место, для этого можно воспользоваться SetLength(строка, число символов). Подробное описание можно спросить у гугла, он точно знает .
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 22.11.2010, 15:41   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Удалить, при низких скоростях инет глючит, что выражается в дублировании сообщений...
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кодирование ресурсов MDS Общие вопросы C/C++ 3 04.05.2010 23:18
Кодирование asil Помощь студентам 1 02.05.2009 20:48
Кодирование. Blizzz Общие вопросы Delphi 5 19.01.2009 18:28
Кодирование Mss_Smith Помощь студентам 3 17.04.2007 14:46