Advertisement
dxvmxnd

Untitled

Oct 30th, 2024
20
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.49 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. void outputTask() {
  7. cout << "Данная программа располагает элементы строк с четным индексом введенной матрицы в порядке убывания." << endl;
  8. }
  9.  
  10. string inputPath() {
  11. string path;
  12. bool isNotCorrect;
  13.  
  14. do {
  15. isNotCorrect = false;
  16. cin >> path;
  17. ifstream fin(path);
  18. if (fin.is_open() and (size(path) > 4) and ((path[size(path) - 1] == 't') and (path[size(path) - 2] == 'x') and (path[size(path) - 3] == 't') and (path[size(path) - 4] == '.'))) {
  19. cout << "Файл успешно открыт!" << endl;
  20. }
  21. else {
  22. cout << "Ошибка открытия файла!" << endl;
  23. isNotCorrect = true;
  24. }
  25. fin.close();
  26. } while (isNotCorrect);
  27.  
  28.  
  29. return path;
  30. }
  31.  
  32. void outputMatrix(int** matrix, int size) {
  33. cout << "Введенная матрица: " << endl;
  34. for (int i = 0; i < size; i++) {
  35. for (int j = 0; j < size; j++) {
  36. cout << matrix[i][j];
  37. cout << " ";
  38. }
  39. cout << endl;
  40. }
  41. }
  42.  
  43. void bubbleSort(int*& row, int size) {
  44. for (int i = 0; i < size - 1; ++i) {
  45. for (int j = 0; j < size - 1 - i; ++j) {
  46. if (row[j] < row[j + 1]) {
  47. int temp = row[j];
  48. row[j] = row[j + 1];
  49. row[j + 1] = temp;
  50. }
  51. }
  52. }
  53. }
  54.  
  55. int** countRows(int**& matrix, int size) {
  56. for (int i = 1; i < size; i += 2) {
  57. bubbleSort(matrix[i], size);
  58. }
  59. return matrix;
  60. }
  61.  
  62. void outputAnswer(int** matrix, int size) {
  63. string path;
  64.  
  65. cout << "Измененная матрица: " << endl;
  66. for(int i = 0; i < size; i++) {
  67. for(int j = 0; j < size; j++) {
  68. cout << matrix[i][j] << " ";
  69. }
  70. cout << endl;
  71. }
  72.  
  73. cout << "Введите путь файла для вывода: " << endl;
  74. path = inputPath();
  75. ofstream fout(path);
  76. fout << "Измененная матрица: " << endl;
  77. for(int i = 0; i < size; i++) {
  78. for(int j = 0; j < size; j++) {
  79. fout << matrix[i][j] << " ";
  80. }
  81. fout << endl;
  82. }
  83.  
  84. fout.close();
  85. cout << "Данные успешно записаны в файл." << endl;
  86. }
  87.  
  88. int inputSizeFromConsole() {
  89. int size;
  90. bool isNotCorrect;
  91.  
  92. do {
  93. cout << "Введите порядок матрицы: " << endl;
  94. isNotCorrect = false;
  95. cin >> size;
  96. if (cin.fail() or (size < 2)) {
  97. isNotCorrect = true;
  98. cout << "Ошибка ввода!" << endl;
  99. cin.clear();
  100. while(cin.get() != '\n');
  101. }
  102. } while(isNotCorrect);
  103.  
  104. return size;
  105.  
  106. }
  107.  
  108. void fillMatrixFromConsole(int**& matrix, int size) {
  109. bool isNotCorrect;
  110.  
  111. for (int i = 0; i < size; i++) {
  112. for (int j = 0; j < size; j++) {
  113. do {
  114. isNotCorrect = false;
  115. cout << "Введите [" << i + 1 << " , " << j + 1 << "] элемент матрицы: " << endl;
  116. cin >> matrix[i][j];
  117. if (cin.fail()) {
  118. cout << "Ошибка ввода! Повторите попытку." << endl;
  119. isNotCorrect = true;
  120. cin.clear();
  121. while(cin.get() != '\n');
  122. }
  123. } while(isNotCorrect);
  124. }
  125. }
  126. }
  127.  
  128. int** inputFromConsole(int& size) {
  129. int** matrix;
  130.  
  131. size = inputSizeFromConsole();
  132. matrix = new int*[size];
  133. for (int i = 0; i < size; i++) {
  134. matrix[i] = new int[size];
  135. }
  136. fillMatrixFromConsole(matrix, size);
  137. outputMatrix(matrix, size);
  138.  
  139. return matrix;
  140.  
  141. }
  142.  
  143. void outputSize(int size) {
  144. cout << "Введенный размер с файла: " << size << endl;
  145. }
  146.  
  147. void inputSizeFromFile(string path, int& size) {
  148.  
  149. cout << "Считывание размера..." << endl;
  150. ifstream fin(path);
  151. fin >> size;
  152. if (fin.fail() or (size < 2)) {
  153. cout << "Ошибка ввода размера! Введите размер с клавиатуры." << endl;
  154. size = inputSizeFromConsole();
  155. }
  156. else {
  157. outputSize(size);
  158. }
  159.  
  160. fin.close();
  161. }
  162.  
  163. double exceptionRead(int i, int j) {
  164. bool isNotCorrect;
  165. double num;
  166.  
  167. do{
  168. isNotCorrect = false;
  169. cout << "Введите [" << i + 1 << " , " << j + 1 << "] элемент матрицы: " << endl;
  170. cin >> num;
  171. if (cin.fail()) {
  172. cout << "Ошибка ввода!" << endl;
  173. isNotCorrect = true;
  174. cin.clear();
  175. while(cin.get() != '\n');
  176. }
  177.  
  178. } while(isNotCorrect);
  179.  
  180. return num;
  181. }
  182.  
  183. void inputMatrixFromFile(string path, int size, int**& matrix) {
  184. string skipLine;
  185.  
  186. cout << "Ввод матрицы.. " << endl;
  187.  
  188. ifstream fin(path);
  189. getline(fin, skipLine);
  190. for (int i = 0; i < size; i++) {
  191. for (int j = 0; j < size; j++) {
  192. fin >> matrix[i][j];
  193. if (fin.fail()) {
  194. cout << "Ошибка ввода элемента с индексами [" << i + 1 << " , " << j + 1 << "]. Введите этот элемент с клавиатуры. " << endl;
  195. fin.clear();
  196. fin.ignore(numeric_limits<streamsize>::max(), ' ');
  197. matrix[i][j] = exceptionRead(i, j);
  198. }
  199. }
  200. }
  201. fin.close();
  202.  
  203. }
  204.  
  205. int** inputFromFile(int& size) {
  206. string path;
  207. int** matrix;
  208.  
  209. cout << "При вводе из файла учтите, что на первой строке написан порядок матрицы, а далее - сама матрица с новой строки." << endl;
  210. cout << "Введите путь файла с данными: " << endl;
  211. path = inputPath();
  212. inputSizeFromFile(path, size);
  213.  
  214. matrix = new int*[size];
  215. for (int i = 0; i < size; i++) {
  216. matrix[i] = new int[size];
  217. }
  218.  
  219. inputMatrixFromFile(path, size, matrix);
  220. outputMatrix(matrix, size);
  221.  
  222. return matrix;
  223.  
  224.  
  225. }
  226.  
  227. bool isFromFile() {
  228. bool isNotCorrect;
  229. int chooseNum;
  230.  
  231. do {
  232. isNotCorrect = false;
  233. cout << "Выберите, откуда вводить данные: 1, если с файла; 0, если с консоли" << endl;
  234. cin >> chooseNum;
  235. if (cin.fail() or ((chooseNum != 1) and (chooseNum != 0))) {
  236. cout << "Ошибка ввода!" << endl;
  237. isNotCorrect = true;
  238. cin.clear();
  239. while(cin.get() != '\n');
  240. }
  241. } while(isNotCorrect);
  242.  
  243. return (chooseNum == 1);
  244.  
  245. }
  246.  
  247. int** chooseInput(int& size) {
  248. int** matrix;
  249.  
  250. if (isFromFile()) {
  251. matrix = inputFromFile(size);
  252. }
  253. else {
  254. matrix = inputFromConsole(size);
  255. }
  256.  
  257. return matrix;
  258. }
  259.  
  260. int main() {
  261. system("chcp 1251");
  262.  
  263. int** matrix;
  264. int size;
  265. int amountOfRows;
  266.  
  267. outputTask();
  268. matrix = chooseInput(size);
  269. matrix = countRows(matrix, size);
  270. outputAnswer(matrix, size);
  271.  
  272. for (int i = 0; i < size; ++i) {
  273. delete[] matrix[i];
  274. }
  275. delete[] matrix;
  276.  
  277. cin;
  278. return 0;
  279. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement