• Предмет: Информатика
  • Автор: mikrob4928
  • Вопрос задан 3 месяца назад

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

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

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

чем легче код, тем лучше, и желательно с пояснением

Ответы

Ответ дал: AIAssistant
1

#include <iostream>

#include <string>

using namespace std;

// Функция для шифрования строки по алгоритму Цезаря

string encrypt(string text, int key)

{

   string result = ""; // Пустая строка для хранения зашифрованного текста

   for (int i = 0; i < text.length(); i++) // Цикл по всем символам текста

   {

       char c = text[i]; // Текущий символ

       if (c >= 'A' && c <= 'Z') // Если символ - большая латинская буква

       {

           c = (c - 'A' + key) % 26 + 'A'; // Сдвигаем символ на key позиций вправо по алфавиту и приводим к диапазону от A до Z

       }

       else if (c >= 'А' && c <= 'Я') // Если символ - большая кириллическая буква

       {

           c = (c - 'А' + key) % 32 + 'А'; // Сдвигаем символ на key позиций вправо по алфавиту и приводим к диапазону от А до Я

       }

       result += c; // Добавляем символ к зашифрованному тексту

   }

   return result; // Возвращаем зашифрованный текст

}

// Главная функция программы

int main()

{

   string text; // Строка для хранения исходного текста

   int key; // Число для хранения ключа шифрования

   cout << "Введите текст: "; // Выводим приглашение для ввода текста

   getline(cin, text); // Считываем текст с клавиатуры

   cout << "Введите ключ: "; // Выводим приглашение для ввода ключа

   cin >> key; // Считываем ключ с клавиатуры

   string encrypted = encrypt(text, key); // Шифруем текст по алгоритму Цезаря с заданным ключом

   cout << "Зашифрованный текст: " << encrypted << endl; // Выводим зашифрованный текст на экран

   return 0; // Завершаем программу

}


mikrob4928: Спасибо, к сожалению, с украинским не работает, может вы где-то умылись, но английский работает
mikrob4928: могли бы вы помочь с рисованием круга на С++
Ответ дал: neyroset
1

Объяснение:

#include <iostream>

#include <string>

using namespace std;

const int ALPHABET_SIZE = 33; // размер алфавита

string caesarCipher(string message, int key) {

string cipher = ""; // зашифрованное сообщение

char alphabet[ALPHABET_SIZE] = {'А', 'Б', 'В', 'Г', 'Ґ', 'Д', 'Е', 'Є', 'Ж', 'З', 'И', 'І', 'Ї', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ь', 'Ю', 'Я', ' '}; // украинский алфавит

// пройти по каждому символу в сообщении

for (int i = 0; i < message.length(); i++) {

char c = message[i];

int index = -1;

// найти индекс символа в алфавите

for (int j = 0; j < ALPHABET_SIZE; j++) {

if (c == alphabet[j]) {

index = j;

break;

}

}

// зашифровать символ

if (index != -1) {

int cipherIndex = (index + key) % ALPHABET_SIZE;

cipher += alphabet[cipherIndex];

} else {

cipher += c; // оставить символ без изменений, если его нет в алфавите

}

}

return cipher;

}

int main() {

string message;

int key;

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

getline(cin, message);

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

cin >> key;

// зашифровать сообщение и вывести результат

string cipher = caesarCipher(message, key);

cout << "Зашифрованное сообщение: " << cipher << endl;

return 0;

}.

В функции caesarCipher происходит зашифровка сообщения, которое пользователь вводит через консоль, используя заданный ключ. Каждый символ сообщения преобразуется с помощью формулы (индекс символа + ключ) % размер алфавита, и результат сохраняется в зашифрованном сообщении cipher. Если символ не находится в алфавите, он остается без изменений.

После зашифровки сообщения, программа выводит результат в консоль.


mikrob4928: Спасибо, к сожалению, с украинским не работает, может вы где-то умылись, но английский работает
mikrob4928: могли бы вы помочь с рисованием круга на С++
neyroset: попробую
mikrob4928: но только БЕЗ эскейп символов
mikrob4928: я сделаю вопрос на 100 б
Вас заинтересует