Advertisement
THOMAS_SHELBY_18

2_3 C++

Nov 2nd, 2023
27
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.37 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <windows.h>
  5.  
  6. using namespace std;
  7.  
  8. const int
  9. MIN_LENGTH = 1,
  10. MAX_LENGTH = 10,
  11. MIN_VALUE = -100,
  12. MAX_VALUE = 100;
  13.  
  14. void printCondition()
  15. {
  16. cout << "Данная программа найдет наибольшую сумму модулей элементов строк заданной матрицы" << endl;
  17. }
  18.  
  19.  
  20. int readNum(int min, int max) {
  21.  
  22. bool isIncorrect;
  23. int num;
  24.  
  25. do {
  26. isIncorrect = true;
  27. cin >> num;
  28. if (cin.fail() || (cin.get() != '\n')) {
  29. cout << "Некорректный ввод! Введите значение еще раз:" << endl;
  30. cin.clear();
  31. while (cin.get() != '\n');
  32. }
  33. else {
  34. if (num < min || num > max) {
  35. cout << "Недопустимое значение! Введите значение еще раз:" << endl;
  36. }
  37. else {
  38. isIncorrect = false;
  39. }
  40. }
  41. } while (isIncorrect);
  42.  
  43. return num;
  44. }
  45.  
  46. bool checkAndInputFileData(string& path, int**& matrix, int& n, int& m) {
  47. ifstream fin;
  48. bool isFileCorrect;
  49. int buf, i, j;
  50.  
  51. fin.open(path);
  52. isFileCorrect = true;
  53.  
  54. fin >> n;
  55. if (fin.fail()) {
  56. fin.clear();
  57. isFileCorrect = false;
  58. cout << "Файл не найден или данные в файле некоректны.\nВнесите изменения в файл и повторите попытку!" << endl;
  59. }
  60.  
  61. else if ((MIN_LENGTH > n) || (MAX_LENGTH < n)) {
  62. isFileCorrect = false;
  63. cout << "Значение выходит за возможные пределы!\nВнесите изменения в файл и повторите попытку!" << endl;
  64. }
  65. else if (fin.get() != '\n') {
  66. cout << "В первой строке должно находится только количество строк матрицы!\nВнесите изменения в файл и повторите попытку!" << endl;
  67. isFileCorrect = false;
  68. }
  69.  
  70. if (isFileCorrect)
  71. {
  72. fin >> m;
  73. if (fin.fail()) {
  74. fin.clear();
  75. isFileCorrect = false;
  76. cout << "Файл не найден или данные некоректны.\nВнесите изменения в файл и повторите попытку!" << endl;
  77. }
  78.  
  79. else if ((MIN_LENGTH > m) || (MAX_LENGTH < m)) {
  80. isFileCorrect = false;
  81. cout << "Значение выходит за возможные пределы!\nВнесите изменения в файл и повторите попытку!" << endl;
  82. }
  83.  
  84. else if (fin.get() != '\n') {
  85. cout << "Во второй строке должно находится только количество столбцов матрицы!\nВнесите изменения в файл и повторите попытку!" << endl;
  86. isFileCorrect = false;
  87. }
  88. }
  89.  
  90. if (isFileCorrect)
  91. {
  92. matrix = new int* [n];
  93. for (i = 0; i < n; i++)
  94. {
  95. matrix[i] = new int[m];
  96. }
  97.  
  98. i = 0;
  99. do {
  100. j = 0;
  101. do {
  102. fin >> buf;
  103. if (fin.fail()) {
  104. cout << "Элементы матрицы введены некорректно!\nВнесите изменения в файл и повторите попытку!" << endl;
  105. isFileCorrect = false;
  106. fin.clear();
  107. } else
  108. matrix[i][j] = buf;
  109. j++;
  110. } while (isFileCorrect && j < m);
  111.  
  112. i++;
  113. } while (isFileCorrect && i < n);
  114. }
  115.  
  116. if (isFileCorrect && !fin.eof()) {
  117. cout << "Элементы массива введены некорректно!\nВнесите изменения в файл и повторите попытку!" << endl;
  118. isFileCorrect = false;
  119. }
  120.  
  121. fin.close();
  122. return isFileCorrect;
  123. }
  124.  
  125. void inputMatrixFromConsole(int**& matrix, int& n, int& m) {
  126. int buf;
  127. cout << "Введите количество cтрок:";
  128. n = readNum(MIN_LENGTH, MAX_LENGTH);
  129. cout << "Введите количество cтолбцов:";
  130. m = readNum(MIN_LENGTH, MAX_LENGTH);
  131.  
  132. matrix = new int* [n];
  133. for (int i = 0; i < n; i++)
  134. {
  135. matrix[i] = new int[m];
  136. }
  137.  
  138. for (int i = 0; i < n; i++)
  139. {
  140. for (int j = 0; j < m; j++)
  141. {
  142. cout << "Введите элемент матрицы " << "(" << i << "," << j << ")" << ":" << endl;
  143. buf = readNum(MIN_VALUE, MAX_VALUE);
  144. matrix[i][j] = buf;
  145. }
  146. }
  147. }
  148. void inputMatrix(int**& matrix, int& n, int& m) {
  149. int choice;
  150. bool isInputFromFileSuccessfully;
  151. string pathFile;
  152.  
  153. cout << "Выберите вариант ввода:" << endl << "1. Ввод из консоли" << endl << "2. Ввод из файла" << endl << "Использовать вариант:";
  154. choice = readNum(1, 2);
  155.  
  156. if (choice == 1) {
  157. cout << "Допустимые значения:" << endl;
  158. cout << "Количество строк и столбцов - натуральные числа от " << MIN_LENGTH << " до " << MAX_LENGTH << endl;
  159. cout << "Элементы матрицы - натуральные числа от " << MIN_VALUE << " до " << MAX_VALUE << endl;
  160. inputMatrixFromConsole(matrix, n, m);
  161. }
  162. else {
  163. cout << "Данные в файле должны содержать:" << endl;
  164. cout << "Количество строк и столбцов - натуральное число от " << MIN_LENGTH << " до " << MAX_LENGTH << endl;
  165. cout << "Элементы матрицы - натуральные числа от " << MIN_VALUE << " до " << MAX_VALUE << endl;
  166.  
  167. do {
  168. cout << "Введите путь к файлу с его раширением:";
  169. cin >> pathFile;
  170. isInputFromFileSuccessfully = checkAndInputFileData(pathFile, matrix, n, m);
  171. } while(!isInputFromFileSuccessfully);
  172. }
  173. }
  174.  
  175. void outputData(int sum) {
  176. int choice;
  177. ofstream fout;
  178. string path;
  179. bool isFileIncorrect;
  180.  
  181. cout << "Выберите вариант вывода:" << endl << "1. Вывод в консоль" << endl << "2. Вывод в файл" << endl << "Использовать вариант:";
  182. choice = readNum(1, 2);
  183.  
  184. if (choice == 1) {
  185. cout << "Наибольшая сумма модулей элементов строк матрицы:" << sum << endl;
  186. }
  187. else {
  188. cout << "Для вывода введите путь к файлу и его имя c расширением." << endl;
  189. cout << "Если файл отсутствует то он будет создан автоматически по указанному пути или в корневой папке программы (по умолчанию)" << endl;
  190. do {
  191. cout << "Введите путь:";
  192. cin >> path;
  193. fout.open(path);
  194. isFileIncorrect = false;
  195.  
  196. fout << "Наибольшая сумма модулей элементов строк матрицы:" << sum;
  197.  
  198. if (fout.fail()) {
  199. cout << "Не удалось вывести в файл! ";
  200. isFileIncorrect = true;
  201. fout.clear();
  202. }
  203. } while (isFileIncorrect);
  204.  
  205. fout.close();
  206. cout << "Вывод данных... успешно!";
  207. }
  208. }
  209.  
  210. int findMaxSumOfRowElements(int** matrix, int n, int m)
  211. {
  212. int maxSum = 0, sum = 0,i ,j ;
  213. for (i = 0; i < n; i++)
  214. {
  215. sum = 0;
  216. for (j = 0; j < m ; j++)
  217. sum += abs(matrix[i][j]);
  218. if (sum > maxSum)
  219. {
  220. maxSum = sum;
  221. }
  222. }
  223. return maxSum;
  224. }
  225.  
  226.  
  227. int main() {
  228. int sum, n , m;
  229. int** matrix;
  230.  
  231. SetConsoleOutputCP(CP_UTF8);
  232.  
  233. printCondition();
  234. inputMatrix(matrix, n, m);
  235.  
  236. sum = findMaxSumOfRowElements(matrix, n, m);
  237. outputData(sum);
  238.  
  239. return 0;
  240. }
  241.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement