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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2017, 14:30   #1
pepe1niy
 
Регистрация: 19.11.2017
Сообщений: 5
По умолчанию Помогите с шифровкой

Не могу понять что дальше делать
вот шифровка : По своему содержанию этот шифр включает в себя шифр Цезаря и шифр Виженера, однако в шифре Гронсфельда используется числовой ключ. Зашифруем слово “THALAMUS”, используя в качестве ключа число 4123. Вписываем цифры числового ключа по порядку под каждой буквой слова. Цифра под буквой будет указывать на количество позиций, на которые нужно сдвинуть буквы. К примеру вместо Т получится Х и т.д.
T H A L A M U S
4 1 2 3 4 1 2 3
T U V W X Y Z
0 1 2 3 4
В итоге: THALAMUS = XICOENWV
вот что написано :
Код:
uses crt;
var x,j,n,k,m,b:integer;
    s,st,stroka:string;
    i:byte;
begin
 writeln('Введите предложение на русском языке:');
  readln(s);
 writeln ('Введите на смещение по буквам');  
  readln (x);
str (x,st);
for i:=1 to length (s) do 
stroka:=stroka +st; 
for i:=1 to length (s) do begin 
 stroka:=copy(stroka,1,length (s));
 if s[i] in (['А'..'Я']) then s[i]:=chr(ord(s[i])+stroka[i])
  else if s[i]='Я' then s[i]:='А'
   else if s[i] in ['а'..'я'] then s[i]:=chr(ord(s[i])+stroka[i])
   else if s[i]='я' then s[i]:='а';
end;

 writeln('Зашифрованная строка:');
  writeln (s);

end.
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось pepe1niy; 11.12.2017 в 18:00.
pepe1niy вне форума Ответить с цитированием
Старый 11.12.2017, 14:57   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

А Вы молодец, не сдаётесь.
И, судя по всему, код пытаетесь написать.
Это похвально и достойно поощрения!

Тогда Вам пара вопросов:
в примере у Вас латиница, а Вы в программе пытаетесь сделать для русских букв.
Это не ошибка? для какого алфавита Вам нужно написать код?

Какой у Вас Pascal ? (компилятор/IDE)?

для начала предложу такой код:
Код:
const alphabet : string = 'абвгдежзиклмнопрстуфхцчшэюя';
var 
    s,keystroka:string;
    i,p:integer;
    err:boolean;
begin
  writeln('Введите предложение на русском языке:');
  readln(s);
  repeat
    writeln ('Введите на смещение по буквам');  
    readln (keystroka);
    err:=false;
    if Length(keystroka)=0 then err := true
    else 
      for i:=1 to Length(keystroka) do 
        if not (keystroka[i] in ['0'..'9']) then err := true;
    if err then WriteLn('Ошибка! Введите числовое значение без пробелов!');
  until Not err;
    
 while length(keystroka)<length(s) do keystroka := keystroka + keystroka;
 
 {шифрование}
 for i:=1 to length (s) do begin 
    p := Pos(s[i], alphabet);
    if p>0 then 
       s[i]:= Copy(alphabet, (p+ord(keystroka[i])-ord('0')) mod length(alphabet), 1)[1];
 end;

 writeln('Зашифрованная строка:');
 writeln (s);

end.

Последний раз редактировалось Serge_Bliznykov; 11.12.2017 в 15:19.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.12.2017, 18:10   #3
pepe1niy
 
Регистрация: 19.11.2017
Сообщений: 5
По умолчанию

Спасибо большое, сразу дешифровку понял как писать!!
pepe1niy вне форума Ответить с цитированием
Старый 11.12.2017, 19:02   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Пожалуйста.
Тему не закрываю. Будут вопросы - welcome!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.12.2017, 16:58   #5
pepe1niy
 
Регистрация: 19.11.2017
Сообщений: 5
По умолчанию

вот конечный вариант, того что получилось, если вам интересно ))

Код:
 

 const
  alphabet: string = 'абвгдежзиклмнопрстуфхцчшэюяАБВГДЕЖЗИКЛМНОПРСТУФХЦЧШЩЭЮЯ';

var
  s, keystroka: string;
  i, p: integer;
  err: boolean;

begin
  writeln('Введите предложение на русском языке:');
  readln(s);
  repeat
    writeln('Введите на смещение по буквам');  
    readln(keystroka);
    err := false;
    if Length(keystroka) = 0 then err := true
    else 
      for i := 1 to Length(keystroka) do 
        if not (keystroka[i] in ['0'..'9']) then err := true;
    if err then WriteLn('Ошибка! Введите числовое значение без пробелов!');
  until not err;
  
  while length(keystroka) < length(s) do keystroka := keystroka + keystroka;
  
  {шифрование}
  for i := 1 to length(s) do 
  begin
    p := Pos(s[i], alphabet);
    if p > 0 then 
      s[i] := Copy(alphabet, (p + ord(keystroka[i]) - ord('0')) mod length(alphabet), 1 )[1];
  end;
  
  writeln('Зашифрованная строка:');
  writeln(s);
  repeat
    writeln('Введите на смещение по буквам');  
    readln(keystroka);
    err := false;
    if Length(keystroka) = 0 then err := true
    else 
      for i := 1 to Length(keystroka) do 
        if not (keystroka[i] in ['0'..'9']) then err := true;
    if err then WriteLn('Ошибка! Введите числовое значение без пробелов!');
  until not err;
  
  while length(keystroka) < length(s) do keystroka := keystroka + keystroka;
  for i := 1 to length(s) do 
  begin
    p := Pos(s[i], alphabet);
    if p > 0 then 
      s[i] := Copy(alphabet, (p - ord(keystroka[i]) + ord('0')) mod length(alphabet), 1 )[1];
  end;
  writeln('Расшифрованная строка:');
  writeln(s);
end.

Последний раз редактировалось Serge_Bliznykov; 14.12.2017 в 17:45.
pepe1niy вне форума Ответить с цитированием
Старый 14.12.2017, 17:49   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

с прописными/строчными буквами не очень корректно получилось.
а так - нормально.
ну, главное, чтобы Вас всё устраивало!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с шифровкой pepe1niy Паскаль, Turbo Pascal, PascalABC.NET 3 05.12.2017 17:11
Перевод нужен срочно помогите ) в течение 2 часов от Паскаля на Турбо СИ нужно помогите Жанибек Помощь студентам 14 01.04.2015 17:23
Запара с шифровкой=( Wu-Kid Общие вопросы Delphi 8 22.05.2013 10:52
Помогите создать програму для роботы с файлами, пожалуйста помогите нужно очень срочно Сергей Человек Фриланс 3 06.07.2009 19:30