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>
- using namespace std;
- //
- //Структура "Государство":
- //-название;
- //-столица;
- //-численность населения;
- //-занимаемая площадь.
- //
- //Удалить все элементы, у которых численность меньше заданной.
- //
- //Вывести на экран и в бинарный файл в алфавитном порядке
- int n; // Кол-во элементов
- int qq = 0; //Счётчик для поиска
- struct Gos{
- string Name;
- string Gorod;
- int People;
- float Size;
- };
- struct Point{
- Gos key;
- Point *left;
- Point *right;
- };
- Point* first(Gos d)//формирование первого элемента дерева
- {
- Point* p = new Point;
- p->key = d;
- p->left = 0;
- p->right = 0;
- return p;
- }
- //добавление элемента d в дерево поиска
- Point* Add(Point*root, Gos d)
- {
- Point*p = root;//корень дерева
- Point *r = root;//флаг для проверки существования элемента d
- //в дереве
- bool ok = false;
- while (p&&!ok)
- {
- r = p;
- if (d.Name == p->key.Name)ok = true; //элемент уже существует
- else
- if (d.Name < p->key.Name)p = p->left;
- //пойти в левое поддерево
- else p = p->right;//пойти в правое поддерево
- }
- if (ok) return p; //найдено, не добавляем
- //создаем узел
- Point* New_point = new Point();//выделили память
- New_point->key = d;
- New_point->left = 0;
- New_point->right = 0;
- // если d<r->key, то добавляем его в левое поддерево
- if (d.Name < r->key.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->key.Name << endl;
- print_Tree(p->right, level + 1);
- }
- }
- void print_Alf(Point *p){
- if (p)
- {
- print_Alf(p->left);//переход к левому поддереву
- cout << p->key.Name << " ";
- print_Alf(p->right);
- }
- }
- void Run(Point *p, int N)
- {
- if (p){
- if (p->key.People < N){ cout << " В " << p->key.Name << " Народу меньше " << N << endl; qq++; }
- Run(p->left,N);
- Run(p->right,N);
- }
- }
- void MakeBinary(){
- Gos d;
- FILE *file;
- file = fopen("File.dat", "wb");
- ifstream f("input.txt", ios::in);
- f >> n;
- f >> d.Name;
- f >> d.Gorod;
- f >> d.People;
- f >> d.Size;
- fwrite(&d, sizeof(d), 1, file);
- for (int i = 0; i < n - 1; i++){
- f >> d.Name;
- f >> d.Gorod;
- f >> d.People;
- f >> d.Size;
- fwrite(&d, sizeof(d), 1, file);
- }
- fclose(file);
- }
- void main(){
- setlocale(LC_ALL, "rus");
- Point *beg;
- Gos d;
- FILE *file;
- MakeBinary();
- file = fopen("File.dat", "rb");
- fread(&d, sizeof(d), 1, file);
- beg = first(d);
- cout << d.Name << " " << d.Gorod << " " << d.People << " " << d.Size << endl;
- for (int i = 0; i < n-1; i++){ //Имена на А - в левом поддереве
- fread(&d, sizeof(d), 1, file);
- Add(beg, d);
- cout << d.Name << " " << d.Gorod << " " << d.People << " " << d.Size << endl;
- }
- cout << "В алфавитном порядке" << endl;
- print_Alf(beg);
- cout << endl;
- Point *p = beg;
- cout << endl;
- cout << "Операция поиска : " << endl;
- cout << endl;
- cout << "Введите нужное кол-во населения для поиск :" << endl;
- int N;
- cin >> N;
- cout << endl;
- cout << endl;
- Run(beg, N);
- cout << endl;
- //if (!qq)cout << "Записи не найдены" << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment