Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <iostream>
- #include <string.h>
- #include <io.h>
- using namespace std;
- struct worker
- {
- char surname[50];
- int birthdate;
- int workdate;
- };
- void create(); //Создать файл
- void vvod(); //Ввести список
- void chit(); //Прочитать список
- void reze(); //Вывести результат на экран
- void rezf(); //Вывести результат в файл
- int menu(); //Меню
- int main()
- {
- setlocale(LC_ALL, "rus");
- while (true) {
- switch (menu()) {
- case 1: create(); cout << "Файл создан!" << endl; break;
- case 2: vvod(); break;
- case 3: chit(); break;
- case 4: reze(); break;
- case 5: rezf(); cout << "Результат записан в текстовый файл! " << endl; break;
- case 6: quicksort(); break;
- case 7: quicksort_rec(); break;
- case 8: insertionsort(); break;
- case 9: search(); break;
- case 10: exit(0);
- default: cout << "Выберите правильный вариант";
- }
- }
- }
- int menu()
- {
- cout << "Выбирайте:" << endl;
- cout << "1. Создать файл" << endl;
- cout << "2. Записать данные в файл" << endl;
- cout << "3. Открыть файл и прочитать данные" << endl;
- cout << "4. Вывести результат на экран" << endl;
- cout << "5. Вывести результат в текстовый файл" << endl;
- cout << "6. Сортировка QuickSort" << endl;
- cout << "7. Рекурсивная сортировка QuickSort" << endl;
- cout << "8. Сортировка вставкой" << endl;
- cout << "9. Интерполяционный поиск" << endl;
- cout << "10. Выйти из программы" << endl;
- int i; cin >> i; cin.ignore();
- return i;
- }
- void create() {
- FILE* fl;
- if ((fl = fopen("lab9", "wb")) == NULL)
- {
- cout << "Файл не создан" << endl;
- }
- fclose(fl);
- }
- void vvod()
- {
- FILE* fl;
- worker *rabotnik;
- if ((fl = fopen("lab9", "ab")) == NULL)
- if ((fl = fopen("lab9", "wb")) == NULL)
- {
- cout << "Файл не создан" << endl;
- return;
- }
- int n;
- cout << "Введите количество работников: ";
- cin >> n;
- char h;
- do
- {
- cout << "Введите фамилию работника: ";
- cin >> rabotnik.surname;
- cout << "Введите дату рождения работника: ";
- cin >> rabotnik.birthdate;
- cout << "Введите дату первого рабочего дня работника: ";
- cin >> rabotnik.workdate;
- cout << endl;
- fwrite (&rabotnik, sizeof(worker), 1, fl);
- cout << endl << "Prodolzhit? (yes/no)";
- cin >> h;
- cout << endl;
- }
- while (h == 'yes');
- fclose(fl);
- }
- void chit()
- {
- FILE* fl;
- if ((fl = fopen("lab9", "rb")) == NULL)
- {
- cout << "Файл не создан" << endl;
- }
- int n; n = _filelength(_fileno(fl)) / sizeof(worker);
- for (int i = 0; i < n; i++)
- {
- cout << "Фамилия работника: " << rabotnik.surname;
- cout << "Дата рождения работника: " << rabotnik.birthdate;
- cout << "Дата первого рабочего дня работника: " << rabotnik.workdate;
- cout << endl;
- }
- fclose(fl);
- }
- void reze()
- {
- FILE* fl;
- worker *rabotnik;
- if ((fl = fopen("lab9", "rb+")) == NULL)
- {
- cout << "Файл не создан" << endl;
- }
- int n;
- n = _filelength(_fileno(fl)) / sizeof(worker);
- for (int i = 0; i < n; i++)
- {
- fread (&rabotnik, sizeof(worker), n, fl);
- if (rabotnik.birthdate < 1980)
- {
- cout << "Работник, родившийся до 1980 года: " << rabotnik.surname << endl;
- cout << "Дата его рождения: " << rabotnik.birthdate << endl;
- cout << "Дата его первого рабочего дня: " << rabotnik.workdate;
- cout << endl;
- }
- else cout << "> 1980";
- }
- fclose(fl);
- }
- void rezf()
- {
- FILE* fl;
- worker *rabotnik;
- if ((fl = fopen("lab9", "ab+")) == NULL)
- {
- cout << "Файл не создан" << endl;
- }
- int n;
- n = _filelength(_fileno(fl)) / sizeof(worker);
- for (int i = 0; i < n; i++)
- {
- fread (&rabotnik, sizeof(worker), n, fl);
- if (rabotnik.birthdate < 1980)
- {
- cout << "Работник, родившийся до 1980 года: " << rabotnik.surname << endl;
- cout << "Дата его рождения: " << rabotnik.birthdate << endl;
- cout << "Дата его первого рабочего дня: " << rabotnik.workdate;
- cout << endl;
- }
- else cout << "> 1980";
- }
- fclose(fl);
- }
- void quicksort (worker *x, int n)
- {
- FILE* fl;
- if ((fl = fopen("lab 9", "rb")) == NULL) {
- cout << "Файл не создан";
- return;
- }
- struct
- {
- int l;
- int r;
- } arr[20];
- int i, j, left, right, s = 0;
- int p;
- worker t;
- arr[s].l = 0; arr[s].r = n - 1;
- while (s != -1)
- {
- left = arr[s].l;
- right = arr[s].r;
- s--;
- while (left < right)
- {
- i = left;
- j = right;
- p = x[(left + right) / 2].workdate;
- while (i <= j)
- {
- while (x[i].workdate < p)
- i++;
- while (x[j].workdate > p)
- j--;
- if (i <= j)
- {
- t = x[i];
- x[i] = x[j];
- x[j] = t;
- i++;
- j--;
- }
- }
- if ((j - left) < (right - i))
- {
- if (i < right)
- {
- s++;
- arr[s].l = i;
- arr[s].r = right;
- }
- right = j;
- }
- else
- {
- if (left < j)
- {
- s++;
- arr[s].l = left;
- arr[s].r = j;
- }
- left = i;
- }
- }
- }
- for (int i = 0; i < n; i++)
- {
- cout << " " << a[i].workdate << " ";
- }
- cout << endl << endl;
- }
- }
- void sort(worker* arr, int left, int right) {
- int i, j;
- i = left;
- j = right;
- worker temp;
- double x;
- x = arr[(i + j) / 2].workdate;
- do
- {
- while (arr[i].workdate < x)
- i++;
- while (arr[j].workdate > x)
- j--;
- if (i <= j)
- {
- temp = arr[i];
- arr[i] = arr[j];
- arr[j] = temp;
- i++;
- j--; }
- }
- while (i <= j);
- if (left < j)
- sort(arr, left, j);
- if (i < right)
- sort(arr, i, right);
- }
- void quicksort_rec()
- {
- FILE* fl;
- if ((fl = fopen("lab9", "rb")) == NULL) {
- cout << "Файл не создан";
- return; }
- int n = 0, i;
- n = _filelength(_fileno(fl)) / sizeof(worker);
- worker* arr = new countries[n];
- fread(arr, sizeof(worker), n, fl);
- sort(arr, 0, n - 1);
- for (i = 0; i < n; i++)
- cout << arr[i].surname << "(" << arr[i].workdate << ")" << " ";
- delete[]arr;
- fclose(fl);
- }
- void insertionsort (worker mass[], int n)
- {
- FILE* fl;
- if ((fl = fopen("lab9", "rb")) == NULL) {
- cout << "Файл не создан";
- return; }
- int n = 0;
- n = _filelength(_fileno(fl)) / sizeof(worker);
- worker* arr = new countries[n];
- fread(arr, sizeof(worker), n, fl);
- int i, j;
- worker t;
- for (i = 1; i < n; i++)
- {
- t = mass[i];
- for (j = i - 1; j >= 0 && t.workdate < mass[j].workdate; j--)
- {
- mass[j + 1] = mass[j];
- }
- mass[j + 1] = t;
- }
- for (i = 0; i < n; i++)
- cout << arr[i].surname << "(" << arr[i].workdate << ")" << " ";
- delete[] mass;
- fclose(fl);
- }
- void search()
- {
- FILE* fl;
- if ((fl = fopen("lab9", "rb")) == NULL) {
- cout << "Файл не создан";
- return; }
- int n = 0;
- n = _filelength(_fileno(fl)) / sizeof(worker);
- worker* arr = new countries[n];
- fread(arr, sizeof(worker), n, fl);
- int i = 0, j = n - 1, m, x = 1999;
- while (i < j)
- {
- if (arr[i].workdate == arr[j].workdate)
- if (arr[i].workdate == x)
- return i;
- else return -1;
- m = i + (j - i) * (x - arr[i]) / (arr[j] - arr[i]);
- if (arr[m].workdate == x)
- return m;
- else
- if (x > arr[m].workdate)
- i = m + 1;
- else j = m - 1;
- }
- cout << "Здесь нет работников с 1999 года" << endl;
- delete[]arr;
- fclose(fl);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement