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

Шифр Цезаря. Русский алфавит из ASCII

08.02.2023, 10:46. Показов 877. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Написал программный код для шифрования/декодирования слов шифром Цезаря. Не шифруются/дешифруются нормально. Пробовал условия писать (интовые значения, соответствующие порядковым номерам русских букв в ASCII). Не работает. Помогите, намекните, что да как.
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
#include <iostream>
#include <Windows.h>
using namespace std;
 
void Shifr(); // Функция шифрования 
void DeShifr(); // Функция дешифрования 
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int n = 0, k = 0;
    cout << ">>Шифр Цезаря<<\n";
    while (n != 3)
    {
        cout << "\nВыберите необходимый пункт:\n1. Шифрование\n2. Дешифрование\n3. Выход\n>> ";
        cin >> n;
        switch (n)
        {
        case 1:
            Shifr(); // Функция шифрования 
            break;
        case 2:
            DeShifr(); // Функция дешифрования 
            break;
        default:
            cout << "Неверное значение!\n";
        }
    }
}
 
void Shifr() // Функция шифрования 
{
    int  k;
    char V[50], S;
    cout << "\nВведите слово >> ";
    cin >> V;
    cout << "Введите число смещений k >> ";
    cin >> k;
    for (int i = 0; V[i] != 0; i++)
    {
        S = V[i];
        if (S >= 'а' and S <= 'я') // Если буква является прописной
        {
            S += k; // Смещение на k символов вправо
            if (S > 'я') // Если буква справа от я
                S = S - 'я' + 'а' - 1;
            V[i] = S; // Запись нового элемента
        }
        else if (S >= 'А' and S <= 'Я') // Если буква является заглавной
        {
            S += k; // Смещение на k символов вправо
            if (S > 'Я') // Если буква справа от Я
                S = S - 'Я' + 'А' - 1;
            V[i] = S; // Запись нового элемента
        }
    }
    cout << "Зашифрованное сообщение: " << V << endl;
}
 
void DeShifr() // Функция дешифрования 
{
    int k;
    char V[50], S; // Массив символов
    cout << "\nВведите слово >> ";
    cin >> V;
    cout << "Введите число смещений k >> ";
    cin >> k;
    for (int i = 0; V[i] != 0; i++) // Перебор каждого символа в введнном слове
    {
        S = V[i];
        /*if (((int)S = 160 and (int)S = 175) or ((int)S = 224 and (int)S = 239))
        {
            if ((int)S + k  160)
 
                S += k;  
                if (S  'я')  
                    S = S - 'я' + 'а' - 1;
            V[i] = S;  
        }*/
        if (S >= 'а' and S <= 'я') // Если буква является прописной
        {
            S -= k; // Смещение на k символов влево
            if (S < 'а') // Если буква слева от а
                S = S + 'я' - 'а' + 1;
            V[i] = S; // Запись нового элемента
        }
        else if (S >= 'А' and S <= 'Я') // Если буква является заглавной
        {
            S -= k; // Смещение на k символов влево
            if (S < 'А') // Если буква слева от А
                S = S + 'Я' - 'А' + 1;
            V[i] = S; // Запись нового элемента
        }
    }
    cout << "Дешифрованное сообщение: " << V << endl;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.02.2023, 10:46
Ответы с готовыми решениями:

Шифр Цезаря, русский алфавит
#include &lt;iostream&gt; #include &lt;cstring&gt; using namespace std; int main() { setlocale(LC_ALL,&quot;RUS&quot;); char buff =...

Шифр Цезаря. Использовать только русский алфавит
Нужно написать в Windows Form шифр Цезаря. Использовать только русский алфавит, сделать защиту на ввод цифр.

Шифр Цезаря и украинский алфавит
Здравствуйте. Прошу вашей помощи. Делаю лабораторную работу но не получается. Задача такая: разработать программу, которая шифрует...

2
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
08.02.2023, 11:40
Если использовать char для хранения символов, то русские буквы получаются с отрицательным кодом. Проверки, конечно, работают некорректно.

Сделайте unsigned char

Добавлено через 5 минут
Цитата Сообщение от Molodoy_DED Посмотреть сообщение
C++
1
2
3
if (S >= 'а' and S <= 'я') // Если буква является прописной
 {
 S += k; // Смещение на k символов вправо
Тут такая халтура уже не пройдёт.
Даже если будет unsigned char, то 'я' - это 255, максимально возможное значение для unsigned char
Прибавить уже ничего не удастся.
Тут надо аккуратнее всё это обработать.

Можно, конечно, тупо-глупо S объявить как unsigned int и тогда все получится. Но как-то это скучно
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,536
Записей в блоге: 1
08.02.2023, 18:37
Цитата Сообщение от KSergey9 Посмотреть сообщение
Можно, конечно, тупо-глупо S объявить как unsigned int и тогда все получится.
автор дело говорит. int S
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.02.2023, 18:37
Помогаю со студенческими работами здесь

Шифр цезаря. Выход за пределы таблица ASCII
Здравствуйте! В институте было задание: Написать многомодульную программу, которая шифрует слово с помощью шифра цезаря. Использовать...

Как реализовать шифр Цезаря для ASCII?
Я делал программу для русско-английского алфавита вот код Public Class Form1 Const alfavit As String =...

Лозунговый шифр. Для выполнения используем русский алфавит, буквы строчные
Лозунговый шифр. Для выполнения используем русский алфавит, буквы строчные

Шифр с использованием кодового слова. Русский алфавит. 2. Реализовать программное средство, реализующее шифров
Шифр с использованием кодового слова. Русский алфавит. 2. Реализовать программное средство, реализующее шифрование текста по методу...

Шифр Цезаря + Шифр с использованием треугольников и трапеций
Помогите написать программу, которая шифрует данные с помощью шифров перестановки и замены. Использовать Шифр Цезаря + Шифр с...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru