Предмет: Информатика, автор: mikrob4928

С++
Написать код программы для реализации алгоритма шифрования "Шифр Цезаря"

Шифр Цезаря — это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется символом, находящимся на некотором постоянном числе позиций левее или правее него в алфавите.

Обязательное условие – украинский алфавит
Чтобы было меньше проблем, используйте большие буквы.

Ответы

Автор ответа: cevase
1

Ответ:

Вот пример кода программы на C++, реализующей шифр Цезаря для украинского алфавита:

#include <iostream>

#include <string>

using namespace std;

string encrypt(string plaintext, int shift) {

string ciphertext = "";

int n = plaintext.length();

for (int i = 0; i < n; i++) {

char c = plaintext[i];

if (c >= 'А' && c <= 'Я') {

c = ((c - 'А' + shift) % 33) + 'А';

}

ciphertext += c;

}

return ciphertext;

}

string decrypt(string ciphertext, int shift) {

string plaintext = "";

int n = ciphertext.length();

for (int i = 0; i < n; i++) {

char c = ciphertext[i];

if (c >= 'А' && c <= 'Я') {

c = ((c - 'А' - shift + 33) % 33) + 'А';

}

plaintext += c;

}

return plaintext;

}

int main() {

string plaintext, ciphertext;

int shift;

cout << "Введите текст для шифрования: ";

getline(cin, plaintext);

cout << "Введите сдвиг: ";

cin >> shift;

ciphertext = encrypt(plaintext, shift);

cout << "Зашифрованный текст: " << ciphertext << endl;

plaintext = decrypt(ciphertext, shift);

cout << "Расшифрованный текст: " << plaintext << endl;

return 0;

}

Функция encrypt() принимает на вход открытый текст и сдвиг (целое число), а возвращает зашифрованный текст. Она проходится по каждому символу в открытом тексте и заменяет его символом, находящимся на shift позиций левее (если shift отрицательный) или правее (если shift положительный) в украинском алфавите.

Функция decrypt() принимает на вход зашифрованный текст и тот же сдвиг, что использовался при шифровании, а возвращает расшифрованный текст. Она проходится по каждому символу в зашифрованном тексте и заменяет его символом, находящимся на -shift позиций левее (если shift был положительный) или на shift позиций правее (если shift был отрицательный) в украинском алфавите.

В main() пользователю предлагается ввести открытый текст и сдвиг, после чего программа выводит зашифрованный и расшифрованный текст.


mikrob4928: Вау, спасибо вам
mikrob4928: Подскажите пожалуйста, что нужно вводить в консоль при выводе такой информации: Введите сдвиг:
cevase: При выводе информации "Введите сдвиг:", в консоль нужно ввести целое число, которое будет задавать на сколько позиций символы будут сдвигаться в алфавите при шифровании или расшифровании. Например, если ввести число 3, то при шифровании каждый символ в открытом тексте будет заменяться символом, находящимся на три позиции правее в алфавите, а при расшифровании символы будут заменяться на три позиции левее в алфавите. Если ввести отрицательное число, то символы будут сдвигаться влево в алфавите.
mikrob4928: Да, я и вводи цифру. Например, в поле "Введите текст для шифрования:" я ввожу слово "телефон", а в поле "Зашифрованный текст:" также выводится слово "телефон"
mikrob4928: может вы где-то ошиблись
cevase: создайте новый вопрос, я немного изменил должно заработать
cevase: напишите тут когда создадите
mikrob4928: хорошо сейчас сделаю, но можете еще подключить украинский язык, потому что выводятся непонятные символы
mikrob4928: https://znanija.com/task/52098385
Похожие вопросы
Предмет: История, автор: c7018132
Предмет: Алгебра, автор: bogdanmacarchuk46