SHARE
TWEET

Untitled

a guest Dec 8th, 2019 98 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
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top