Advertisement
Guest User

123

a guest
Dec 16th, 2019
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.12 KB | None | 0 0
  1. #include <iostream>//деректива для работы стандартных функций
  2. #include <string>
  3. #include <cstdio>
  4. #include <clocale>
  5. #include <cstring>
  6. #include <fstream>
  7. using namespace std;//пространство имен
  8. int main() {//главная функция
  9.   setlocale(LC_ALL, "Russian");//подключаем русский язык
  10.   //system("chcp 1251"); раскомментируй, это для работы русского алфавита на винде
  11.     cout << "Ввести данные из файла - f , с консоли - k: ";
  12.     char r;
  13.     cin >> r;
  14.     if(r=='k'){
  15.     int n,m;//объявляем две переменные целого типа для размера таблицы
  16.     cout << "Введите размер таблицы: ";//выводим на консоль сообщение
  17.     cin >> n >> m;//вводим с клавиатуры две переменные
  18.     cin.ignore();
  19.   char** arr = new char*[n];//объявляем двумерный динамический массив символьного типа по строкам
  20.     for (int i = 0; i < n; i++){//цикл для работы динамического массива для столбцов
  21.     arr[i] = new char[m];
  22.     }
  23.   int x(-1);//объявляем переменную целочисленного типа со значением -1
  24.  char* word = new char[n * m];//объявляем еще один динамический массив символьного типа
  25.   cout << "Введите фразу: ";//выводим сообщение на консоль
  26.     fgets(word, n*m+1, stdin);
  27.   for (int i = 0; i < n; i++) {//вложенный цикл для записи фразы в двумерный массив
  28.     for (int j = 0; j < m; j++) {
  29.       x++;
  30.       arr[i][j] = word[x];//присваеваем значение двумерного массива word двумерному массиву arr
  31.       cout << arr[i][j] << " ";//выводим на экран
  32.     }
  33.     cout << endl;//переводим на новую строку
  34.   }
  35.   cout << "Шифр: ";//выводим сообщение на экран
  36.   for (int j = 0; j < m; j++) {//вложенный цикл для выводы заштфрованного сообщения, тк не делаем пробелов и переводов на новую строку, то сообщение вывоится в строку как и нужно
  37.     for (int i = 0; i < n; i++) {
  38.       cout << arr[i][j];//выводим зашифрованное сообщение
  39.     }
  40.   }
  41.     delete [] arr;
  42.     char** arr1 = new char*[n];//объявляем двумерный динамический массив символьного типа по строкам
  43.     for (int i = 0; i < n; i++){//цикл для работы динамического массива для столбцов
  44.         arr1[i] = new char[m];
  45.     }
  46.     cout << endl;//перевод на новую строку
  47.     cout << "Введите зашифрованную фразу: ";//вывод сообщения на экран
  48.     char* word1 = new char[n * m];//объявляем символьный динамичемский массив для зашифрованного сообщения
  49.     fflush(stdin);
  50.     fgets(word1, n*m+1, stdin);//вводим зашифрованное сообщение
  51.     int y(-1);//объявляем переменную
  52.     for(int j=0;j<m;j++){//вложенный цикл для преобразования сообщениев таблицу и последующей расшифровки
  53.         for(int i=0;i<n;i++){
  54.             y++;
  55.             arr1[i][j] = word1[y];//присваиваем значение сообщения в массив
  56.             cout << arr1[i][j] << " ";//выводим на экран
  57.         }
  58.         cout << endl;//перевод на новую строку
  59.     }
  60.     for(int i=0;i<n;i++){//вложенный цикл для вывода расшифрованного сообщения на экран
  61.         for(int j=0;j<m;j++){
  62.             cout << arr1[i][j];//вывод на экран
  63.         }
  64.     }
  65.     cout << endl;//перевод на новую строку
  66.     delete [] arr1;//очистка памяти массива
  67.     }else if(r=='f'){
  68.         ifstream fin;
  69.         fin.open("shifr.txt");
  70.         int n,m;
  71.         fin >> n >> m;
  72.         fin.ignore();
  73.         char** arr = new char*[n];//объявляем двумерный динамический массив символьного типа по строкам
  74.            for (int i = 0; i < n; i++){//цикл для работы динамического массива для столбцов
  75.            arr[i] = new char[m];
  76.            }
  77.          int x(-1);//объявляем переменную целочисленного типа со значением -1
  78.         char* word = new char[n * m];//объявляем еще один динамический массив символьного типа
  79.            fgets(word, n*m+1, stdin);
  80.         fin.close();
  81.         ofstream fout;
  82.         fout.open("result.txt");
  83.          for (int i = 0; i < n; i++) {//вложенный цикл для записи фразы в двумерный массив
  84.            for (int j = 0; j < m; j++) {
  85.              x++;
  86.              arr[i][j] = word[x];//присваеваем значение двумерного массива word двумерному массиву arr
  87.              fout << arr[i][j] << " ";//выводим на экран
  88.            }
  89.            fout << endl;//переводим на новую строку
  90.          }
  91.          fout << "Шифр: ";//выводим сообщение на экран
  92.          for (int j = 0; j < m; j++) {//вложенный цикл для выводы заштфрованного сообщения, тк не делаем пробелов и переводов на новую строку, то сообщение вывоится в строку как и нужно
  93.            for (int i = 0; i < n; i++) {
  94.              fout << arr[i][j];//выводим зашифрованное сообщение
  95.            }
  96.          }
  97.            delete [] arr;
  98.         fout.close();
  99.         ifstream fin1;
  100.         fin1.open("deshifr.txt");
  101.            char** arr1 = new char*[n];//объявляем двумерный динамический массив символьного типа по строкам
  102.            for (int i = 0; i < n; i++){//цикл для работы динамического массива для столбцов
  103.                arr1[i] = new char[m];
  104.            }
  105.            char* word1 = new char[n * m];//объявляем символьный динамичемский массив для зашифрованного сообщения
  106.            fflush(stdin);
  107.            fgets(word1, n*m+1, stdin);//вводим зашифрованное сообщение
  108.         fin1.close();
  109.         ofstream fout1;
  110.         fout1.open("result1.txt");
  111.            int y(-1);//объявляем переменную
  112.            for(int j=0;j<m;j++){//вложенный цикл для преобразования сообщениев таблицу и последующей расшифровки
  113.                for(int i=0;i<n;i++){
  114.                    y++;
  115.                    arr1[i][j] = word1[y];//присваиваем значение сообщения в массив
  116.                    fout1 << arr1[i][j] << " ";//выводим на экран
  117.                }
  118.                fout1 << endl;//перевод на новую строку
  119.            }
  120.            for(int i=0;i<n;i++){//вложенный цикл для вывода расшифрованного сообщения на экран
  121.                for(int j=0;j<m;j++){
  122.                    fout1 << arr1[i][j];//вывод на экран
  123.                }
  124.            }
  125.            fout1 << endl;//перевод на новую строку
  126.     }
  127.     return 0;//успешное завершение программы
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement