Advertisement
dxvmxnd

Untitled

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