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

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

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

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

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

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

Помогите переделать шифр Цезаря,чтобы можно было вводить и отрицательный ключ.

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

Последний раз редактировалось Serge_Bliznykov; 31.03.2015 в 15:03.
Maserati вне форума Ответить с цитированием
Старый 31.03.2015, 14:22   #2
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

справедливо если вводится отрицательное по модулю меньшее чем длинна ключа

Код:
writeln('ключ');
readln(d);
d := (d + length(b)) mod length(b);
или так

Код:
writeln('ключ');
readln(d);
while d <= 0 do
  d := d + length(b);
а откуда у вас 32? длинна алфавита?
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 31.03.2015, 14:27   #3
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

Цитата:
а откуда у вас 32? длинна алфавита?
элементарно VIK_aka_TOR, отсутствует буква Ё
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.
Niro вне форума Ответить с цитированием
Старый 31.03.2015, 14:29   #4
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Цитата:
Сообщение от Niro Посмотреть сообщение
элементарно VIK_aka_TOR, отсутствует буква Ё
и добавлен пробел )
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 31.03.2015, 14:45   #5
Maserati
Пользователь
 
Регистрация: 13.10.2013
Сообщений: 28
По умолчанию

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

Цитата:
Сообщение от Maserati Посмотреть сообщение
В первом варианте если вводить отрицательное число,то выдает ошибку.
Во втором варианте если вводить отрицательное число,то программа зацикливается.
показывай как внесены дополнения
p.s. код помещай между тегами [ CODE ] [ / CODE ] (нажать пиктограмму #)
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 31.03.2015, 15:04   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от VIK_aka_TOR Посмотреть сообщение
и добавлен пробел )
Нет там пробела. Это TC код не отформатировал, а движок форума не любит длинные слова...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.03.2015, 15:07   #8
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Нет там пробела. Это TC код не отформатировал, а движок форума не любит длинные слова...
ну только если движок форма)

в таком случае претензии к коду, в одном случае ТС пишет 32, а в другом Length(b) что не комильфо. Атата сделать создателю темы за такое
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 31.03.2015, 15:26   #9
Maserati
Пользователь
 
Регистрация: 13.10.2013
Сообщений: 28
По умолчанию

Пробовал вот так:
Код:
var a,b,c:string;
i,j,k,d:integer;
begin
writeln('шифр ');
readln(a);
writeln('ключ');
readln(d);
d := (d + length(b)) mod length(b);c:='';
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:30   #10
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);
d := (d + length(b)) mod length(b);c:='';
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.
поменяйте строки местами между собой.

Код:
d := (d + length(b)) mod length(b);c:='';
b:='абвгдежзийклмнопрстуфхцчшщъыьэюя';
Использование b (алфавита) до его инициализации несколько не предусмотрительно. Полагаю аналогичная проблема была и со вторым способом, когда к d прибавляли length(b) = 0, из-за чего d не менялось, отсюда и зацикливание.
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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