Advertisement
THOMAS_SHELBY_18

Lab2_3(C++)

Oct 23rd, 2023 (edited)
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.38 KB | Source Code | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <iomanip>
  5. #include <windows.h>
  6.  
  7. using namespace std;
  8.  
  9. int getNum(int min, int max) {
  10.  
  11.     bool isNotCorrect;
  12.     int num;
  13.  
  14.     do {
  15.         isNotCorrect = true;
  16.         cin >> num;
  17.         if (cin.fail() || (cin.get() != '\n')) {
  18.             cout << "Некорректный ввод! Введите значение еще раз:" << endl;
  19.             cin.clear();
  20.             while (cin.get() != '\n');
  21.         }
  22.         else {
  23.             if (num < min || num > max) {
  24.                 cout << "Недопустимое значение! Введите значение еще раз:" << endl;
  25.             }
  26.             else {
  27.                 isNotCorrect = false;
  28.             }
  29.         }
  30.     } while (isNotCorrect);
  31.  
  32.     return num;
  33. }
  34.  
  35. bool checkFileData(const string& path, int& n)
  36. {
  37.     const int MIN_N = 1, MAX_N = 10;
  38.  
  39.     ifstream inputFile;
  40.     bool isIncorrect;
  41.  
  42.     isIncorrect = false;
  43.  
  44.     inputFile.open(path);
  45.     inputFile >> n;
  46.  
  47.     if (inputFile.fail()) {
  48.         inputFile.clear();
  49.         isIncorrect = true;
  50.         cout << "Файл не найден или данные некоректны.\nВнесите изменения в файл и повторите попытку." << endl;
  51.     }
  52.  
  53.     else if (!inputFile.eof()) {
  54.         cout << "Данные в файле представлены в неправильном формате!\nВнесите изменения в файл и повторите попытку." << endl;
  55.         isIncorrect = true;
  56.         inputFile.clear();
  57.     }
  58.  
  59.     else if ((MIN_N > n) || (MAX_N < n)) {
  60.         isIncorrect = true;
  61.         cout << "Значение выходит за возможные пределы!\nВнесите изменения в файл и повторите попытку." << endl;
  62.     }
  63.  
  64.     inputFile.close();
  65.     return isIncorrect;
  66. }
  67.  
  68. int inputN() {
  69.     const int MIN_N = 1, MAX_N = 10;
  70.     int choice, n;
  71.     bool isFileIncorrect;
  72.     string pathFile;
  73.  
  74.     cout << "Выберите вариант ввода:" << endl << "1. Ввод из консоли" << endl << "2. Ввод из файла" << endl << "Использовать вариант:";
  75.     choice = getNum(1, 2);
  76.  
  77.     if (choice == 1) {
  78.         cout << "Введите порядок матрицы от " << MIN_N << " до " << MAX_N << ":";
  79.         n = getNum(MIN_N, MAX_N);
  80.     }
  81.     else {
  82.         cout << "Данные в файле должны содержать натуральное число - порядок матрицы N от " << MIN_N << " до " << MAX_N << endl;
  83.         do {
  84.             cout << "Введите путь к файлу с его раширением:";
  85.             cin >> pathFile;
  86.             isFileIncorrect = checkFileData(pathFile, n);
  87.         } while(isFileIncorrect);
  88.     }
  89.     return n;
  90. }
  91.  
  92. void fillMatrix(int** matrix, int n) {
  93.  
  94.     int i, j, counter;
  95.  
  96.     i = 0;
  97.     counter = 1;
  98.  
  99.     do {
  100.         if (i % 2 == 0) {
  101.             for (j = 0; j < n; j++){
  102.                 matrix[i][j] = counter;
  103.                 counter++;
  104.             }
  105.         }
  106.         else {
  107.             for (j = n - 1; j > -1; j--) {
  108.                 matrix[i][j] = counter;
  109.                 counter++;
  110.             }
  111.         }
  112.         i++;
  113.     } while (i < n);
  114. }
  115.  
  116.  
  117. void outputMatrix(int** matrix, int  n) {
  118.     int i, j, choice;
  119.     ofstream outputFile;
  120.     string path;
  121.     bool isFileIncorrect;
  122.  
  123.     cout << "Выберите вариант вывода:" << endl << "1. Вывод в консоль" << endl << "2. Вывод в файл" << endl << "Использовать вариант:";
  124.     choice = getNum(1, 2);
  125.  
  126.     if (choice == 1) {
  127.         for (i = 0; i < n; i++) {
  128.             for (j = 0; j < n; j++) {
  129.                 cout << setw(4) << matrix[i][j];
  130.             }
  131.             cout << endl;
  132.         }
  133.     }
  134.     else {
  135.         cout << "Для вывода введите путь к файлу и его имя c расширением." << endl;
  136.         cout << "Если файл отсутствует то он будет создан автоматически по указанному пути или в корневой папке программы (по умолчанию)" << endl;
  137.         do {
  138.             cout << "Введите путь:";
  139.             cin >> path;
  140.             outputFile.open(path);
  141.             isFileIncorrect = false;
  142.  
  143.             for (i = 0; i < n; i++) {
  144.                 for (j = 0; j < n; j++) {
  145.                     outputFile << setw(4) << matrix[i][j];
  146.                 }
  147.                 outputFile << endl;
  148.             }
  149.  
  150.             if (outputFile.fail()) {
  151.                 cout << "Не удалось вывести в файл! ";
  152.                 isFileIncorrect = true;
  153.                 outputFile.clear();
  154.             }
  155.         } while (isFileIncorrect);
  156.  
  157.         outputFile.close();
  158.         cout << "Вывод данных... успешно!";
  159.     }
  160. }
  161.  
  162. int main() {
  163.     int n, i;
  164.     SetConsoleOutputCP(CP_UTF8);
  165.  
  166.     cout << "Данная программа заполнит матрицу чисел змейкой" << endl;
  167.  
  168.     n = inputN();
  169.  
  170.     int** matrix = new int* [n];
  171.     for (i = 0; i < n; i++) {
  172.         matrix[i] = new int[n];
  173.     }
  174.  
  175.     fillMatrix(matrix, n);
  176.     outputMatrix(matrix, n);
  177.     return 0;
  178. }
  179.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement