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

Шифрование/дешифрование методом Цезаря - C++

Восстановить пароль Регистрация
 
CyberDron1
0 / 0 / 0
Регистрация: 23.06.2016
Сообщений: 4
23.06.2016, 16:30     Шифрование/дешифрование методом Цезаря #1
посмотрите пжлст код на c++, если что укажите на ошибки и т.п. сильно не разбираюсь
Если не трудно помогите подкорректировать)
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <clocale>
#include <cstdio>
#include <ctime>
#include <string>
 
using namespace std;
 
void shifr()
{
 
    char A[45] = "abcdefghijklmnopqrstuvwyz";// алфавит
    string AL = "abcdefghijklmnopqrstuvwyz";
    char WORD[45] = " ";// описание переменных
    int b = AL.size();
    int l = 0, exit = 2;
    char g;
    int k = 0;
    int ON = 0;
    int i = 0;
    cin >> WORD;
    for (i; i < 100; i++)//цикл с параметром
    {
        l = 0;
        for (l; l < b; l++)
        {
            if (WORD[i] == A[l] && ON == 0 && WORD[i] != 'w' && WORD[i] != 'y' && WORD[i] != 'z')// условие
            {
                WORD[i] = A[l + 3];// формула
                //cout << "[" << i << "] " << WORD << "\n";
                ON = 1;
            }
 
            if (WORD[i] == 'w') // для последних и первых букв до 3 и после 33.
            {
                WORD[i] = 'a';
 
            }
            if (WORD[i] == 'y')
            {
                WORD[i] = 'b';
            }
            if (WORD[i] == 'z')
            {
                WORD[i] = 'c';
            }
 
        }
        ON = 0;
    }
    cout << "\nВаше зашифрованное слово: " << WORD << endl;
}
 
void deshifr()
{
    char A[45] = "abcdefghijklmnopqrstuvwyz"; // алфавит
    string AL = "abcdefghijklmnopqrstuvwyz";
    char WORD[45] = " "; // описание переменных
    int b = AL.size();
    int l = 0, exit = 2;
    char g;
    int k = 0;
    int ON = 0;
    int i = 0;
    i = 0;
    cin >> WORD;
    for (i; i < 100; i++)
    {
        l = 0;
        for (l; l < b; l++)
        {
            if (WORD[i] == A[l] && ON == 0 && WORD[i] != 'a' && WORD[i] != 'b' && WORD[i] != 'c')
            {
                WORD[i] = A[l - 3];
                //cout << "[" << i << "] " << WORD << "\n";
                ON = 1;
            }
 
            if (WORD[i] == 'a')
            {
 
                WORD[i] = 'w';
            }
            if (WORD[i] == 'b')
            {
                WORD[i] = 'y';
            }
            if (WORD[i] == 'c')
            {
                WORD[i] = 'z';
            }
        }
        ON = 0;
    }
    //g = WORD[1];
    //WORD[1] = WORD[0];
    //WORD[0] = g;
    cout << "\nРасшифровка слова:  " << WORD << endl;
 
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    Setlocale(LC_ALL, "Rus");// поддержка русского языка
    int exit = 5;
    while (exit != 3)
    {
        cout << "Если вам нужно зашифровать слово, то напишите 1, если дешифро-вать 2, если выйти из программы, то 3 ";
        cin >> exit;
        if (exit == 1)
        {
            shifr();
        }
        if (exit == 2)
        {
            deshifr();
        }
        if (exit == 3)
        {
            return(1);
        }
    }
    _getch();
    return 0;
} 
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2016, 16:30     Шифрование/дешифрование методом Цезаря
Посмотрите здесь:

Шифрование методом Цезаря C++ Builder
Шифрование методом Цезаря C++
C++ Шифрование/дешифрование методом RSA с открытым ключом. С++
Шифрование/дешифрование файлов методом перестановки C++
C++ Шифрование/дешифрование данных методом решетки
C++ Шифрование / дешифрование методом Цезаря
C++ Шифрование методом Цезаря
Шифрование и дешифрование методом Цезаря C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lawr
 Аватар для lawr
351 / 245 / 120
Регистрация: 09.05.2014
Сообщений: 741
24.06.2016, 15:00     Шифрование/дешифрование методом Цезаря #2
1. есть оператор множественного выбора switch. не нужно в main-е всех этих if-ов. 2. у вас в двух функциях объявлен идентичный набор переменный. удобней один раз объявить их в глобальной области. 3. ненужные переменные. объявлять алфавит не нужно. переменная ON служит непонятного назначения костылем, переменные g и k вообще ничего не делают, только объявляются. 4. опять if-ы в функциях. так можно было просто каждой букве поставить свое соответствие и все сделать if-ами) 5. функции не принимают и не передают аргументов, то есть работают сами на себя. 6. почему при выходе пользователем из программы она у вас возвращает 1? при нормальном завершении программы возвращается 0... подправил что смог вот...
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
56
57
58
#include <iostream>
#include <windows.h>
#include <cstring>
#include <conio.h> 
using namespace std;
 
void shifr(char* WORD, int wordlenght)
{
    for (int i=0; i<wordlenght; i++){
        if ((WORD[i]>='x'&&WORD[i]<='z')||(WORD[i]>='X'&&WORD[i]<='Z'))
            WORD[i]-=26;
        WORD[i]+=3;
    }
    
      cout << "\nзашифрованое слово: " << WORD << endl;
}
 
void deshifr(char* WORD, int wordlenght)
{
    for (int i=0; i<wordlenght; i++){
        if ((WORD[i]>='a'&&WORD[i]<='c')||(WORD[i]>='A'&&WORD[i]<='C'))
            WORD[i]+=26;
        WORD[i]-=3;
    }
    
      cout << "\nрасшифрованое слово: " << WORD << endl;
}
 
int main()
{
    setlocale(LC_ALL, "Rus");// ????????? ???????? ?????
    int wordlenght=45;
    char key;
    char WORD[wordlenght];
    do{
    cout<<"введите слово: ";
    cin>>WORD;
        wordlenght=strlen(WORD);
        cout<<"выберите действие:\nзашифровать- нажмите 's'\nрасшифровать- нажмите 'd'\nвыход- нажмите 'e'\n";
        key=getch();
        switch (key){
            case 's':
                shifr (WORD, wordlenght);
                break;
            case 'd':
                deshifr (WORD, wordlenght);
                break;
            case 'e':
                return 0;   
        }
        cout<<" do you want agane? (y/n): ";
        key=getch();
        if (key='y')
            system ("cls");
    }
    while (key!='n');
    return 0;
}
Yandex
Объявления
24.06.2016, 15:00     Шифрование/дешифрование методом Цезаря
Ответ Создать тему
Опции темы

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