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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
roman ua
1 / 1 / 0
Регистрация: 06.03.2009
Сообщений: 25
#1

Шифрирование/дешифрирование сообщения (шыфр Цезаря) - C++

14.02.2011, 01:47. Просмотров 950. Ответов 1
Метки нет (Все метки)

Само задание: Нужно написать прогу на С(С++) которая реализует шифрирование/дешифрирование исходного сообщения при помощи шифра Цезаря с учетом того, что сообщения, которое необходимо зашифровать, написано на украинском языке. У меня есть рабочий код но мне надо чтоб можна было зашифрировать еще и пробелы а также большые литеры алфавита и сделать чтоб алгоритм был универсальным, тоесть для любого ключа! У меня например ключ 17( тоесть зсув на 17 символов) .
Вот рабочий код:
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <stdio.h>
#include <cstdlib>
using namespace std;
int main()
{
    system ("chcp 1251");
    int Value=-1;
    char code[]=  {'а','б','в','г','ґ','д','е','є','ж','з','и','і','ї','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ь','ю','я','\0'};
    char decod[]={'н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ь','ю','я','а','б','в','г','ґ','д','е','є','ж','з','и','і','ї','й','к','л','м','\0'};
    char str[100],fin[100];
    
begin:      
        cout<<"Введіть '1' - кодування з ключем 17 "<<endl<<"Введіть '2' - декодування з ключем 17"<<endl<<"Введіть '0' вихід із програми"<<endl;
        cin>>Value;
        if(Value == 1)
            goto label1;
        if(Value == 2)
            goto label2;
        if(Value == 0)
            goto exit;
label1:
        
            cout<<"Введіть рядок для кодування"<<endl;
            cin>>str;
            int len=strlen(str);
 
            for(int i= 0;i<len;i++)
                for(int j= 0;j<33;j++)
                    if(str[i]==code[j])
                        fin[i]=decod[j];
 
            for(int i= 0;i<len;i++)
                cout<<fin[i];
            cout<<endl;
            goto begin;
        
label2:        
            cout<<"Введіть рядок, який необхідно розкодувати"<<endl;
            cin>>str;
            len=strlen(str);
 
            for(int i= 0;i<len;i++)
                for(int j= 0;j<33;j++)
                    if(str[i]== decod[j])
                        fin[i]=code[j];
 
            for(int i=0 ;i<len;i++)
                cout<<fin[i];
            cout<<endl;
            goto begin;
            
exit:
return 0;        
  }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2011, 01:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шифрирование/дешифрирование сообщения (шыфр Цезаря) (C++):

шифрирование. - C++
Не могу сделать так чтобы при запуске программы сначало стоял выбор зашифровать текст или расшифровать. Помогите, курсовую сдать надо. ...

Пронумеровать очерёдность каждого сообщения так, чтобы нумерация очерёдности печаталась напротив сообщения - C++
Покажите мне пожалуйста как можно пронумеровать очерёдность каждого сообщения так чтоб нумерация очерёдности печаталась напротив сообщения....

Шифрование Цезаря - C++
Подскажите ребят, есть текст уже в текстовике, его нужно зашифровать. #include &lt;iostream&gt; using namespace std; int main() { ...

Код цезаря - C++
Первое, что я написал самостоятельно. Что здесь можно улучшить? #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int...

Код Цезаря на C++ - C++
написать на с++ программу для Кода Цезаря, сдвиг на 3 буквы, чтобы в консоле конвертировал на 3 буквы, желательно русским алфавитом,...

Шифр Цезаря - C++
Ребята , помогите решить задачку, битый час сижу, не могу понять . Надо чтобы введенная буква алфавита сдвигалась на 3 буквы вперед...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
14.02.2011, 09:33 #2
С BASIC перешел???
C++
1
2
  if(Value == 1)
                        goto label1;
делай так
C++
1
2
3
4
 if(Value == 1)
                       fnk(1);
   if(Value == 2)
                        fnk(2);
а еше лучше так
C++
1
2
3
4
5
6
7
8
9
  switch(Value)
{
     case 1:
            fnk1();
            break;
     case 2:
            fnk2();
            break;
}
по сушеству вопроса:
Все буквы представляются и компе числами с типом переменной unsigned char размером в 1 байт

поэтому просто прибавь/ вычти свое число
например так
C++
1
2
3
4
5
6
7
8
unsigned char MyCode(unsigned char let,unsigned char key)
   {
      return let+key;
   }
unsigned char MyDeCode(unsigned char let,unsigned char key)
   {
      return let-key;
   }
С уважением Валерий
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2011, 09:33
Привет! Вот еще темы с ответами:

Шифр Цезаря - C++
Объясните пожалуйста есть формула для шифра Цезаря :En(x) = (x +n)mod26 почему в коде надо еще отнять 65, а потом прибавить. 65- это код...

Шифр Цезаря - C++
есть код программы для взлома Шыффра Цэзара но никак немогу доделать ее чтобы взломать строку VTA.P,JR;STJQATPZX,VJX,JF;A...

Шифр Цезаря - C++
Вот есть готовый код программы, может, кому понадобиться:) #include&lt;iostream&gt; #include&lt;conio.h&gt; #include&lt;math.h&gt; using namespace...

Шифр цезаря - C++
Столкнулся с такой проблемой нужно &quot;Разработать прикладное приложение для шифрования текста с помощью шифра простой замены. Приложение...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru