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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2015, 15:40   #11
Maserati
Пользователь
 
Регистрация: 13.10.2013
Сообщений: 28
По умолчанию

Выдает ошибку: Ошибка времени выполнения: Индекс находился вне границ массива.

Пробовал так:
Код:
var a,b,c:string;
i,j,k,d:integer;
begin
writeln('шифр ');
readln(a);
writeln('ключ');
readln(d);
b:='абвгдежзийклмнопрстуфхцчшщъыьэюя';
d := (d + length(b)) mod length(b);c:='';
for i:=1 to length(a) do
begin
k:=(j+d) mod 32;
if a[i]=b[j] then c:=c+b[k];
end;
writeln(c);
end.
и так:

Код:
var a,b,c:string;
i,j,k,d:integer;
begin
writeln('шифр ');
readln(a);
writeln('ключ');
readln(d);
b:='абвгдежзийклмнопрстуфхцчшщъыьэюя';
while d <= 0 do
  d := d + length(b);
for i:=1 to length(a) do
begin
k:=(j+d) mod 32;
if a[i]=b[j] then c:=c+b[k];
end;
writeln(c);
end.
Maserati вне форума Ответить с цитированием
Старый 31.03.2015, 15:46   #12
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Цитата:
Сообщение от Maserati Посмотреть сообщение
Выдает ошибку: Ошибка времени выполнения: Индекс находился вне границ массива.

Пробовал так:
Код:
var a,b,c:string;
i,j,k,d:integer;
begin
writeln('шифр ');
readln(a);
writeln('ключ');
readln(d);
b:='абвгдежзийклмнопрстуфхцчшщъыьэюя';
d := (d + length(b)) mod length(b);c:='';
for i:=1 to length(a) do
begin
k:=(j+d) mod 32;
if a[i]=b[j] then c:=c+b[k];
end;
writeln(c);
end.
и так:

Код:
var a,b,c:string;
i,j,k,d:integer;
begin
writeln('шифр ');
readln(a);
writeln('ключ');
readln(d);
b:='абвгдежзийклмнопрстуфхцчшщъыьэюя';
while d <= 0 do
  d := d + length(b);
for i:=1 to length(a) do
begin
k:=(j+d) mod 32;
if a[i]=b[j] then c:=c+b[k];
end;
writeln(c);
end.
это уже у вас проблемы в этих строках:
Код:
k:=(j+d) mod 32; // если j + d  в сумме дает 32 - то k получим = 0
if a[i]=b[j] then 
  c:=c+b[k]; // нумерация символов в string начинается с 1
либо деление по модулю делайте на число на 1 больше чем длинна алфавита, либо к k в итоге прибавляйте единицу после его вычисления
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 31.03.2015, 16:09   #13
Maserati
Пользователь
 
Регистрация: 13.10.2013
Сообщений: 28
По умолчанию

Попробовал число увеличить все равно не помогло.
к k прибавил 1 тоже не вышло
Maserati вне форума Ответить с цитированием
Старый 31.03.2015, 16:16   #14
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Цитата:
Сообщение от Maserati Посмотреть сообщение
Попробовал число увеличить все равно не помогло.
к k прибавил 1 тоже не вышло
цикл for j:=1 to length(b) do потеряли

Код:
var a,b,c:string;
i,j,k,d:integer;
begin
writeln('шифр ');
readln(a);
writeln('ключ');
readln(d); 
b:='абвгдежзийклмнопрстуфхцчшщъыьэюя';
while d <= 0 do
  d := d + length(b);
for i:=1 to length(a) do
    for j:=1 to length(b) do
    begin
       k:=(j + d - 1) mod 32 + 1; // изменения
       if a[i]=b[j] then c:=c+b[k];
    end;
writeln(c);
end.
пишу код не только за печеньки

Последний раз редактировалось VIK_aka_TOR; 31.03.2015 в 16:18.
VIK_aka_TOR вне форума Ответить с цитированием
Старый 31.03.2015, 16:27   #15
Maserati
Пользователь
 
Регистрация: 13.10.2013
Сообщений: 28
По умолчанию

При вводе абв и ключа -1 выдает абв
При вводе абв и ключа -2 выдает яаб
При вводе абв и ключа 1 выдает вгд

Можно это как то исправить?
Maserati вне форума Ответить с цитированием
Старый 31.03.2015, 16:33   #16
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Цитата:
Сообщение от Maserati Посмотреть сообщение
При вводе абв и ключа -1 выдает абв
При вводе абв и ключа -2 выдает яаб
При вводе абв и ключа 1 выдает вгд

Можно это как то исправить?
бери последний код, там все ок. Проверял

вся магия в этой строчке
Код:
k:=(j + d - 1) mod 32 + 1; // изменения
Изображения
Тип файла: png Снимок.PNG (46.9 Кб, 60 просмотров)
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 31.03.2015, 16:35   #17
Maserati
Пользователь
 
Регистрация: 13.10.2013
Сообщений: 28
По умолчанию

Заработало,спасибо большое.
Maserati вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
шифр цезаря Lilen Паскаль, Turbo Pascal, PascalABC.NET 5 24.10.2015 05:07
Шифр цезаря microlab Паскаль, Turbo Pascal, PascalABC.NET 2 19.01.2014 18:41
шифр Цезаря Defa4ka Помощь студентам 5 23.10.2011 13:48
Шифр Цезаря Goracio Помощь студентам 1 19.04.2010 14:53
Шифр Цезаря Jasper92 Помощь студентам 3 02.12.2009 18:47