Advertisement
dxvmxnd

Untitled

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