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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2016, 14:51   #1
Pistoletka
Пользователь
 
Регистрация: 18.09.2016
Сообщений: 13
По умолчанию Задача на шифрование текста

Подскажите, где ошибка? При перестановке по заданному порядку выходит сообщение о том, что "Ошибка времени выполнения: Индекс находился вне границ массива".
Задача. Открытый текст: "ШИФРОВАНИЕ_ПЕРЕСТАНОВКОЙ".
Ключ (правило перестановки): группы из 8 букв с порядковыми номерами
1, 2, ..., 8 переставить в порядок 3-8-1-5-2-7-6-4.
Шифртекст: "ФНШОИАВР_СИЕЕЕРПННТВАОКО".

Код:
Program shifr;
const n=30;
var
 a:array[1..n] of integer;
 len:integer;
 s, r:string;
 i, j, v:integer;
 p, key:integer;
Begin
 write('Введите текст для шифрования: ');
 read(s);
 writeln('-------------------------------------------------');
 write('Введите количество цифр в ключе: ');
 readln(key);
 len:= length(s);
 while len mod key<>0 do
  begin
   s:=s+' ';
   inc(len)
  end;
 writeln('Введите ключ из ',key,' цифр: ');
 repeat
  v:=0;
  for i:=1 to key do
   begin
    read(p);
    a[i]:=p
   end;
  for i:=1 to key-1 do
   for j:=i+1 to key do
    if a[i]=a[j] then inc(v);
    if v<>0 then
     begin
      writeln ('Ошибка! Символы ключа не уникальны!');
      write('Введите ключ из ',key,' цифр: ');
     end
 until v=0;
  while v<>len do
   begin
    for i:=1 to key do
     r[i+v]:=s[a[i]+v];
     v:=v+key
   end;
 writeln('--------------------------------------------------');
 write('Зашифрованный текст: ');
 for i:=1 to len do
  write(r[i]);
 writeln;
End.
Pistoletka вне форума Ответить с цитированием
Старый 18.09.2016, 15:18   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А на какой хоть строке ошибку показывает?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 18.09.2016, 16:45   #3
Pistoletka
Пользователь
 
Регистрация: 18.09.2016
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А на какой хоть строке ошибку показывает?
На этой строке.
r[i+v]:=s[a[i]+v];
Pistoletka вне форума Ответить с цитированием
Старый 18.09.2016, 20:54   #4
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Ага, и добавить, что это не TurboPascal, и для строки r требуется выделение памяти до начала использования, например, присвоением r:=s;
FPaul вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шифрование текста Dushka Visual C++ 2 13.10.2011 11:29
шифрование текста Lolipo Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 28.10.2010 10:10
Шифрование текста Devostator Общие вопросы Delphi 24 30.09.2010 20:06
шифрование текста Sparky Помощь студентам 2 01.06.2010 18:24
Шифрование текста SoundMan Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 15.08.2008 22:39