Advertisement
ksyshshot

Untitled

Nov 7th, 2022
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.40 KB | Source Code | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. void writeTask()
  8. {
  9.     cout << "Данная программа вычисляет норму матрицы.\n";
  10. }
  11.  
  12. int takeMatrixOrderFromConsole()
  13. {
  14.     const int MAX_ORDER = 10;
  15.     const int MIN_ORDER = 2;
  16.     bool isNotCorrect;
  17.     int order;
  18.     do
  19.     {
  20.         isNotCorrect = false;
  21.         cout << "Введите порядок квадратной матрицы: ";
  22.         cin >> order;
  23.         if (cin.fail())
  24.         {
  25.             cin.clear();
  26.             while (cin.get() != '\n');
  27.             isNotCorrect = true;
  28.             cout << "Введено некорректное значение. Повторите попытку...\n";
  29.         }
  30.         if ((!isNotCorrect) && (cin.get() != '\n'))
  31.         {
  32.             cin.clear();
  33.             isNotCorrect = true;
  34.             cout << "Введено некорректное значение. Повторите попытку...\n";
  35.         }
  36.         if ((!isNotCorrect) && ((order < MIN_ORDER) || (order > MAX_ORDER)))
  37.         {
  38.             isNotCorrect = true;
  39.             cout << "Введённое число не входит в допустимый диапазон. Повторите попытку...\n";
  40.         }
  41.     } while (isNotCorrect);
  42.     return order;
  43. }
  44.  
  45. int** creationAllMatrixes(int order)
  46. {
  47.     int** matrix = new int* [order];
  48.     for (int i = 0; i < order; i++)
  49.     {
  50.         matrix[i] = new int[order];
  51.     }
  52.     return matrix;
  53. }
  54.  
  55. int** createMatrixFromConsole(int& order)
  56. {
  57.     const int MIN_ELEMENT = -2147483648;
  58.     const int MAX_ELEMENT = 2147483647;
  59.     order = takeMatrixOrderFromConsole();
  60.     int** matrix = creationAllMatrixes(order);
  61.     bool isNotCorrect;
  62.     for (int i = 0; i < order; i++)
  63.     {
  64.         for (int j = 0; j < order; j++)
  65.         {
  66.             do
  67.             {
  68.                 isNotCorrect = false;
  69.                 cout << "Введите элемент " << (i + 1) << " строки " << (j + 1) << " столбца матрицы: ";
  70.                 cin >> matrix[i][j];
  71.                 if (cin.fail())
  72.                 {
  73.                     cin.clear();
  74.                     while (cin.get() != '\n');
  75.                     isNotCorrect = true;
  76.                     cout << "Введено некорректное значение. Повторите попытку...\n";
  77.                 }
  78.                 if ((!isNotCorrect) && (cin.get() != '\n'))
  79.                 {
  80.                     cin.clear();
  81.                     isNotCorrect = true;
  82.                     cout << "Введено некорректное значение. Повторите попытку...\n";
  83.                 }
  84.                 if ((!isNotCorrect) && ((matrix[i][j] < MIN_ELEMENT) || (matrix[i][j] > MAX_ELEMENT)))
  85.                 {
  86.                     isNotCorrect = true;
  87.                     cout << "Введённое значение не входит в допустимый диапазон.Повторите попытку...\n";
  88.                 }
  89.             } while (isNotCorrect);
  90.         }
  91.     }
  92.     return matrix;
  93. }
  94.  
  95. void outputMatrixInConsole(int** matrix, int order)
  96. {
  97.     for (int i = 0; i < order; i++)
  98.     {
  99.         for (int j = 0; j < order; j++)
  100.         {
  101.             cout << matrix[i][j] << " ";
  102.         }
  103.         cout << endl;
  104.     }
  105. }
  106.  
  107. string takePathToFile()
  108. {
  109.     bool isNotCorrect;
  110.     string path;
  111.     fstream file;
  112.     do
  113.     {
  114.         isNotCorrect = false;
  115.         cout << "Введите путь к файлу: ";
  116.         cin >> path;
  117.         file.open(path);
  118.         if (!file.is_open())
  119.         {
  120.             isNotCorrect = true;
  121.             cout << "Файл не найден. Повторите попытку...\n";
  122.         }
  123.     } while (isNotCorrect);
  124.     file.close();
  125.     return path;
  126. }
  127.  
  128. int** takeMatrixFromFile()
  129. {
  130.     cout << "Требуется файл для чтения. ";
  131.     string path = takePathToFile();
  132.     const int MIN_ELEMENT = -2147483648;
  133.     const int MAX_ELEMENT = 2147483647;
  134.     const int MAX_ORDER = 10;
  135.     const int MIN_ORDER = 2;
  136.     bool isNotCorrect;
  137.     int order;
  138.     fstream file;
  139.     int** matrix;
  140.     do
  141.     {
  142.         do
  143.         {
  144.             isNotCorrect = false;
  145.             file.open(path);
  146.             file >> order;
  147.             if (file.fail())
  148.             {
  149.                 file.clear();
  150.                 while (file.get() != '\n');
  151.                 cout << "Некорректно введённый порядок матрицы. ";
  152.                 isNotCorrect = true;
  153.             }
  154.             if ((!isNotCorrect) && ((order < MIN_ORDER) || (order > MAX_ORDER)))
  155.             {
  156.                 cout << "Порядок матрицы неверного диапазона! ";
  157.                 isNotCorrect = true;
  158.             }
  159.             if (isNotCorrect)
  160.             {
  161.                 cout << "Повторите попытку...\n";
  162.                 path = takePathToFile();
  163.                 file.close();
  164.             }
  165.         } while (isNotCorrect);
  166.         matrix = creationAllMatrixes(order);
  167.         int i = 0;
  168.         while ((!isNotCorrect) && (i < order))
  169.         {
  170.             int j = 0;
  171.             while ((!isNotCorrect) && (j < order))
  172.             {
  173.                 file >> matrix[i][j];
  174.                 if (file.fail())
  175.                 {
  176.                     cout << "Ошибка! Найдено некорректное значение элемента матрицы\n";
  177.                     isNotCorrect = true; i--;
  178.                 }
  179.                 j++;
  180.             }
  181.             i++;
  182.         }
  183.         if (isNotCorrect)
  184.         {
  185.             cout << "Проверьте правильность введённых данных и повторите попытку...\n";
  186.             path = takePathToFile();
  187.         }
  188.     } while (isNotCorrect);
  189.     return matrix;
  190. }
  191.  
  192. int* calculateAbsSum(int** matrix, int order)
  193. {
  194.     int* absSums = new int[order];
  195.     for (int i = 0; i < order; i++)
  196.     {
  197.         int sum = 0;
  198.         for (int j = 0; j < order; j++)
  199.         {
  200.             sum += abs(matrix[i][j]);
  201.         }
  202.         absSums[i] = sum;
  203.     }
  204.     return absSums;
  205. }
  206.  
  207. int findMatrixNorm(int** matrix, int order)
  208. {
  209.     int* absSums = calculateAbsSum(matrix, order);
  210.     int norm = absSums[0];
  211.     for (int i = 1; i < order; i++)
  212.     {
  213.         if (absSums[i] > norm)
  214.         {
  215.             norm = absSums[i];
  216.         }
  217.     }
  218.     return norm;
  219. }
  220.  
  221. int chooseInputOutputMethod()
  222. {
  223.     bool isNotCorrect;
  224.     int choice;
  225.     do
  226.     {
  227.         isNotCorrect = false;
  228.         cin >> choice;
  229.         if (cin.fail())
  230.         {
  231.             cin.clear();
  232.             while (cin.get() != '\n');
  233.             cout << "Число введено некорректно. Повторите попытку...\n";
  234.             isNotCorrect = true;
  235.         }
  236.         if ((!isNotCorrect) && (cin.get() != '\n'))
  237.         {
  238.             cin.clear();
  239.             cout << "Число введено некорректно. Повторите попытку...\n";
  240.             isNotCorrect = true;
  241.         }
  242.         if ((!isNotCorrect) && (choice != 1) && (choice != 2))
  243.         {
  244.             cout << "Введите либо 1, либо 2. Ваш выбор: \n";
  245.             isNotCorrect = true;
  246.         }
  247.     } while (isNotCorrect);
  248.     return choice;
  249. }
  250.  
  251. void outputAnswerInFile(int answer)
  252. {
  253.     cout << "Требуется файл для записи. ";
  254.     string path = takePathToFile();
  255.     bool isNotCorrect;
  256.     fstream file;
  257.     isNotCorrect = false;
  258.     file.open(path);
  259.     file << "Полученная норма матрицы: " << answer;
  260.     file.close();
  261.     cout << "Норма матрицы записана в файл!\n";
  262. }
  263.  
  264. int** getMatrix(int choice, int& order)
  265. {;
  266.     int** matrix;
  267.     if (choice == 1)
  268.     {
  269.         matrix = createMatrixFromConsole(order);
  270.         outputMatrixInConsole(matrix, order);
  271.     }
  272.     else
  273.     {
  274.         matrix = takeMatrixFromFile();
  275.     }
  276.     return matrix;
  277. }
  278.  
  279. void outputResult(int choice, int answer)
  280. {
  281.     if (choice == 1)
  282.     {
  283.         cout << "Полученная норма матрицы: " << answer;
  284.     }
  285.     else
  286.     {
  287.         outputAnswerInFile(answer);
  288.     }
  289. }
  290.  
  291. int main()
  292. {
  293.     setlocale(LC_ALL, "Rus");
  294.     writeTask();
  295.     cout << "Выберите способ ввода данных (1 - через консоль, 2 - с помощью файлов): ";
  296.     int choice = chooseInputOutputMethod();
  297.     int order = 0;
  298.     int** matrix = getMatrix(choice, order);
  299.     int answer = findMatrixNorm(matrix, order);
  300.     cout << "Выберите способ вывода данных (1 - через консоль, 2 - с помощью файлов): ";
  301.     choice = chooseInputOutputMethod();
  302.     outputResult(choice, answer);
  303.     return 0;
  304. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement