Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>//деректива для работы стандартных функций
- #include <string>
- #include <cstdio>
- #include <clocale>
- #include <cstring>
- #include <fstream>
- using namespace std;//пространство имен
- int main() {//главная функция
- setlocale(LC_ALL, "Russian");//подключаем русский язык
- //system("chcp 1251"); раскомментируй, это для работы русского алфавита на винде
- cout << "Ввести данные из файла - f , с консоли - k: ";
- char r;
- cin >> r;
- if(r=='k'){
- int n,m;//объявляем две переменные целого типа для размера таблицы
- cout << "Введите размер таблицы: ";//выводим на консоль сообщение
- cin >> n >> m;//вводим с клавиатуры две переменные
- cin.ignore();
- char** arr = new char*[n];//объявляем двумерный динамический массив символьного типа по строкам
- for (int i = 0; i < n; i++){//цикл для работы динамического массива для столбцов
- arr[i] = new char[m];
- }
- int x(-1);//объявляем переменную целочисленного типа со значением -1
- char* word = new char[n * m];//объявляем еще один динамический массив символьного типа
- cout << "Введите фразу: ";//выводим сообщение на консоль
- fgets(word, n*m+1, stdin);
- for (int i = 0; i < n; i++) {//вложенный цикл для записи фразы в двумерный массив
- for (int j = 0; j < m; j++) {
- x++;
- arr[i][j] = word[x];//присваеваем значение двумерного массива word двумерному массиву arr
- cout << arr[i][j] << " ";//выводим на экран
- }
- cout << endl;//переводим на новую строку
- }
- cout << "Шифр: ";//выводим сообщение на экран
- for (int j = 0; j < m; j++) {//вложенный цикл для выводы заштфрованного сообщения, тк не делаем пробелов и переводов на новую строку, то сообщение вывоится в строку как и нужно
- for (int i = 0; i < n; i++) {
- cout << arr[i][j];//выводим зашифрованное сообщение
- }
- }
- delete [] arr;
- char** arr1 = new char*[n];//объявляем двумерный динамический массив символьного типа по строкам
- for (int i = 0; i < n; i++){//цикл для работы динамического массива для столбцов
- arr1[i] = new char[m];
- }
- cout << endl;//перевод на новую строку
- cout << "Введите зашифрованную фразу: ";//вывод сообщения на экран
- char* word1 = new char[n * m];//объявляем символьный динамичемский массив для зашифрованного сообщения
- fflush(stdin);
- fgets(word1, n*m+1, stdin);//вводим зашифрованное сообщение
- int y(-1);//объявляем переменную
- for(int j=0;j<m;j++){//вложенный цикл для преобразования сообщениев таблицу и последующей расшифровки
- for(int i=0;i<n;i++){
- y++;
- arr1[i][j] = word1[y];//присваиваем значение сообщения в массив
- cout << arr1[i][j] << " ";//выводим на экран
- }
- cout << endl;//перевод на новую строку
- }
- for(int i=0;i<n;i++){//вложенный цикл для вывода расшифрованного сообщения на экран
- for(int j=0;j<m;j++){
- cout << arr1[i][j];//вывод на экран
- }
- }
- cout << endl;//перевод на новую строку
- delete [] arr1;//очистка памяти массива
- }else if(r=='f'){
- ifstream fin;
- fin.open("shifr.txt");
- int n,m;
- fin >> n >> m;
- fin.ignore();
- char** arr = new char*[n];//объявляем двумерный динамический массив символьного типа по строкам
- for (int i = 0; i < n; i++){//цикл для работы динамического массива для столбцов
- arr[i] = new char[m];
- }
- int x(-1);//объявляем переменную целочисленного типа со значением -1
- char* word = new char[n * m];//объявляем еще один динамический массив символьного типа
- fgets(word, n*m+1, stdin);
- fin.close();
- ofstream fout;
- fout.open("result.txt");
- for (int i = 0; i < n; i++) {//вложенный цикл для записи фразы в двумерный массив
- for (int j = 0; j < m; j++) {
- x++;
- arr[i][j] = word[x];//присваеваем значение двумерного массива word двумерному массиву arr
- fout << arr[i][j] << " ";//выводим на экран
- }
- fout << endl;//переводим на новую строку
- }
- fout << "Шифр: ";//выводим сообщение на экран
- for (int j = 0; j < m; j++) {//вложенный цикл для выводы заштфрованного сообщения, тк не делаем пробелов и переводов на новую строку, то сообщение вывоится в строку как и нужно
- for (int i = 0; i < n; i++) {
- fout << arr[i][j];//выводим зашифрованное сообщение
- }
- }
- delete [] arr;
- fout.close();
- ifstream fin1;
- fin1.open("deshifr.txt");
- char** arr1 = new char*[n];//объявляем двумерный динамический массив символьного типа по строкам
- for (int i = 0; i < n; i++){//цикл для работы динамического массива для столбцов
- arr1[i] = new char[m];
- }
- char* word1 = new char[n * m];//объявляем символьный динамичемский массив для зашифрованного сообщения
- fflush(stdin);
- fgets(word1, n*m+1, stdin);//вводим зашифрованное сообщение
- fin1.close();
- ofstream fout1;
- fout1.open("result1.txt");
- int y(-1);//объявляем переменную
- for(int j=0;j<m;j++){//вложенный цикл для преобразования сообщениев таблицу и последующей расшифровки
- for(int i=0;i<n;i++){
- y++;
- arr1[i][j] = word1[y];//присваиваем значение сообщения в массив
- fout1 << arr1[i][j] << " ";//выводим на экран
- }
- fout1 << endl;//перевод на новую строку
- }
- for(int i=0;i<n;i++){//вложенный цикл для вывода расшифрованного сообщения на экран
- for(int j=0;j<m;j++){
- fout1 << arr1[i][j];//вывод на экран
- }
- }
- fout1 << endl;//перевод на новую строку
- }
- return 0;//успешное завершение программы
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement