Advertisement
palenda21

11/12B

Apr 27th, 2020
366
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.92 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <string.h>
  4. #include <io.h>
  5.  
  6. using namespace std;
  7.  
  8. struct worker
  9. {
  10.     char surname[50];
  11.     int birthdate;
  12.     int workdate;
  13. };
  14.  
  15. void create();  //Создать файл
  16. void vvod();    //Ввести список
  17. void chit();    //Прочитать список
  18. void reze();    //Вывести результат на экран
  19. void rezf();    //Вывести результат в файл
  20. int menu();    //Меню
  21.  
  22. int main()
  23. {
  24.     setlocale(LC_ALL, "rus");
  25.     while (true) {
  26.         switch (menu()) {
  27.         case 1: create(); cout << "Файл создан!" << endl; break;
  28.         case 2: vvod(); break;
  29.         case 3: chit(); break;
  30.         case 4: reze(); break;
  31.         case 5: rezf(); cout << "Результат записан в текстовый файл! " << endl; break;
  32.         case 6: quicksort(); break;
  33.         case 7: quicksort_rec(); break;
  34.         case 8: insertionsort(); break;
  35.         case 9: search(); break;
  36.         case 10: exit(0);
  37.         default: cout << "Выберите правильный вариант";
  38.         }
  39.     }
  40. }
  41.  
  42. int menu()
  43. {
  44.     cout << "Выбирайте:" << endl;
  45.     cout << "1. Создать файл" << endl;
  46.     cout << "2. Записать данные в файл" << endl;
  47.     cout << "3. Открыть файл и прочитать данные" << endl;
  48.     cout << "4. Вывести результат на экран" << endl;
  49.     cout << "5. Вывести результат в текстовый файл" << endl;
  50.     cout << "6. Сортировка QuickSort" << endl;
  51.     cout << "7. Рекурсивная сортировка QuickSort" << endl;
  52.     cout << "8. Сортировка вставкой" << endl;
  53.     cout << "9. Интерполяционный поиск" << endl;
  54.     cout << "10. Выйти из программы" << endl;
  55.     int i; cin >> i; cin.ignore();
  56.     return i;
  57. }
  58. void create() {
  59.     FILE* fl;
  60.     if ((fl = fopen("lab9", "wb")) == NULL)
  61.     {
  62.         cout << "Файл не создан" << endl;
  63.     }
  64.     fclose(fl);
  65. }
  66.  
  67. void vvod()
  68. {
  69.     FILE* fl;
  70.     worker *rabotnik;
  71.     if ((fl = fopen("lab9", "ab")) == NULL)
  72.          if ((fl = fopen("lab9", "wb")) == NULL)
  73.          {
  74.              cout << "Файл не создан" << endl;
  75.              return;
  76.          }
  77.     int n;
  78.     cout << "Введите количество работников: ";
  79.     cin >> n;
  80.     char h;
  81.     do
  82.     {
  83.         cout << "Введите фамилию работника:  ";
  84.         cin >> rabotnik.surname;
  85.         cout << "Введите дату рождения работника: ";
  86.         cin >> rabotnik.birthdate;
  87.         cout << "Введите дату первого рабочего дня работника: ";
  88.         cin >> rabotnik.workdate;
  89.         cout << endl;
  90.         fwrite (&rabotnik, sizeof(worker), 1, fl);
  91.         cout << endl << "Prodolzhit? (yes/no)";
  92.         cin >> h;
  93.         cout << endl;
  94.     }
  95.     while (h == 'yes');
  96.      fclose(fl);
  97.     }
  98.  
  99. void chit()
  100. {
  101.     FILE* fl;
  102.     if ((fl = fopen("lab9", "rb")) == NULL)
  103.     {
  104.         cout << "Файл не создан" << endl;
  105.     }
  106.     int n; n = _filelength(_fileno(fl)) / sizeof(worker);
  107.     for (int i = 0; i < n; i++)
  108.     {
  109.         cout << "Фамилия работника:  " << rabotnik.surname;
  110.         cout << "Дата рождения работника: " << rabotnik.birthdate;
  111.         cout << "Дата первого рабочего дня работника: " << rabotnik.workdate;
  112.         cout << endl;
  113.     }
  114.     fclose(fl);
  115. }
  116.  
  117. void reze()
  118. {
  119.     FILE* fl;
  120.     worker *rabotnik;
  121.     if ((fl = fopen("lab9", "rb+")) == NULL)
  122.     {
  123.         cout << "Файл не создан" << endl;
  124.     }
  125.     int n;
  126.     n = _filelength(_fileno(fl)) / sizeof(worker);
  127.     for (int i = 0; i < n; i++)
  128.      {
  129.          fread (&rabotnik, sizeof(worker), n, fl);
  130.          if (rabotnik.birthdate < 1980)
  131.      {
  132.          cout << "Работник, родившийся до 1980 года: " << rabotnik.surname << endl;
  133.          cout << "Дата его рождения: " << rabotnik.birthdate << endl;
  134.          cout << "Дата его первого рабочего дня: " << rabotnik.workdate;
  135.          cout << endl;
  136.      }
  137.         else cout << "> 1980";
  138.      }
  139.     fclose(fl);
  140. }
  141.  
  142. void rezf()
  143. {
  144.     FILE* fl;
  145.     worker *rabotnik;
  146.     if ((fl = fopen("lab9", "ab+")) == NULL)
  147.     {
  148.         cout << "Файл не создан" << endl;
  149.     }
  150.     int n;
  151.     n = _filelength(_fileno(fl)) / sizeof(worker);
  152.     for (int i = 0; i < n; i++)
  153.      {
  154.          fread (&rabotnik, sizeof(worker), n, fl);
  155.          if (rabotnik.birthdate < 1980)
  156.      {
  157.          cout << "Работник, родившийся до 1980 года: " << rabotnik.surname << endl;
  158.          cout << "Дата его рождения: " << rabotnik.birthdate << endl;
  159.          cout << "Дата его первого рабочего дня: " << rabotnik.workdate;
  160.          cout << endl;
  161.      }
  162.         else cout << "> 1980";
  163.      }
  164.     fclose(fl);
  165. }
  166.  
  167.  
  168. void quicksort (worker *x, int n)
  169. {
  170.     FILE* fl;
  171.         if ((fl = fopen("lab 9", "rb")) == NULL) {
  172.             cout << "Файл не создан";
  173.     return;
  174.         }
  175.    
  176.     struct
  177.     {
  178.         int l;
  179.         int r;
  180.     } arr[20];
  181.    
  182.     int i, j, left, right, s = 0;
  183.     int p;
  184.     worker t;
  185.     arr[s].l = 0; arr[s].r = n - 1;
  186.       while (s != -1)
  187.     {
  188.       left = arr[s].l;
  189.       right = arr[s].r;
  190.       s--;
  191.       while (left < right)
  192.     {
  193.       i = left;
  194.       j = right;
  195.       p = x[(left + right) / 2].workdate;
  196.       while (i <= j)
  197.     {
  198.       while (x[i].workdate < p)
  199.         i++;
  200.       while (x[j].workdate > p)
  201.         j--;
  202.         if (i <= j)
  203.     {
  204.       t = x[i];
  205.       x[i] = x[j];
  206.       x[j] = t;
  207.       i++;
  208.       j--;
  209.     }
  210.      }
  211.       if ((j - left) < (right - i))
  212.     {
  213.       if (i < right)
  214.     {
  215.       s++;
  216.       arr[s].l = i;
  217.       arr[s].r = right;
  218.     }
  219.       right = j;
  220.     }
  221.       else
  222.     {
  223.       if (left < j)
  224.     {
  225.       s++;
  226.       arr[s].l = left;
  227.       arr[s].r = j;
  228.     }
  229.       left = i;
  230.     }
  231.  
  232. }
  233.     }
  234.     for (int i = 0; i < n; i++)
  235.     {
  236.     cout << "    " << a[i].workdate << "    ";
  237.     }
  238.     cout << endl << endl;
  239.     }
  240. }
  241.  
  242. void sort(worker* arr, int left, int right) {
  243.     int i, j;
  244.     i = left;
  245.     j = right;
  246.     worker temp;
  247.     double x;
  248.     x = arr[(i + j) / 2].workdate;
  249.     do
  250.     {
  251.         while (arr[i].workdate < x)
  252.             i++;
  253.         while (arr[j].workdate > x)
  254.             j--;
  255.       if (i <= j)
  256. {
  257.             temp = arr[i];
  258.             arr[i] = arr[j];
  259.             arr[j] = temp;
  260.             i++;
  261.         j--; }
  262.     }
  263.     while (i <= j);
  264.     if (left < j)
  265.         sort(arr, left, j);
  266. if (i < right)
  267.         sort(arr, i, right);
  268. }
  269.  
  270. void quicksort_rec()
  271. {
  272.     FILE* fl;
  273.     if ((fl = fopen("lab9", "rb")) == NULL) {
  274.         cout << "Файл не создан";
  275.     return; }
  276.     int n = 0, i;
  277.     n = _filelength(_fileno(fl)) / sizeof(worker);
  278.     worker* arr = new countries[n];
  279.     fread(arr, sizeof(worker), n, fl);
  280.     sort(arr, 0,  n - 1);
  281.     for (i = 0; i < n; i++)
  282.       cout << arr[i].surname << "(" << arr[i].workdate << ")" << " ";
  283.     delete[]arr;
  284.     fclose(fl);
  285. }
  286.  
  287.  
  288. void insertionsort (worker mass[], int n)
  289. {
  290.     FILE* fl;
  291.     if ((fl = fopen("lab9", "rb")) == NULL) {
  292.         cout << "Файл не создан";
  293.     return; }
  294.     int n = 0;
  295.        n = _filelength(_fileno(fl)) / sizeof(worker);
  296.        worker* arr = new countries[n];
  297.        fread(arr, sizeof(worker), n, fl);
  298.     int i, j;
  299.     worker t;
  300.     for (i = 1; i < n; i++)
  301.     {
  302.         t = mass[i];
  303.         for (j = i - 1; j >= 0 && t.workdate < mass[j].workdate; j--)
  304.         {
  305.         mass[j + 1] = mass[j];
  306.         }
  307.         mass[j + 1] = t;
  308.     }
  309.     for (i = 0; i < n; i++)
  310.       cout << arr[i].surname << "(" << arr[i].workdate << ")" << " ";
  311.     delete[] mass;
  312.     fclose(fl);
  313. }
  314.  
  315. void search()
  316. {
  317.     FILE* fl;
  318.        if ((fl = fopen("lab9", "rb")) == NULL) {
  319.            cout << "Файл не создан";
  320.        return; }
  321.        int n = 0;
  322.           n = _filelength(_fileno(fl)) / sizeof(worker);
  323.           worker* arr = new countries[n];
  324.           fread(arr, sizeof(worker), n, fl);
  325.     int i = 0, j = n - 1, m, x = 1999;
  326.     while (i < j)
  327.     {
  328.         if (arr[i].workdate == arr[j].workdate)
  329.             if (arr[i].workdate == x)
  330.                 return i;
  331.             else return -1;
  332.         m = i + (j - i) * (x - arr[i]) / (arr[j] - arr[i]);
  333.         if (arr[m].workdate == x)
  334.             return m;
  335.         else
  336.             if (x > arr[m].workdate)
  337.                 i = m + 1;
  338.             else j = m - 1;
  339.         }
  340.     cout << "Здесь нет работников с 1999 года" << endl;
  341.     delete[]arr;
  342.     fclose(fl);
  343. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement