Advertisement
dxvmxnd

Untitled

Oct 29th, 2023
24
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.90 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. string pathChoice() {
  14. string path;
  15. bool isNotCorrect;
  16. do {
  17. isNotCorrect = false;
  18. cout << "Введите путь к файлу." << endl;
  19. cin >> path;
  20. ifstream fin(path);
  21. if (fin.is_open()) {
  22. cout << "Файл успешно открыт!" << endl;
  23. }
  24. else {
  25. cout << "Ошибка открытия файла" << endl;
  26. isNotCorrect = true;
  27. }
  28. fin.close();
  29. } while (isNotCorrect);
  30.  
  31.  
  32. return path;
  33. }
  34.  
  35. int sizeRowFile(string path) {
  36. int sizeI;
  37. bool isNotCorrect;
  38. int correct;
  39.  
  40. ifstream fin(path);
  41. do {
  42. isNotCorrect = false;
  43. cout << "Ввод количества строк..." << endl;
  44. fin >> sizeI;
  45. if (cin.fail() or (sizeI < 1)) {
  46. isNotCorrect = true;
  47. cout << "Данные введены неккоректно. Измените входные данные и перезапустите программу." << endl;
  48. cin.clear();
  49. while (cin.get() != '\n');
  50. correct = 1;
  51. while (correct = 1) {
  52. cin >> correct;
  53. }
  54. }
  55. } while (isNotCorrect);
  56. fin.close();
  57. return sizeI;
  58. }
  59.  
  60. int sizeColumnFile(string path) {
  61. int sizeJ;
  62. bool isNotCorrect;
  63. int correct;
  64.  
  65. ifstream fin(path);
  66. do {
  67. isNotCorrect = false;
  68. cout << "Ввод количества столбцов..." << endl;
  69. fin >> sizeJ;
  70. if (cin.fail() or (sizeJ < 1)) {
  71. isNotCorrect = true;
  72. cout << "Данные введены неккоректно. Измените входные данные и перезапустите программу." << endl;
  73. cin.clear();
  74. while (cin.get() != '\n');
  75. correct = 1;
  76. while (correct = 1) {
  77. cin >> correct;
  78. }
  79. }
  80. } while (isNotCorrect);
  81. fin.close();
  82. return sizeJ;
  83. }
  84.  
  85.  
  86. int** matrixReadFile(string path, int sizeI, int sizeJ, int** matrix) {
  87. ifstream fin(path);
  88. bool isNotCorrect;
  89. cout << "Запись матрицы..." << endl;
  90. for (int i = 0; i < sizeI; i++) {
  91. for (int j = 0; j < sizeJ; j++) {
  92. do {
  93. isNotCorrect = false;
  94. fin >> matrix[i][j];
  95. if (cin.fail()) {
  96. isNotCorrect = true;
  97. cout << "Данные введены неккоректно. Измените " << (i + 1) << "," << (j + 1) << " пункт матрицы и перезапустите программу." << endl;
  98. cin.clear();
  99. while (cin.get() != '\n');
  100. }
  101. } while (isNotCorrect);
  102.  
  103. }
  104. }
  105. return matrix;
  106. }
  107.  
  108. int matrixCout(int** matrix) {
  109. int sum;
  110. int maxsum;
  111. int sizeI;
  112. int sizeJ;
  113.  
  114.  
  115. sizeI = sizeof(matrix);
  116. sizeJ = sizeof(matrix[0]);
  117. sum = 0;
  118. maxsum = 0;
  119.  
  120. for (int i = 0; i < sizeI; i++) {
  121. for (int j = 0; j < sizeJ; j++) {
  122. sum = sum + abs(matrix[i][j]);
  123. }
  124. if (sum > maxsum) {
  125. maxsum = sum;
  126. }
  127. sum = 0;
  128. }
  129. return maxsum;
  130. }
  131.  
  132. void output(int result) {
  133. string path;
  134. cout << "Максимальная сумма модулей элементов строк: " << result << endl;
  135. bool isNotCorrect;
  136. do {
  137. isNotCorrect = false;
  138. cout << "Введите путь файла для вывода: " << endl;
  139. cin >> path;
  140. ofstream fout(path, fstream::app);
  141. if (fout.is_open()) {
  142. fout << "Максимальная сумма модулей элементов строк: " << result << endl;
  143. }
  144. else {
  145. cout << "Ошибка открытия файла" << endl;
  146. isNotCorrect = true;
  147. }
  148. fout.close();
  149. } while (isNotCorrect);
  150. }
  151.  
  152. int** fromFile(int** matrix) {
  153. string path;
  154. int sizeI;
  155. int sizeJ;
  156. int maxRes = 0;
  157.  
  158. cout << "При записи данных из файла, учтите, что на первой строке написано количество строк матрицы, на второй - количество столбцов, а далее с новой строки прописывается сама матрица." << endl;
  159. path = pathChoice();
  160. sizeI = sizeRowFile(path);
  161. sizeJ = sizeColumnFile(path);
  162. matrix = new int* [sizeI];
  163. for (int i = 0; i < sizeI; i++) {
  164. matrix[i] = new int[sizeJ];
  165. }
  166. matrix = matrixReadFile(path, sizeI, sizeJ, matrix);
  167.  
  168.  
  169. return matrix;
  170. }
  171. /*
  172. int sizeRowConsole{
  173.  
  174. }
  175.  
  176. int sizeColumnConsole{
  177.  
  178. }
  179.  
  180.  
  181. int matrixReadConsole{
  182.  
  183. }
  184.  
  185. int fromConsole{
  186.  
  187. } */
  188. int** sourceChoice(int** matrix) {
  189. int choiceNumber;
  190. bool isNotCorrect;
  191.  
  192. cout << "Выберите, откуда будут выводиться данные: " << endl;
  193. do {
  194. isNotCorrect = false;
  195. cout << "Введите 0, если с консоли; введите 1, если с файла." << endl;
  196. cin >> choiceNumber;
  197. if (cin.fail() or ((choiceNumber != 0) and (choiceNumber != 1))) {
  198. isNotCorrect = true;
  199. cout << "Данные введены неккоректно" << endl;
  200. cin.clear();
  201. while (cin.get() != '\n');
  202. }
  203. } while (isNotCorrect);
  204.  
  205. if (choiceNumber == 0) {
  206. matrix = fromFile(matrix);
  207. }
  208. else {
  209. matrix = fromFile(matrix);
  210. }
  211.  
  212. return matrix;
  213. }
  214.  
  215. int main() {
  216. int** matrix;
  217. int maxRes;
  218.  
  219. matrix = nullptr;
  220. taskEssence();
  221. matrix = sourceChoice(matrix);
  222. maxRes = matrixCout(matrix);
  223. output(maxRes);
  224. }
  225. /*
  226. void fromfile() {
  227.  
  228. bool isIncorrect;
  229. int** matrix = nullptr;
  230. int sizeI;
  231. int sizeJ;
  232. printf("Input path for input file: \n");
  233. string path = "..//..//input.txt";
  234.  
  235. //cin >> path;
  236.  
  237. isIncorrect = false;
  238. sizeI = 0;
  239. sizeJ = 0;
  240.  
  241. cout << "Открытие файла..." << endl;
  242. ifstream fin(path);
  243. if (fin.is_open()) {
  244. fin >> sizeI;
  245. fin >> sizeJ;
  246. if (cin.fail() or (sizeI < 1) or (sizeJ < 1)) {
  247. isIncorrect = true;
  248. cout << "Данные введены некорректно" << endl;
  249. cin.clear();
  250. while (cin.get() != '\n');
  251. }
  252. matrix = new int* [sizeI];
  253. for (int i = 0; i < sizeI; i++) {
  254. matrix[i] = new int[sizeJ];
  255. for (int j = 0; j < sizeJ; j++) {
  256. fin >> matrix[i][j];
  257. }
  258. }
  259. fin.close();
  260.  
  261. cout << "Вывод матрицы: " << endl;
  262. for (int i = 0; i < sizeI; i++) {
  263. ;
  264. for (int j = 0; j < sizeJ; j++) {
  265. cout << matrix[i][j] << " ";
  266. }
  267. cout << "\n";
  268. }
  269.  
  270. int maxsum = matrixcout(matrix, sizeI, sizeJ);
  271.  
  272.  
  273. cout << "Максимальная сумма модулей элементов строки: " << maxsum;
  274.  
  275.  
  276. ofstream fout(path, fstream::app);
  277. cout << "\nЗапись ответа в файл.." << endl;
  278. if (fout.is_open()) {
  279. fout << "\nМаксимальная сумма модулей элементов строки: " << maxsum;
  280. }
  281. fout.close();
  282. }
  283. else {
  284. cout << "Ошибка открытия файла" << endl;
  285. isIncorrect = true;
  286. }
  287.  
  288. fin.close();
  289.  
  290.  
  291.  
  292.  
  293. delete[] matrix;
  294. }
  295.  
  296. void fromconsole() {
  297.  
  298. bool isIncorrect;
  299. int** matrix = nullptr;
  300.  
  301. int sizeI;
  302. sizeI = 0;
  303. do {
  304. isIncorrect = false;
  305. cout << "Введите количество строк в матрице" << endl;
  306. cin >> sizeI;
  307. if (cin.fail() or (sizeI < 1)) {
  308. isIncorrect = true;
  309. cout << "Данные введены некорректно" << endl;
  310. cin.clear();
  311. while (cin.get() != '\n');
  312. }
  313. } while (isIncorrect);
  314.  
  315. int sizeJ;
  316. sizeJ = 0;
  317. do {
  318. isIncorrect = false;
  319. cout << "Введите количество столбцов в матрице" << endl;
  320. cin >> sizeJ;
  321. if (cin.fail() or (sizeJ < 1)) {
  322. isIncorrect = true;
  323. cout << "Данные введены некорректно" << endl;
  324. cin.clear();
  325. while (cin.get() != '\n');
  326. }
  327. } while (isIncorrect);
  328.  
  329. matrix = new int* [sizeI];
  330.  
  331. for (int i = 0; i < sizeI; i++) {
  332. matrix[i] = new int[sizeJ];
  333. for (int j = 0; j < sizeJ; j++) {
  334. do {
  335. isIncorrect = false;
  336. cout << "Введите элемент матрицы с адресом " << (i + 1) << "," << (j + 1) << endl;
  337. cin >> matrix[i][j];
  338. if (cin.fail()) {
  339. isIncorrect = true;
  340. cout << "Данные введены некорректно" << endl;
  341. cin.clear();
  342. while (cin.get() != '\n');
  343. }
  344. } while (isIncorrect);
  345. }
  346. }
  347.  
  348. cout << "Вывод матрицы: " << endl;
  349. for (int i = 0; i < sizeI; i++) {
  350. ;
  351. for (int j = 0; j < sizeJ; j++) {
  352. cout << matrix[i][j] << " ";
  353. }
  354. cout << "\n";
  355. }
  356.  
  357. int maxsum;
  358. maxsum = matrixcout(matrix, sizeI, sizeJ);
  359. cout << "Максимальная сумма модулей элементов строки: " << maxsum;
  360.  
  361. delete[] matrix;
  362.  
  363. }
  364.  
  365.  
  366. int main() {
  367. setlocale(LC_ALL, "Rus");
  368. cout << "Данная программа находит наибольшую сумму модулей элементов строк матрицы." << endl;
  369.  
  370. bool isIncorrect;
  371. string choice;
  372. cout << "Выберите, откуда должны выводиться данные." << endl;
  373. do {
  374. isIncorrect = false;
  375. cout << "Напишите ONE, если с консоли. TWO, если с файла." << endl;
  376. cin >> choice;
  377. if ((choice != "ONE") and (choice != "TWO")) {
  378. isIncorrect = true;
  379. cout << "Данные введены некорректно" << endl;
  380. }
  381. } while (isIncorrect);
  382. if (choice == "ONE") {
  383. fromconsole();
  384. }
  385. else {
  386. fromfile();
  387. }
  388. return 0;
  389. }
  390. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement