На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> Шифр Виженера: переписать код
    Шифр Виженера: переписать код так, чтобы программа не только зашифровала, но и расшифровала текст ...Текст он зашифрует но не расшифрует. А как сделать чтобы он зашифровал и расшифровал текст???

    ExpandedWrap disabled
      #include "stdafx.h"
      #include <ctime>
      #include <string>
      #include <iostream>
       
      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;
       
          system("pause");
       
          return 0;
      }
    Сообщение отредактировано: JoeUser -
      Ну, согласно вики:
      Если буквы A—Z соответствуют числам 0—25, то шифрование Виженера можно записать в виде формулы:
      C[u] = (F[u] + G[u]) % 26
      Расшифровка:
      F[u] = (C[u] - G[u] + 26) % 26
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0193 ]   [ 16 queries used ]   [ Generated: 19.04.24, 21:56 GMT ]