Advertisement
dxvmxnd

Untitled

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