Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
 Аватар для seruy-t
2 / 2 / 2
Регистрация: 21.08.2010
Сообщений: 216

Нужно сделать функцию расшифровки (алгоритм Цезаря)

02.11.2012, 19:02. Показов 1594. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет ! Есть моя функция шифрования
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
char find_and_encr_char(char what_find,int key){
      char engl_abet[26]= {'q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m'};
bool founded= false; // найдено ?
 
      char encr_char;
      for(int i=0;i<27;i++){
 
          if(what_find==' ') {
          encr_char='_';
          founded=true;
          return encr_char;
                             }
 
          int abskey=i+key; // номер елемента в массиве + ключ
                            if(engl_abet[i]==what_find){
                                if((i+key)>26){ abskey=(i+key)%26 ; }
                                encr_char=engl_abet[abskey];
                                founded=true;
                                break;
 
                                                       }
 
                            }
 
 
if(founded==false) encr_char=what_find; 
 
                              return encr_char; }

Нужно сделать обратную к ней, то есть расшифровки. Делаю так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
char find_and_decr_char(char what_find,int key){
      char engl_abet[26]= {'q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m'};
bool founded= false;
 
      char decr_char;
      for(int i=0;i<27;i++){
 
          if(what_find=='_') {
          decr_char=' ';
          founded=true;
          return decr_char;
                             }
 
          int abskey=i-key; 
                            if(engl_abet[i]==what_find){
                                if(abskey<-26){
                 
                                      abskey=(-1)*(i-key)%26 ;  //думаю ошибка где-то здесь 
 
                                           }
 
                                decr_char=engl_abet[abskey];
                                founded=true;
                                break;
 
                                                       }
 
                            }
 
 
if(founded==false) decr_char=what_find; 
 
                              return decr_char; }
Не корректно расшифровывает при больших ключах
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.11.2012, 19:02
Ответы с готовыми решениями:

Шифрование: необходимо сделать обратный алгоритм расшифровки
Ребят, помогите! Дана задача, есть алгоритм шифрования, необходимо сделать обратный алгоритм расшифровки (и добавить кнопку).

Криптография - метод Цезаря. Ошибка расшифровки
Есть программа... Метод Цезаря, сдвиг +3, должна шифровать и расшифровывать... Шифрует нормально - Пример &lt; shagalkin evgeniy -&gt; ...

Программа для расшифровки с использованием алгоритмов шифра Цезаря и Виженера
Мне нужно написать программу с использованием виндовс формы, которая будет расшифровывать сообщения и шифра Цезаря и шифра Виженера. Каким...

11
 Аватар для Jettard
41 / 39 / 7
Регистрация: 27.05.2010
Сообщений: 252
03.11.2012, 19:19
Цитата Сообщение от seruy-t Посмотреть сообщение
char engl_abet[26]= {'q','w','e','r','t','y','u','i','o','p' ,'a','s','d','f','g','h','j','k','l','z' ,'x','c','v','b','n','m'};
Не хотите нормально написать алфавит?
0
 Аватар для seruy-t
2 / 2 / 2
Регистрация: 21.08.2010
Сообщений: 216
03.11.2012, 19:40  [ТС]
Jettard, как я и предполагал, результат прежний

C++
1
 char engl_abet[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
0
03.11.2012, 19:46

Не по теме:

//founded
По-моему правильнее found, т.к. это уже вторая форма глагола (в прошедшем времени) от find. Грамматика важна даже в комментариях С++.

0
 Аватар для kazak
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,306
03.11.2012, 19:49
Цитата Сообщение от seruy-t Посмотреть сообщение
char engl_abet[26]
Цитата Сообщение от seruy-t Посмотреть сообщение
for(int i=0;i<27;i++){
Цитата Сообщение от seruy-t Посмотреть сообщение
if(engl_abet[i]==what_find){
Ничего не смущает?
0
 Аватар для seruy-t
2 / 2 / 2
Регистрация: 21.08.2010
Сообщений: 216
03.11.2012, 19:59  [ТС]
kazak, Поправил
C++
1
for(int i=0;i<26;i++){
Но все по прежнему

Добавлено через 1 минуту
Kuzia domovenok,

Не по теме:

Возьму на заметку, извините

0
 Аватар для kazak
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,306
03.11.2012, 19:59
Цитата Сообщение от seruy-t Посмотреть сообщение
if(abskey<-26){
abskey=(-1)*(i-key)%26 ;
Логичнее if(abskey<0)
0
 Аватар для seruy-t
2 / 2 / 2
Регистрация: 21.08.2010
Сообщений: 216
03.11.2012, 20:03  [ТС]
kazak, Возможно, но ничего не изменилось
0
 Аватар для kazak
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,306
03.11.2012, 21:01
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
char find_and_encr_char(char what_find,int key)
{
   char engl_abet[26]= {'q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m'};
 
   for(int i=0;i<26;i++)
   {
      if(what_find == ' ')
         return '_';
      if (what_find == engl_abet[i])
         if ((i + key) > 25)
            return engl_abet[(i+key)%26];
         else
            return engl_abet[i+key];
   }
 
   return what_find;
}
 
char find_and_decr_char(char what_find,int key)
{
   char engl_abet[26]= {'q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m'};
 
   for(int i=0;i<26;i++)
   {
      if(what_find == ' ')
         return '_';
      if (what_find == engl_abet[i])
         if ((i-key) < 0)
            return engl_abet[26 - abs(i - key)%26];
         else
            return engl_abet[i-key];
   }
 
   return what_find;
}
0
 Аватар для seruy-t
2 / 2 / 2
Регистрация: 21.08.2010
Сообщений: 216
04.11.2012, 12:37  [ТС]
kazak,
C++
1
     return engl_abet[26 - abs(i - key)%26];
invalid operands of types ‘__gnu_cxx::__enable_if<true, double>::__type {aka double}’ and ‘int’ to binary ‘operator%’|
0
 Аватар для seruy-t
2 / 2 / 2
Регистрация: 21.08.2010
Сообщений: 216
04.11.2012, 13:08  [ТС]
Сделал так
C++
1
2
3
4
5
6
7
8
9
10
11
12
char find_and_decr_char(char what_find, int key)
{
   char engl_abet[26]= {'q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m'};
 
   for(int i=0;i<26;i++)
   {
      if(what_find == ' ')         return '_';
      if (what_find == engl_abet[i]){
         if ((i-key) < 0)         return engl_abet[26 - (-1*(i - key)%26)];
         else            return engl_abet[i-key];
   }
   }
Ввожу qwerty, при расшифровке теряется q.
Миниатюры
Нужно сделать функцию расшифровки (алгоритм Цезаря)  
0
 Аватар для kazak
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,306
04.11.2012, 15:23
Цитата Сообщение от seruy-t Посмотреть сообщение
return engl_abet[26 - (-1*(i - key)%26)];
C++
1
return engl_abet[(26 - (-1*(i - key)%26))%26];
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.11.2012, 15:23
Помогаю со студенческими работами здесь

Оптимизация расшифровки файла | алгоритм хаффмана
Привет, форумчани! Собственно сразу к вопросу. У меня имеется зашифрованный файл весом 390 КБ и считывание (расшифровка) в режиме debug ...

Алгоритм расшифровки произведения Четных и Нечетных чисел
Помогите создать любой алгоритм, на любом языке для решения этой задачки:

Нужно сделать алгоритм!)
Составить алгоритм, вводящий значения элементов K последовательности n целых чисел (n&gt;0 вводится в начале работы) и определяющий число...

Нужно сделать алгоритм
алгоритм - блок-схему(любую) связанную с планшетным пк.

нужно сделать алгоритм вычисления
Розробити алгоритм обчислення виразу (Таблиця 11.1), використовуючи функції. Варіант 9.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru