Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
seruy-t
 Аватар для seruy-t
2 / 2 / 0
Регистрация: 21.08.2010
Сообщений: 216
02.11.2012, 19:02     Нужно сделать функцию расшифровки (алгоритм Цезаря) #1
Всем привет ! Есть моя функция шифрования
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; }
Не корректно расшифровывает при больших ключах
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2012, 19:02     Нужно сделать функцию расшифровки (алгоритм Цезаря)
Посмотрите здесь:

C++ С++ Код Цезаря(программа выводит не то что нужно)
Алгоритм Цезаря C++
Нужно сделать алгоритм, решающий задачу за время н C++
C++ Дан массив из прототипов функций или указателей на функцию, сделать функцию, возвращающую этот массив
даны 2 последовательности в файлах, в двух разных, нужно их обьединить и отсортировать по возрастанию. Но нужно сделать прогу с помошью указателей C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jettard
 Аватар для Jettard
40 / 38 / 5
Регистрация: 27.05.2010
Сообщений: 253
03.11.2012, 19:19     Нужно сделать функцию расшифровки (алгоритм Цезаря) #2
Цитата Сообщение от 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'};
Не хотите нормально написать алфавит?
seruy-t
 Аватар для seruy-t
2 / 2 / 0
Регистрация: 21.08.2010
Сообщений: 216
03.11.2012, 19:40  [ТС]     Нужно сделать функцию расшифровки (алгоритм Цезаря) #3
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'};
Kuzia domovenok
03.11.2012, 19:46
  #4

Не по теме:

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

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

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

Не по теме:

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

kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
03.11.2012, 19:59     Нужно сделать функцию расшифровки (алгоритм Цезаря) #7
Цитата Сообщение от seruy-t Посмотреть сообщение
if(abskey<-26){
abskey=(-1)*(i-key)%26 ;
Логичнее if(abskey<0)
seruy-t
 Аватар для seruy-t
2 / 2 / 0
Регистрация: 21.08.2010
Сообщений: 216
03.11.2012, 20:03  [ТС]     Нужно сделать функцию расшифровки (алгоритм Цезаря) #8
kazak, Возможно, но ничего не изменилось
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
03.11.2012, 21:01     Нужно сделать функцию расшифровки (алгоритм Цезаря) #9
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;
}
seruy-t
 Аватар для seruy-t
2 / 2 / 0
Регистрация: 21.08.2010
Сообщений: 216
04.11.2012, 12:37  [ТС]     Нужно сделать функцию расшифровки (алгоритм Цезаря) #10
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%’|
seruy-t
 Аватар для seruy-t
2 / 2 / 0
Регистрация: 21.08.2010
Сообщений: 216
04.11.2012, 13:08  [ТС]     Нужно сделать функцию расшифровки (алгоритм Цезаря) #11
Сделал так
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.
Миниатюры
Нужно сделать функцию расшифровки (алгоритм Цезаря)  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2012, 15:23     Нужно сделать функцию расшифровки (алгоритм Цезаря)
Еще ссылки по теме:

C++ Ребят выручайте есть перегруженная функция, нужно сделать из нее виртуальную функцию
C++ Нужно сделать что бы давало рандомно числа и нужно написать ответ
Нужно сделать задание по c++! Через 3 часа нужно сдать! C++

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

Или воспользуйтесь поиском по форуму:
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
04.11.2012, 15:23     Нужно сделать функцию расшифровки (алгоритм Цезаря) #12
Цитата Сообщение от seruy-t Посмотреть сообщение
return engl_abet[26 - (-1*(i - key)%26)];
C++
1
return engl_abet[(26 - (-1*(i - key)%26))%26];
Yandex
Объявления
04.11.2012, 15:23     Нужно сделать функцию расшифровки (алгоритм Цезаря)
Ответ Создать тему
Опции темы

Текущее время: 10:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru