Advertisement
dxvmxnd

Untitled

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