Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include<iostream>
- #include<fstream>
- #include<locale>
- #include <Windows.h>
- #include <string>
- #include <iomanip>
- using namespace std;
- ifstream f;
- FILE* D;
- ofstream g;
- struct sp
- {
- string* Name = new string[3];
- int Date;
- float Atest;
- int* Score = new int[3];
- };
- struct Point
- {
- sp data;
- Point *left;
- Point *right;
- };
- Point* first(sp d)//формирование первого элемента дерева
- {
- Point* p = new Point;
- string a;
- p->data = d;
- p->left = 0;
- p->right = 0;
- return p;
- }
- //добавление элемента d в дерево поиска
- Point* Add(Point*root, sp d)
- {
- Point*p = root;//корень дерева
- Point*r = new(Point);//флаг для проверки существования элемента d
- //в дереве
- bool ok = false;
- while (p&&!ok)
- {
- r = p;
- if (d.Name == p->data.Name)ok = true; //элемент уже существует
- else
- if (d.Name<p->data.Name)p = p->left;
- //пойти в левое поддерево
- else p = p->right;//пойти в правое поддерево
- }
- if (ok) return p; //найдено, не добавляем
- //создаем узел
- Point* New_point = new Point();//выделили память
- New_point->data = d;
- New_point->left = 0;
- New_point->right = 0;
- // если d<r->key, то добавляем его в левое поддерево
- if (d.Name<r->data.Name)r->left = New_point;
- // если d>r->key, то добавляем его в правое поддерево
- else r->right = New_point;
- return New_point;
- }
- void print_Tree(Point* p, int level){
- if (p){
- print_Tree(p->left, level + 1);
- for (int i = 0; i < level; i++)cout << " ";
- cout << p->data.Name << endl;
- print_Tree(p->right, level + 1);
- }
- }
- void del(Point* &r, Point* &q)
- {
- if (r->right != NULL) del(r->right, q);
- else
- {
- q->data = r->data;
- q = r;
- r = r->left;
- }
- }
- void Delete(Point* &Tree)
- // удаление узла
- {
- Point* q;
- q = Tree;
- if (q->right == NULL) Tree = q->left;
- else if (q->left == NULL) Tree = q->right;
- else del(q->left, q);
- delete(q);
- }
- void delete_node(Point* &Tree, float t)
- // удаление узла с заданной продолжительностью
- {
- Point* p = Tree;
- if (Tree)
- {
- delete_node(Tree->right, t);
- delete_node(Tree->left, t);
- if (Tree->data.Atest <= t) Delete(Tree);
- }
- }
- void print_Alf(Point *p){
- if (p)
- {
- print_Alf(p->left);
- cout << left << setw(8) << p->data.Name[0] << " " << setw(10) << p->data.Name[1] << " " << setw(10) << p->data.Name[2] << " " << setw(15) << p->data.Date << " " << setw(16) << p->data.Atest << " " << endl;
- print_Alf(p->right);
- }
- }
- void Fuf(Point *p){
- if (p){
- Fuf(p->left);
- SetConsoleCP(1251);
- fwrite(&p->data, sizeof(p->data), 1, D);
- Fuf(p->right);
- }
- }
- void main()
- {
- setlocale(LC_ALL, "rus");
- int n, i, j;
- g.open("output.txt");
- f.open("input.txt", ios::in);
- f >> n;
- Point* t;/*
- t = first();
- print_Tree(t, 0);*/
- FILE* H;
- H = fopen("inpat.dat", "wb");
- for (int i = 0; i < n; i++)
- {
- sp a;
- f >> a.Name[0];
- f >> a.Name[1];
- f >> a.Name[2];
- f >> a.Date;
- f >> a.Atest;
- f >> a.Score[0];
- f >> a.Score[1];
- f >> a.Score[2];
- fwrite(&a, sizeof(a), 1, H);
- }
- fclose(H);
- sp a;
- H = fopen("inpat.dat", "rb");
- fread(&a, sizeof(a), 1, H);
- t = first(a);
- for (int i = 0; i < n; i++){
- fread(&a, sizeof(a), 1, H);
- Add(t, a);
- }
- //print_Tree(t, 0);
- cout << endl;
- cout << "Исходный список : " << endl;
- cout << endl;
- cout << setw(20) <<" ФИО " << setw(25) << " Год Рождения " << setw(4) << " Ср. балл аттестата " << " " << endl;
- print_Alf(t);
- cout << endl;
- float o;
- cout << "Введите балл аттестата , для удаления" << endl;
- cin >> o;
- D = fopen("output.dat", "wb");
- delete_node(t, o);
- cout << endl;
- cout << "Список после удаления : " << endl;
- cout << endl;
- cout << setw(20) << " ФИО " << setw(25) << " Год Рождения " << setw(4) << " Ср. балл аттестата " << " " << endl;
- print_Alf(t);
- Fuf(t);
- fclose(D);
- D = fopen("output.dat", "rb");
- while (!feof(D)){
- fread(&a, sizeof(a), 1, D);
- g << a.Name[0]; g << " ";
- g << a.Name[1]; g << " ";
- g << a.Name[2]; g << " ";
- g << a.Date; g << " ";
- g << a.Atest; g << " ";
- g << a.Score[0]; g << " ";
- g << a.Score[1]; g << " ";
- g << a.Score[2]; g << " ";
- g << endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment