Advertisement
MadCortez

Untitled

Apr 7th, 2021
372
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.33 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4.  
  5. using namespace std;
  6.  
  7. int inputValue(int min, int max);
  8. int userInputFromConsole();
  9. int userInputFromFile(string path);
  10. bool checkPath(string path);
  11. string userInputPath();
  12. int inputMethod();
  13. void printInConsole(int** matrix);
  14. string userOutputPath();
  15. void printInFile(int** matrix, string path);
  16. int outputMethod();
  17. void start();
  18. void printTask();
  19.  
  20. int inputValue(int min, int max) {
  21.     int currentValue;
  22.     bool isNotValid = true;
  23.     do {
  24.         cin >> currentValue;
  25.         if (currentValue >= min && currentValue <= max && currentValue % 4 == 0)
  26.             isNotValid = false;
  27.         else
  28.             cout << "Введите число в заданном диапазоне кратное 4\n";
  29.     } while (isNotValid);
  30.     return currentValue;
  31. }
  32.  
  33. int userInputFromConsole() {
  34.     const int MIN_SIZE = 2;
  35.     const int MAX_SIZE = 32;
  36.     int n;
  37.     cout << "Введите размер квадрата в диапазоне " << MIN_SIZE << ".." << MAX_SIZE << " кратное 4: ";
  38.     n = inputValue(MIN_SIZE, MAX_SIZE);
  39.     return n;
  40. }
  41.  
  42. int userInputFromFile(string path) {
  43.     int n;
  44.     ifstream file(path);
  45.     file.open(path);
  46.     file.clear();
  47.     file >> n;
  48.     file.close();
  49.     return n;
  50. }
  51.  
  52. bool checkPath(string path) {
  53.     ifstream file(path);
  54.     if (file.is_open()) {
  55.         cout << path << " найден" << endl;
  56.         return true;
  57.     }
  58.     else {
  59.         cout << path << " не найден" << endl;
  60.         return false;
  61.     }
  62. }
  63.  
  64. string userInputPath() {
  65.     string path;
  66.     bool isNotValid = false;
  67.     do {
  68.         cout << "Введите абсолютный путь к файлу с входными данными" << endl;
  69.         cin >> path;
  70.     } while (!checkPath(path));
  71.     return path;
  72. }
  73.  
  74. int inputMethod() {
  75.     int method;
  76.     cout << "Каким способом хотите ввести данные?" << endl;
  77.     cout << "1 - с помощью консоли" << endl;
  78.     cout << "2 - с помощью файла" << endl;
  79.     do {
  80.         cin >> method;
  81.         if (method != 1 && method != 2)
  82.             cout << "Введите 1 или 2" << endl;
  83.     } while (method != 2 && method != 1);
  84.     return method;
  85. }
  86.  
  87. void printInConsole(int** matrix) {
  88.     for (int i = 0; i < _msize(matrix) / sizeof(matrix); i++) {
  89.         for (int j = 0; j < _msize(matrix[0]) / sizeof(matrix[0]); j++)
  90.             cout << matrix[i][j] << " ";
  91.         cout << endl;
  92.     }
  93. }
  94.  
  95. string userOutputPath() {
  96.     string path;
  97.     cout << "Введите абсолютный путь к файлу для вывода результата" << endl;
  98.     cin >> path;
  99.     cout << "Результат работа помещён в файл";
  100.     return path;
  101. }
  102.  
  103. void printInFile(int** matrix, string path) {
  104.     ofstream file(path);
  105.     file << "Размер магического квадрата: " << _msize(matrix[0]) / sizeof(matrix[0]) << endl;
  106.     for (int i = 0; i < _msize(matrix) / sizeof(matrix); i++) {
  107.         for (int j = 0; j < _msize(matrix[0]) / sizeof(matrix[0]); j++)
  108.             file << matrix[i][j] << " ";
  109.         file << endl;
  110.     }
  111. }
  112.  
  113. int outputMethod() {
  114.     int method;
  115.     cout << "Куда хотите вывести результат?" << endl;
  116.     cout << "1 - в консоль" << endl;
  117.     cout << "2 - в файл" << endl;
  118.     do {
  119.         cin >> method;
  120.         if (method != 1 && method != 2)
  121.             cout << "Введите 1 или 2" << endl;
  122.     } while (method != 2 && method != 1);
  123.     return method;
  124. }
  125.  
  126. int userInput() {
  127.     int n;
  128.     short method = inputMethod();
  129.     if (method == 1) {
  130.         n = userInputFromConsole();
  131.     }
  132.     else {
  133.         string path = userInputPath();
  134.         n = userInputFromFile(path);
  135.     }
  136.     return n;
  137. }
  138.  
  139. void printResult(int** matrix) {
  140.     short method = outputMethod();
  141.     if (method == 1)
  142.         printInConsole(matrix);
  143.     else {
  144.         string path = userOutputPath();
  145.         printInFile(matrix, path);
  146.     }
  147. }
  148.  
  149. int** fillMatrix(int n) {
  150.     int count = 0;
  151.     int** matrix = new int* [n];
  152.     for (int i = 0; i < n; i++) {
  153.         matrix[i] = new int[n];
  154.         for (int j = 0; j < n; j++) {
  155.             matrix[i][j] = ++count;
  156.         }
  157.     }
  158.     return matrix;
  159. }
  160.  
  161. int** fillTempMatrix(int n) {
  162.     int count = pow(n, 2);
  163.     int** matrix = new int* [n];
  164.     for (int i = 0; i < n; i++) {
  165.         matrix[i] = new int[n];
  166.         for (int j = 0; j < n; j++) {
  167.             matrix[i][j] = count--;
  168.         }
  169.     }
  170.     return matrix;
  171. }
  172.  
  173. void printTask() {
  174.     cout << "Данная программа генерирует магический квадрат\n(Размер кратен 4) " << endl;
  175. }
  176.  
  177. void start() {
  178.     printTask();
  179.     int n  = userInput();
  180.     int** matrix = fillMatrix(n);
  181.     int** tempMatrix = fillTempMatrix(n);
  182.     for (int i = 0; i < n; i++)
  183.         for (int j = 0; j < n; j++) {
  184.             int a = (i + 1) % 4;
  185.             int b = (j + 1) % 4;
  186.             if (!(((a == 1) && (b == 0)) || ((a == 0) && (b == 1)) or ((a == 2) && (b == 3))
  187.             || ((a == 3) && (b == 2)) || (a == b)))
  188.                 matrix[i][j] = tempMatrix[i][j];
  189.         }
  190.     printResult(matrix);
  191. }
  192.  
  193. int main()
  194. {
  195.     setlocale(LC_ALL, "Russian");
  196.     start();
  197. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement