Guest User

Untitled

a guest
Dec 8th, 2019
123
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <cmath>
  3. #include <conio.h>
  4. #include <locale.h>
  5. #include <ctime>
  6. #include <stdlib.h>
  7. #include <ctime>
  8. #include <cstdlib>
  9. using namespace std;
  10.  
  11. typedef double** matrix;
  12.  
  13. void output(int& n, int& m, matrix& arr, int& flagx, int kk, double& x);
  14.  
  15. void readfrombin(matrix& arr, int& n, int& m, int &flager1, int &flager2);
  16.  
  17. void poisk(matrix& arr, double& x, int& n, int& m, int& flagx, int& kk);
  18.  
  19. int read(matrix& arr, int n, int m);
  20.  
  21. int vizov(matrix& arr, int n, int m);
  22.  
  23. void random(matrix& arr, int n, int m);
  24.  
  25. void razmer(int& n, int& m, int obr, int i, matrix& arr);
  26.  
  27. int print_variant(int& count);
  28.  
  29. void printTable(matrix& arr, int n, int m);
  30.  
  31. void obrabotka(matrix& arr, int n, int m);
  32.  
  33. void deletemas(matrix& arr, int& n);
  34.  
  35. void opisanie();
  36.  
  37. void Menu();
  38.  
  39.  
  40. int main()
  41. {
  42. setlocale(LC_ALL, "Russian");
  43. matrix arr;
  44. int n, m, op = -1;
  45. int kk = 0; int z2;
  46. int flager1 = 0; int flager2 = 0;
  47. int varik = -1, varik2 = -1, flag = 0;
  48. int count = -54;
  49. int flagg = 0;
  50. int y = 0, i = 0;
  51. double sum, p; double x = 1;
  52. int flagx = 0;
  53. int obr;
  54. int flagy = 0;
  55. int raz = 0;
  56. obr = -1;
  57. p = 0; sum = 0; int vibor = -56;
  58. while (vibor != 6)
  59. {
  60. system("cls");
  61. Menu();
  62. vibor = print_variant(count);
  63. switch (vibor) {
  64. case 0:
  65. opisanie();
  66. break;
  67. case 1:
  68. if (obr == 1)
  69. {
  70. printf("Будут введены новые размеры и будет создана новая матрица, старая удалится\n");
  71. printf("Хотите ли вы сохранить имеющийся результат в файл?\n");
  72. printf("1) Да 2) Нет \n");
  73. while (varik != 1 && varik != 2)
  74. {
  75. z2 = scanf_s("%d", &varik);
  76. while (z2 != 1)
  77. {
  78. int flagz2 = 0;
  79. z2 = scanf_s("%d", &varik);
  80. while (getchar() != '\n')
  81. if (z2 != 1)
  82. flagz2 = 1;
  83. if (flagz2 == 1)
  84. printf("Было введено некорректное значение, введите цифру\n");
  85. }
  86. if (varik == 2)
  87. {
  88. deletemas(arr, n);
  89. razmer(n, m, obr, i, arr);
  90. }
  91. else
  92. if (varik == 1)
  93. {
  94. output(n, m, arr, flagx, kk, x);
  95. deletemas(arr, n);
  96. razmer(n, m, obr, i, arr);
  97. }
  98. }
  99. }
  100. else
  101. {
  102. razmer(n, m, obr, i, arr);
  103. raz = 1;
  104. }
  105. obr = -1;
  106. flag = 0;
  107. break;
  108. case 2:
  109. if (raz == 1)
  110. {
  111. if (vizov(arr, n, m) == 1)
  112. {
  113. printf("Не удалось создать динамический массив\n");
  114. return 0;
  115. }
  116. printf("Будет введена матрица\n");
  117. printf("Как вы хотите заполнить матрицу?\n");
  118. printf("Введите 1, если случайным образом\n");
  119. printf("Введите 2, если хотите ввести её\n");
  120. printf("Введите 3, если хотите считать её из файла\n");
  121. while (op != 1 && op != 2 && op != 3)
  122. {
  123. int z3 = scanf_s("%d", &op);
  124. while (z3 != 1)
  125. {
  126. int flagz3 = 0;
  127. z3 = scanf_s("%d", &op);
  128. while (getchar() != '\n')
  129. if (z3 != 1)
  130. flagz3 = 1;
  131. if (flagz3 == 1)
  132. printf("Было введено некорректное значение, введите цифру\n");
  133. }
  134. if (op == 2)
  135. {
  136. if (read(arr, n, m) == 1)
  137. {
  138. obr = 0;
  139. printf("Значения введены некорректно, повторите попытку\n");
  140. op = -1;
  141. flagg = 1;
  142. break;
  143. }
  144. else
  145. obr = 1;
  146. }
  147. else if (op == 1)
  148. {
  149. random(arr, n, m);
  150. obr = 1;
  151. flagg = 1;
  152. }
  153. else if (op == 3)
  154. {
  155. readfrombin(arr, n, m, flager1, flager2);
  156. if (flager2 == 1 && flager1 == 0)
  157. {
  158. printf("В файле в значениях элементов матрицы было неккоректное значение\n");
  159. flager2 = 0; flager1 = 0;
  160. }
  161. else
  162. if (flager1 == 1)
  163. {
  164. printf("Нам не хватило элементов матрицы в файле\n");
  165. flager2 = 0; flager1 = 0;
  166. }
  167. else
  168. {
  169. obr = 1;
  170. flagg = 1;
  171. }
  172. }
  173. }
  174. }
  175. else
  176. printf("Невозможно создать матрицу, т.к. не были заданы размеры\n");
  177. op = -1;
  178. break;
  179. case 3:
  180. if (obr == -1)
  181. printf("Сперва сформируйте матрицу, чтобы её обработать\n");
  182. else
  183. {
  184. printf("Сейчас ваша матрица будет обработана...\n");
  185. printf("Ваша исходная матрица\n");
  186. printf("\n");
  187. printTable(arr, n, m);
  188. printf("\n");
  189. printf("Матрица после обработки\n");
  190. obrabotka(arr, n, m);
  191. printf("\n");
  192. printTable(arr, n, m);
  193. flag = 1;
  194. }
  195. break;
  196. case 4:
  197. if (obr == -1)
  198. printf("невозможно, таблица не была создана\n");
  199. else
  200. if (flag == 0)
  201. {
  202. printf("Ваша данная матрица ещё не была обработана. Вот, как она выглядит\n");
  203. printTable(arr, n, m);
  204. }
  205. else
  206. {
  207. poisk(arr, x, n, m, flagx, kk);
  208. printTable(arr, n, m);
  209. }
  210. break;
  211. case 5:
  212. if (obr == -1)
  213. printf("Невозможно, таблица не была создана\n");
  214. else
  215. output(n, m, arr, flagx, kk, x);
  216. break;
  217. }
  218. system("pause");
  219. if (vibor == 6)
  220. {
  221. if (obr == 1)
  222. {
  223. printf("Хотите ли вы сохранить имеющийся результат перед выходом?\n");
  224. printf("1) Да 2) Нет \n");
  225. while (varik2 != 1 && varik2 != 2)
  226. {
  227. int z4 = scanf_s("%d", &varik2);
  228. while (z4 != 1)
  229. {
  230. int flagz4 = 0;
  231. z4 = scanf_s("%d", &varik2);
  232. while (getchar() != '\n')
  233. if (z4 != 1)
  234. flagz4 = 1;
  235. if (flagz4 == 1)
  236. printf("Было введено некорректное значение, введите цифру\n");
  237. }
  238. if (varik2 == 2)
  239. {
  240. if (obr == 1 or raz == 1)
  241. deletemas(arr, n);
  242. system("cls");
  243. return 0;
  244. }
  245. else
  246. if (varik2 == 1)
  247. {
  248. output(n, m, arr, flagx, kk, x);
  249. flagy = 1;
  250. }
  251. }
  252. }
  253. }
  254. }
  255. if (flagy == 1)
  256. deletemas(arr, n);
  257. return 0;
  258. }
  259.  
  260. int read(matrix& arr, int n, int m) // ручной ввод матрицы
  261. {
  262. printf("Введите вашу матрицу\n");
  263. for (int i = 0; i < n; i++)
  264. for (int j = 0; j < m; j++)
  265. {
  266. if (scanf_s("%lf", &arr[i][j]) == 0)
  267. return 1;
  268. }
  269. return 0;
  270. }
  271.  
  272. void printTable(matrix& arr, int n, int m) // выводим матрицу
  273. {
  274. for (int i = 0; i < n; i++)
  275. for (int j = 0; j < m; j++)
  276. {
  277. printf("%10.0lf", arr[i][j]);
  278. if (j == m - 1)
  279. printf("\n");
  280. }
  281. }
  282.  
  283. void Menu() // меню
  284. {
  285. printf("********| Выберите предложенные № |********\n");
  286. printf("-------------------------------------------\n");
  287. printf("* 0) Описание программы *\n");
  288. printf("-------------------------------------------\n");
  289. printf("* 1) Задание размеров матрицы *\n");
  290. printf("-------------------------------------------\n");
  291. printf("* 2) Заполнение матрицы *\n");
  292. printf("-------------------------------------------\n");
  293. printf("* 3) Обработка матрицы *\n");
  294. printf("-------------------------------------------\n");
  295. printf("* 4) Вывод текущего результата *\n");
  296. printf("-------------------------------------------\n");
  297. printf("* 5) Сохранить текущую результат в файл *\n");
  298. printf("-------------------------------------------\n");
  299. printf("* 6) Выход из меню *\n");
  300. printf("*******************************************\n");
  301. }
  302.  
  303. int print_variant(int& count) // номер варианта в меню
  304. {
  305. int z = -1;
  306. while (count != 6)
  307. {
  308. while (z != 1)
  309. {
  310. int flagz = 0;
  311. z = scanf_s("%d", &count);
  312. while (getchar() != '\n')
  313. if (z != 1)
  314. flagz = 1;
  315. if (flagz == 1)
  316. printf("Было введено некорректное значение, введите цифру\n");
  317. }
  318. return count;
  319. }
  320. }
  321.  
  322. void opisanie() // описание
  323. {
  324. printf("Программа создает матрицу. Матрица сортируется в порядке возрастания\n");
  325. printf("Вводится число и проверяется, содержится ли оно в матрице. Если да, то показывает его местоположение\n\n");
  326. }
  327.  
  328. void random(matrix& arr, int n, int m) // рандомноние задание матрицы
  329. {
  330. srand(time(nullptr));
  331. for (int i = 0; i < n; i++)
  332. for (int j = 0; j < m; j++)
  333. arr[i][j] = rand() % (50 - 1) + 1;
  334. }
  335.  
  336. int vizov(matrix& arr, int n, int m) // динамика
  337. {
  338. if (n > 0 && m > 0)
  339. {
  340. arr = new double* [n];
  341. for (int i = 0; i < n; i++)
  342. arr[i] = new double[m];
  343. return 0;
  344. }
  345. else
  346. return 1;
  347. }
  348.  
  349. void razmer(int& n, int& m, int obr, int i, matrix& arr) // задание размера для динамики
  350. {
  351. n = -56; m = -56;
  352. while (n < 1)
  353. {
  354. printf("Введите размер строки\n");
  355. int z5 = scanf_s("%d", &n);
  356. while (z5 != 1)
  357. {
  358. int flagz5 = 0;
  359. z5 = scanf_s("%d", &n);
  360. while (getchar() != '\n')
  361. if (z5 != 1)
  362. flagz5 = 1;
  363. if (flagz5 == 1)
  364. printf("Было введено некорректное значение, попробуйте ещё раз\n");
  365. }
  366. }
  367. while (m < 1)
  368. {
  369. printf("Введите размер столбца\n");
  370. int z6 = scanf_s("%d", &m);
  371. while (z6 != 1)
  372. {
  373. int flagz6 = 0;
  374. z6 = scanf_s("%d", &m);
  375. while (getchar() != '\n')
  376. if (z6 != 1)
  377. flagz6 = 1;
  378. if (flagz6 == 1)
  379. printf("Было введено некорректное значение, попробуйте ещё раз\n");
  380. }
  381. }
  382. }
  383.  
  384. void deletemas(matrix& arr, int& n) // очистить память
  385. {
  386. for (int i = 0; i < n; i++)
  387. delete[] arr[i];
  388. delete[] arr;
  389.  
  390. }
  391.  
  392. void obrabotka(matrix& arr, int n, int m) // сортируем матрицу
  393. {
  394. for (int o = 0; o < n; o++)
  395. for (int p = 0; p < m; p++)
  396. for (int i = 0; i < n; i++)
  397. for (int j = 0; j < m; j++)
  398. if (arr[i][j] > arr[o][p])
  399. swap(arr[i][j], arr[o][p]);
  400. }
  401.  
  402. void output(int& n, int& m, matrix& arr, int& flagx, int kk, double& x) // ввод в файл
  403. {
  404. FILE* S; int errf;
  405. char namef[100];
  406. printf("Введите, как будет называться файл, куда вы сохраните данные\n");
  407. scanf_s("%100s", namef, 100);
  408. errf = fopen_s(&S, namef, "w");
  409. while (errf != NULL)
  410. {
  411. printf("Введите корректное имя файла\n");
  412. errf = fopen_s(&S, namef, "w");
  413. }
  414. if (S != nullptr)
  415. {
  416. if (flagx == 1)
  417. {
  418. if (kk == 0)
  419. fprintf(S, "Увы и ах, в матрице данного числа не обнаружено\n");
  420. else
  421. {
  422. if (kk == 1)
  423. {
  424. for (int i = 0; i < n; i++)
  425. for (int j = 0; j < m; j++)
  426. if (arr[i][j] == x)
  427. fprintf(S, "Такое число было обнаружено, оно находится в %d строке и %d столбце\n", i + 1, j + 1);
  428. }
  429. else
  430. if (kk > 1)
  431. {
  432. fprintf(S, "Такие числа были обнаружены в данных местах: \n");
  433. for (int i = 0; i < n; i++)
  434. for (int j = 0; j < m; j++)
  435. if (arr[i][j] == x)
  436. fprintf(S, "%d строка и %d столбец\n", i + 1, j + 1);
  437. }
  438. }
  439. for (int i = 0; i < n; i++)
  440. {
  441. fprintf(S, "%s", "\n");
  442. for (int j = 0; j < m; j++)
  443. fprintf(S, "%10.0lf ", arr[i][j]);
  444. }
  445. }
  446. else
  447. {
  448. for (int i = 0; i < n; i++)
  449. {
  450. fprintf(S, "%s", "\n");
  451. for (int j = 0; j < m; j++)
  452. fprintf(S, "%10.0lf ", arr[i][j]);
  453. }
  454. }
  455. }
  456. else
  457. printf("Был некорректно открыт файл\n");
  458. fclose(S);
  459. }
  460.  
  461. void poisk(matrix& arr, double& x, int& n, int& m, int& flagx, int& kk) // ищем сколько таких чисел в матрице
  462. {
  463. kk = 0;
  464. printf("Введите, какое число вы хотите найти в этой матрице\n");
  465. scanf_s("%lf", &x);
  466. for (int i = 0; i < n; i++)
  467. for (int j = 0; j < m; j++)
  468. if (arr[i][j] == x)
  469. kk++;
  470. if (kk == 0)
  471. printf("Увы и ах, в матрице данного числа не обнаружено\n");
  472. else
  473. if (kk == 1)
  474. {
  475. for (int i = 0; i < n; i++)
  476. for (int j = 0; j < m; j++)
  477. if (arr[i][j] == x)
  478. printf("Такое число было обнаружено, оно находится в %d строке и %d столбце\n", i + 1, j + 1);
  479. }
  480. else
  481. if (kk > 1)
  482. {
  483. printf("Такие числа были обнаружены в данных местах: \n");
  484. for (int i = 0; i < n; i++)
  485. for (int j = 0; j < m; j++)
  486. if (arr[i][j] == x)
  487. printf("%d строка и %d столбец\n", i + 1, j + 1);
  488. }
  489. flagx = 1;
  490. }
  491.  
  492. void readfrombin(matrix &arr, int &n, int &m, int &flager1, int &flager2) // чтение из бинарного файла
  493. {
  494. FILE* S2; int errf;
  495. char namef2[100]; int errsim2;
  496. printf("Введите, как будет называться бинарный файл, откуда вы возьмете данные\n");
  497. scanf_s("%100s", namef2, 100);
  498. errf = fopen_s(&S2, namef2, "rb");
  499. while (errf != NULL)
  500. {
  501. printf("Введите корректное имя файла\n");
  502. scanf_s("%100s", namef2, 100);
  503. errf = fopen_s(&S2, namef2, "rb");
  504. }
  505. for (int i = 0; i < n; i++)
  506. {
  507. for (int j = 0; j < m; j++)
  508. {
  509. errsim2 = fscanf_s(S2, "%lf", &arr[i][j]);
  510. if (errsim2 == EOF)
  511. flager1 = 1;
  512. if (errsim2 != 1)
  513. flager2 = 1;
  514. }
  515. }
  516. fclose(S2);
  517. }
RAW Paste Data