Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
1 / 1 / 1
Регистрация: 29.06.2013
Сообщений: 78
1

Объяснить, что происходит в заданном фрагменте кода (шифр Цезаря)

15.09.2016, 10:18. Показов 659. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <string>
#include <conio.h>
#include <stdlib.h>
#include <sstream>
#include <fstream>
 
using namespace std;
    int main()
    {
        int k; //Переменная выбора - шифрование/дешифрование
        int shift; //Величина сдвига
        string result = ""; //Строка - результат
        cout<<"Enter 1 for encryption and decryption of 2\n";
        cin>>k;
        switch (k) //Если k
        {
        case 1: //Если выбрано шифрование
            {
            cout<<"Enter value shift for encryption\n";
            cin>>shift;
            if (shift > 26)
                shift = shift % 26; //Вычисление сдвига
            cout<<"Read of file...\n";
            setlocale(LC_ALL,"Russian");//Чтение файла
            string s; //Строка считанная из файла
            ifstream in("Test.txt");
            getline(in,s);
            cout<<"Text of file: \n"<<s<<endl;
            in.close();
            cout<<"Reading complete!\n";
            cout<<"Encryption...\n";
            for (int i = 0; i < s.length(); i++)
                {
                    //Если не латиница
                    if (((int)(s[i]) < 65)||((int)(s[i]) > 122))
                        result += s[i];
                    //Если буква является строчной
                    if (((int)(s[i]) >= 97) && ((int)(s[i]) <= 122))
                        {
                            //Если буква, после сдвига выходит за пределы алфавита
                            if ((int)(s[i]) + shift > 122)
                                //Добавление в строку результатов символ
                                result += (char)((int)(s[i]) + shift - 26);
                            //Если буква может быть сдвинута в пределах алфавита
                            else
                                //Добавление в строку результатов символ
                                result += (char)((int)(s[i]) + shift);
                        }
                     //Если буква является прописной
                     if (((int)(s[i]) >= 65) && ((int)(s[i]) <= 90))
                        {
                            //Если буква, после сдвига выходит за пределы алфавита
                            if ((int)(s[i]) + shift > 90)
                                //Добавление в строку результатов символ
                                result += (char)((int)(s[i]) + shift - 26);
                            //Если буква может быть сдвинута в пределах алфавита
                            else
                                //Добавление в строку результатов символ
                                result += (char)((int)(s[i]) + shift);
                        }
                }
            cout<<"Encryption complete!\n";
            cout<<"Result:\n";
            cout<<result; //Вывод результата
            break;
            }
        case 2: //Если выбрано дешифрование
            {
            cout<<"Enter value shift for decryption\n";
            cin>>shift;
            if (shift > 26)
                shift = shift % 26;
            cout<<"Read of file...\n";
            setlocale(LC_ALL,"Russian");
            string s;
            ifstream in("Test.txt");
            getline(in,s);
            cout<<"Text of file: \n"<<s<<endl;
            in.close();
            cout<<"Reading complete!\n";
            cout<<"Decryption...\n";
            for (int i = 0; i < s.length(); i++)
                {
                    //Если не латиница
                    if (((int)(s[i]) < 65)||((int)(s[i]) > 122))
                        result += s[i];
                    //Если буква является строчной
                    if (((int)(s[i]) >= 97) && ((int)(s[i]) <= 122))
                        {
                            //Если буква, после сдвига выходит за пределы алфавита
                            if ((int)(s[i]) - shift < 97)
                                //Добавление в строку результатов символ
                                result += (char)((int)(s[i]) - shift + 26);
                            //Если буква может быть сдвинута в пределах алфавита
                            else
                                //Добавление в строку результатов символ
                                result += (char)((int)(s[i]) - shift);
                        }
                     //Если буква является прописной
                     if (((int)(s[i]) >= 65) && ((int)(s[i]) <= 90))
                        {
                            //Если буква, после сдвига выходит за пределы алфавита
                            if ((int)(s[i]) - shift < 65)
                                //Добавление в строку результатов символ
                                result += (char)((int)(s[i]) - shift + 26);
                            //Если буква может быть сдвинута в пределах алфавита
                            else
                                //Добавление в строку результатов символ
                                result += (char)((int)(s[i]) - shift);
                        }
                }
            cout<<"Decryption complete!\n";
            cout<<"Result:\n";
            cout<<result; //Вывод результата
            break;
            }
        default: //Если ошибочное значение
            {
            cout<<"Error value\n";
            break;
            }
        }
        getch();
        return 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
 for (int i = 0; i < s.length(); i++)
                {
                    //Если не латиница
                    if (((int)(s[i]) < 65)||((int)(s[i]) > 122))
                        result += s[i];
                    //Если буква является строчной
                    if (((int)(s[i]) >= 97) && ((int)(s[i]) <= 122))
                        {
                            //Если буква, после сдвига выходит за пределы алфавита
                            if ((int)(s[i]) + shift > 122)
                                //Добавление в строку результатов символ
                                result += (char)((int)(s[i]) + shift - 26);
                            //Если буква может быть сдвинута в пределах алфавита
                            else
                                //Добавление в строку результатов символ
                                result += (char)((int)(s[i]) + shift);
                        }
                     //Если буква является прописной
                     if (((int)(s[i]) >= 65) && ((int)(s[i]) <= 90))
                        {
                            //Если буква, после сдвига выходит за пределы алфавита
                            if ((int)(s[i]) + shift > 90)
                                //Добавление в строку результатов символ
                                result += (char)((int)(s[i]) + shift - 26);
                            //Если буква может быть сдвинута в пределах алфавита
                            else
                                //Добавление в строку результатов символ
                                result += (char)((int)(s[i]) + shift);
                        }
                }
Не совсем понимаю, что означают условия, хотелось бы пояснения по поводу них, и откуда берутся "цифры": 26, 122, 97 и т.п.?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.09.2016, 10:18
Ответы с готовыми решениями:

Объяснить, что происходит в заданном фрагменте кода
В подпрограмме Всё предельно ясно кроме одной строки - P.year=y-'0'; Объясните недалёкому что...

Объяснить, что происходит в заданном фрагменте кода
ifstream f(&quot;Базаданных.bd&quot;, ios::binary); f.read((char*)&amp;P,sizeof(P)); do { ...

Списки: объяснить, что происходит в заданном фрагменте кода
Помогите разобраться в коде, вот код с# public class Node { public string Data {...

Очередь на основе массива: объяснить что происходит в заданном фрагменте кода
всем привет. начал разбираться с очередью на с++ и наткнулся на пример. вот фрагмент кода void...

4
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
15.09.2016, 10:23 2
Цитата Сообщение от AnatDenis Посмотреть сообщение
откуда берутся "цифры": 26, 122, 97
ASCII
0
Падаван С++
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
15.09.2016, 10:24 3
AnatDenis, ascii коды погуглите, чисто к примеру 97 это код английской буквы а 122 соответсвенно z другое по аналогии, в гугле куча картинок с ascii кодами тык
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
15.09.2016, 12:44 4
+ Посмотрите пример здесь: Шифрование методом Цезаря
0
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
15.09.2016, 13:41 5
Цитата Сообщение от AnatDenis Посмотреть сообщение
откуда берутся "цифры": 26, 122, 97 и т.п.?
Это же магические числа, берутся из головы волшебника, писавшего код, для обфускации и прочей непонятности
0
15.09.2016, 13:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.09.2016, 13:41
Помогаю со студенческими работами здесь

Нюансы работы с указателями: объяснить, что происходит в заданном фрагменте кода
Всем доброго времени суток! Я не до конца разобрался в данной теме. К примеру, есть такой кусок...

Объяснить, что происходит в данном фрагменте кода (матрицы)
Вообщем столкнулся с первой проблемой в изучении данного языка (с++). Мой мозг просто отказывается...

Объяснить что происходит в данном фрагменте кода (вложенные циклы и массивы)
Объясните пожалуйста данный моментfor (int i = 1; i &lt;= a; i++) { if (m == 0) { c = i;...

Нюансы синтаксиса: объяснить как работает тернарная операция в заданном фрагменте кода
Всем доброго времени суток! Помогите разобраться с кодом. const char x = {&quot;Jason &quot;, &quot;at your...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru