Advertisement
dxvmxnd

Untitled

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