Вопрос задан 15.06.2023 в 07:59. Предмет Информатика. Спрашивает Пульс Олеся.

C++. Шифр Виженера. Шифратор написала, а дешифратор не могу собразить. #include «stdafx.h»

#include «pch.h» #include #include #include #include using namespace std; int _tmain(int argc,_TCHAR* argv[]) { string B, C, D = ""; string A = «abcdefghijklmnopqrstuvwxyz»; setlocale(LC_ALL, «Rus»); cout << «Введите слово: »; cin >>B; cout << «Введите ключ: »; cin >>C; int *F = new int[B.size()]; int *G = new int[B.size()]; int c = C.size(); int b = B.size(); if (b >= c) { for (int i = 0; i < (b / c); i++) { D = D + C; } for (int j = 0; j < (b%c); j++) { D = D + C[j]; } } else { for (int s = 0; s < b; s++) { D = D + B[s]; } } cout << D << endl; for (int k = 0; k < b; k++) { for (int n = 0; n < 26; n++) { if (B[k] == A[n]) { F[k] = n; } if (D[k] == A[n]) { G[k] = n; } } } int e = 0; for (int u = 0; u < b; u++) { e = ((F[u] + G[u]) % 26); B[u] = A[e]; } cout << «Ваше зашифрованное слово: » << B << endl; return 0; }
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Тюлюканов Сергей.

#include <iostream>

#include <string>

using namespace std;

int main()

{

   string B, C, D = "";

   string A = "abcdefghijklmnopqrstuvwxyz";

   setlocale(LC_ALL, "rus");

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

   cin >>B;

   cout << "Введите ключ: ";

   cin >>C;

   int *F = new int[B.size()];

   int *G = new int[B.size()];

   int c = C.size();

   int b = B.size();

   if (b >= c)

   {

   for (int i = 0; i < (b / c); i++)

   {

       D = D + C;

   }

   for (int j = 0; j < (b%c); j++)

   {

       D = D + C[j];

   }

   }

   else

   {

   for (int s = 0; s < b; s++)

   {

       D = D + B[s];

   }

   }

   cout << D << endl;

   for (int k = 0; k < b; k++)

   {

       for (int n = 0; n < 26; n++)

       {

           if (B[k] == A[n])

           {

               F[k] = n;

           }

           if (D[k] == A[n])

           {

               G[k] = n;

           }

       }

   }

   int e = 0;

//    for (int u = 0; u < b; u++)

//    {

//        e = ((F[u] + G[u]) % 26);

//        B[u] = A[e];

//    }

   for (int u = 0; u < b; u++)

   {

       e = ((F[u] - G[u]));

       if (e<0)

           e+=26;

       B[u] = A[e];

   }

   //cout << "Ваше зашифрованное слово: " << B << endl;

   cout << "Ваше расшифрованное слово: " << B << endl;

   return 0;

}

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Программа, которую вы предоставили, реализует шифр Виженера для зашифрования слова с использованием ключа. Однако она не содержит функциональность для дешифрования.

Для реализации дешифратора шифра Виженера, вам необходимо создать новую функцию, которая принимает зашифрованное слово и ключ, и возвращает исходное слово. Эта функция будет выполнять обратные операции, чем функция для шифрования: она будет вычитать значения символов ключа из зашифрованного слова, чтобы получить исходное слово.

Вот пример возможной реализации дешифратора:

```cpp string vigenereDecrypt(string B, string C) { string A = "abcdefghijklmnopqrstuvwxyz"; string D = ""; int b = B.size(); int c = C.size(); int *F = new int[b]; int *G = new int[b];

// ... (похожий код для повторения ключа, как в шифраторе)

// Расшифровка слова int e = 0; for (int u = 0; u < b; u++) { e = ((G[u] - F[u] + 26) % 26); D += A[e]; }

return D; } ```

Эта функция принимает зашифрованное слово `B` и ключ `C`, и возвращает исходное слово `D`. Вы можете вызвать эту функцию в `main` для дешифровки слова, введенного пользователем.

0 0

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос