Advertisement
lithie_oce

lab 2.3 c++

Nov 1st, 2023 (edited)
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.37 KB | Source Code | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. int choiceCheck() {
  8.     int choice;
  9.     bool isIncorrect;
  10.     do {
  11.         isIncorrect = true;
  12.         cin >> choice;
  13.         if (cin.fail() || (cin.get() != '\n')) {
  14.             cout << "Error! Input a number" << endl;
  15.             cin.clear();
  16.             while (cin.get() != '\n');
  17.         } else {
  18.             cin.clear();
  19.             if (choice > 0 && choice < 3) {
  20.                 isIncorrect = false;
  21.             } else {
  22.                 cout << "Error! Input 1 or 2" << endl;
  23.             }
  24.         }
  25.  
  26.     } while (isIncorrect);
  27.     return choice;
  28. }
  29.  
  30. int inputCheck() {
  31.     bool isIncorrect;
  32.     int n;
  33.     cout << "Input n" << endl;
  34.     do {
  35.  
  36.         isIncorrect = true;
  37.         cin >> n;
  38.         if (cin.fail() || (cin.get() != '\n')) {
  39.             cout << "Error! Input a number" << endl;
  40.             cin.clear();
  41.             while (cin.get() != '\n');
  42.         } else {
  43.             cin.clear();
  44.             if (n > 0) {
  45.                 isIncorrect = false;
  46.             } else {
  47.                 cout << "Error! Input a number greater than 0" << endl;
  48.             }
  49.         }
  50.  
  51.     } while (isIncorrect);
  52.     return n;
  53. }
  54.  
  55. int **inputCheckMatrix(int n, int **matr) {
  56.     int n1, i, j;
  57.     bool isIncorrect;
  58.     n1 = n + 1;
  59.     for (j = 0; j < n; j++) {
  60.         matr[0][j] = 0;
  61.     }
  62.     for (j = 0; j < n; j++) {
  63.         matr[n1][j] = 0;
  64.     }
  65.     for (i = 1; i < n1; i++) {
  66.         for (j = 0; j < n; j++) {
  67.             do {
  68.                 isIncorrect = true;
  69.                 cin >> matr[i][j];
  70.                 if (cin.fail() || (cin.get() != '\n')) {
  71.                     cout << "Error! Input a number" << endl;
  72.                     cin.clear();
  73.                     while (cin.get() != '\n');
  74.                 } else {
  75.                     isIncorrect = false;
  76.                 }
  77.             } while (isIncorrect);
  78.         }
  79.     }
  80.     return matr;
  81. }
  82.  
  83. string checkInputFilePath() {
  84.     string path;
  85.     bool isInCorrect;
  86.     do {
  87.         cout << "Input path to the file:\n";
  88.         isInCorrect = false;
  89.         cin >> path;
  90.         ifstream fin(path);
  91.         if (!fin.is_open()) {
  92.             cout << "Could not open the file" << endl;
  93.             isInCorrect = true;
  94.         } else {
  95.             fin.close();
  96.         }
  97.  
  98.     } while (isInCorrect);
  99.     return path;
  100. }
  101.  
  102.  
  103. int **fileCheckMatrix(int &n, int **matr) {
  104.     string path;
  105.     bool isIncorrect;
  106.     int i, j, n1, n2;
  107.     do {
  108.         path = checkInputFilePath();
  109.         ifstream fin(path);
  110.         isIncorrect = false;
  111.         fin >> n;
  112.         if (fin.fail()) {
  113.             cout << "The data is incorrect" << endl;
  114.             isIncorrect = true;
  115.         }
  116.         if (!isIncorrect && (n < 1)) {
  117.             cout << "The data is incorrect" << endl;
  118.             isIncorrect = true;
  119.         }
  120.         if (!isIncorrect) {
  121.             n1 = n + 1;
  122.             n2 = n + 2;
  123.             matr = new int *[n + 2];
  124.             for (i = 0; i < n2; i++) {
  125.                 matr[i] = new int[n];
  126.             }
  127.             for (j = 0; j < n; j++) {
  128.                 matr[0][j] = 0;
  129.             }
  130.             for (j = 0; j < n; j++) {
  131.                 matr[n1][j] = 0;
  132.             }
  133.             for (i = 1; i < n1; i++) {
  134.                 for (j = 0; j < n; j++) {
  135.                     fin >> matr[i][j];
  136.                     if (fin.fail()) {
  137.                         cout << "The data is incorrect" << endl;
  138.                         isIncorrect = true;
  139.                     }
  140.                 }
  141.             }
  142.             if (!fin.eof()) {
  143.                 cout << "The data is incorrect" << endl;
  144.                 isIncorrect = true;
  145.             }
  146.         }
  147.         fin.close();
  148.     } while (isIncorrect);
  149.     return matr;
  150. }
  151.  
  152.  
  153. int **inputChoice(int &n) {
  154.     int choice, n2, i;
  155.     int **matr;
  156.     cout << "Choose input option:\n1.Input through console\n2.Input through file" << endl;
  157.     choice = choiceCheck();
  158.     if (choice == 1) {
  159.         n = inputCheck();
  160.         n2 = n + 2;
  161.         matr = new int *[n2];
  162.         for (i = 0; i < n2; i++) {
  163.             matr[i] = new int[n];
  164.         }
  165.         matr = inputCheckMatrix(n, matr);
  166.     } else {
  167.         matr = fileCheckMatrix(n, matr);
  168.     }
  169.     return matr;
  170. }
  171.  
  172. void swap(int &n, int **matr) {
  173.     int n1, i, j;
  174.     int helpArray1[n];
  175.     int helpArray2[n];
  176.     n1 = n + 2;
  177.     for (j = 0; j < n; j++) {
  178.         helpArray1[j] = matr[1][j];
  179.         matr[1][j] = 0;
  180.     }
  181.     for (i = 2; i < n1; i++) {
  182.         for (j = 0; j < n; j++) {
  183.             helpArray2[j] = matr[i][j];
  184.             matr[i][j] = helpArray1[j];
  185.             helpArray1[j] = helpArray2[j];
  186.         }
  187.     }
  188. }
  189.  
  190. string checkOutputFilePath() {
  191.     string path;
  192.     bool isIncorrect;
  193.     cout
  194.             << "Input file path and the name of the file for\nexample С:\\Projects\\Number\\FileName.txt. If the\nfile does not exist, then it will be created\nautomatically in the root folder of the program:\n";
  195.     isIncorrect = false;
  196.     cin >> path;
  197.     ifstream fin(path);
  198.     if (!fin.is_open()) {
  199.         cout << "Could not open the file or it does not exist" << endl;
  200.         isIncorrect = true;
  201.     } else {
  202.         fin.close();
  203.     }
  204.     if (isIncorrect) {
  205.         cout << "File will be created in the root folder of the program\n";
  206.         path = "Result.txt";
  207.     }
  208.     return path;
  209. }
  210.  
  211. void outputMatrix(int n, int **matr) {
  212.     int i, j, n1;
  213.     n1 = n + 2;
  214.     for (i = 0; i < n1; i++) {
  215.         for (j = 0; j < n; j++) {
  216.             cout << matr[i][j] << " ";
  217.         }
  218.         cout << endl;
  219.     }
  220. }
  221.  
  222. void outputFile(int n, int **matr) {
  223.     string path;
  224.     int i, j, n1;
  225.     path = checkOutputFilePath();
  226.     ofstream fout(path);
  227.     n1 = n + 2;
  228.     for (i = 0; i < n1; i++) {
  229.         for (j = 0; j < n; j++) {
  230.             fout << matr[i][j] << " ";
  231.         }
  232.         fout << endl;
  233.     }
  234.     fout.close();
  235. }
  236.  
  237. void outputChoice(int &n, int **matr) {
  238.     int choice;
  239.     cout << "Choose output option:\n1.Output through console\n2.Output through file" << endl;
  240.     choice = choiceCheck();
  241.     if (choice == 1) {
  242.         outputMatrix(n, matr);
  243.     } else {
  244.         outputFile(n, matr);
  245.     }
  246. }
  247.  
  248.  
  249. int main() {
  250.     int **matr;
  251.     int n;
  252.     matr = inputChoice(n);
  253.     swap(n, matr);
  254.     outputChoice(n, matr);
  255.     return 0;
  256. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement