Продемонстрируйте работу функции для всех вариантов поиска.
Код программы
#include <stdio.h>
#include <locale>
#include <fstream>
#include <conio.h>
#include "windows.h"
#include <iostream>
#include<string.h>
using namespace std;
FILE *f; int v=0;
struct person
{
char fam[20];
char name[20];
int nomer;
int date;
int oklad;}*pr[20]={NULL};
char vib[10];int search;
int test(int v)
{
int a;
switch(v)
{
case 1:
{
for (int i=0; i<9; i++)
{
if(pr[i]->nomer > pr[i+1]->nomer) return a=0;
else a=1;
}
}break;
case 2:
{
for (int i=0; i<9; i++)
{
if(strcmp(pr[i]->name,pr[i+1]->name)>0) return a=0;
else a=1;
}
}break;
case 3:
{
for (int i=0; i<9; i++)
{
if(pr[i]->date > pr[i+1]->date) return a=0;
else a=1;
}
}break;
case 4:
{
for (int i=0; i<9; i++)
{
if(pr[i]->oklad > pr[i+1]->oklad) return a=0;
else a=1;
}
}break;
default: cout << "FAIL! " << endl;
}
return a;
}
int BinSearch(int v)
{
int left = 0;
int right = 10;
switch(v)
{
case 1:
{
cout << "Enter monile number: "; cin >> vib;
while (true)
{
int mid = left + (right - left) / 2;
if (pr[mid]->nomer == atoi(vib))
return mid;
if (pr[mid]->nomer > atoi(vib))
right = mid;
else
left = mid + 1;
}
}break;
case 2:
{
cout << "Enter name: "; cin >> vib;
while (true)
{
int mid = left + (right - left) / 2;
if (strcmp(pr[mid]->name,vib)==0)
return mid;
if (strcmp(pr[mid]->name, vib)>0)
right = mid;
else
left = mid + 1;
}
}break;
case 3:
{
cout << "Enter month: "; cin >> vib;
while (true)
{
int mid = left + (right - left) / 2;
if (pr[mid]->date == atoi(vib))
return mid;
if (pr[mid]->date > atoi(vib))
right = mid;
else
left = mid + 1;
}
}break;
case 4:
{
cout << "Enter salary: "; cin >> vib;
while (true)
{
int mid = left + (right - left) / 2;
if (pr[mid]->oklad == atoi(vib))
return mid;
if (pr[mid]->oklad > atoi(vib))
right = mid;
else
left = mid + 1;
}
}break;
default: cout << "FAIL!" << endl;break;
}
return search;
}
int NormSearch(int v)
{ int i=0;
switch(v)
{
case 1:
{
cout << "Enter monile number: "; cin >> vib;
for (int i=0; i<10;i++)
{
if(atoi(vib)==pr[i]->nomer) {return i;}
}
}break;
case 2:
{
cout << "Enter name: "; cin >> vib;
for (int i=0; i<10;i++)
{
if(strcmp(vib,pr[i]->name)==0) {return i;}
}
}break;
case 3:
{
cout << "Enter month: "; cin >> vib;
for (int i=0; i<10;i++)
{
if(atoi(vib)==pr[i]->date) {return i;}
|
}
}break;
case 4:
{
cout << "Enter salary: "; cin >> vib;
for (int i=0; i<10;i++)
{
if(atoi(vib)==pr[i]->oklad) { return i;}
}
}break;
default: cout << "FAIL" << endl;
}
}
int vibor()
{
cout << " Choose Select Search:" << endl;
cout << " 1. Mobile number." << endl;
cout << " 2. Name person." << endl;
cout << " 3. Month of birth." << endl;
cout << " 4. Salary" << endl;
cin >> v;
return v;
}
void scan()
{
fstream fin("7.dat");
int sum=0;
for(int i = 0;!fin.eof(); i++)
{
pr[i] = new person;
fin >> pr[i]->fam;
fin >> pr[i]->name;
fin >> pr[i]->nomer;
fin >> pr[i]->date;
fin >> pr[i]->oklad;
}
fin.close();
}
void print()
{
for (int k=1; k<9; k++)
{
cout<<"\nSurname: "<<pr[k]->fam;
cout<<"\nName: "<< pr[k]->name;
cout<<"\nMobile number: "<< pr[k]->nomer;
cout<<"\nMonth: "<< pr[k]->date;
cout<<"\nSalary: "<<pr[k]->oklad;
cout<<"\n\n";
}
}
int search_record()
{
int i=0;int t;
t=test(v);
cout << t << endl;
switch(t)
{case 1:
{
i=BinSearch(v);
cout << "Binary search:" << endl;
cout<<"\nSurname: ";printf("%s",pr[i]->fam);
cout<<"\nName: ";printf("%s",pr[i]->name);
cout<<"\nMobile number:";printf("%d",pr[i]->nomer);
cout<<"\nMonth: ";printf("%d",pr[i]->date);
cout<<"\nSalary: ";printf("%d",pr[i]->oklad);
cout<<"\n\n";
break;}
case 0:
{
i=NormSearch(v);
cout << "Normal search:" << endl;
cout<<"\nSurname: ";printf("%s",pr[i]->fam);
cout<<"\nName: ";printf("%s",pr[i]->name);
cout<<"\nMobile number:";printf("%d",pr[i]->nomer);
cout<<"\nMonth: ";printf("%d",pr[i]->date);
cout<<"\nSalary: ";printf("%d",pr[i]->oklad);
cout<<"\n\n";
break;
return 0; }
default: cout << "FAIL!" << endl;
}}
void insertSort(person *a[], int size, int v)
{
int s;
cout << " Sorting Massiv?" << endl;
cout << " 1.Yes\n 2.No" << endl;
cin >> s;
switch(s)
{
case 1:
{
person *tmp;
for (int i = 1, j; i < size; ++i) // цикл проходов, i - номер прохода
|
{
tmp = a[i];
switch(v)
{
case 1:
{ for (j = i - 1; j >= 0 && a[j]->nomer > tmp->nomer; --j) // поиск места элемента в готовой последовательности
a[j + 1] = a[j]; // сдвигаем элемент направо, пока не дошли
a[j + 1] = tmp; // место найдено, вставить элемент
}break;
case 2:
{ for (j = i - 1; j >= 0 && strcmp(a[j]->name,tmp->name)>0; --j) // поиск места элемента в готовой последовательности
a[j + 1] = a[j]; // сдвигаем элемент направо, пока не дошли
a[j + 1] = tmp; // место найдено, вставить элемент
}break;
case 3:
{ for (j = i - 1; j >= 0 && a[j]->date > tmp->date; --j) // поиск места элемента в готовой последовательности
a[j + 1] = a[j]; // сдвигаем элемент направо, пока не дошли
a[j + 1] = tmp; // место найдено, вставить элемент
}break;
case 4:
{ for (j = i - 1; j >= 0 && a[j]->oklad > tmp->oklad; --j) // поиск места элемента в готовой последовательности
a[j + 1] = a[j]; // сдвигаем элемент направо, пока не дошли
a[j + 1] = tmp; // место найдено, вставить элемент
}break;
default: cout << "FAIL! Try again" << endl;break;
}}}break;
case 2: break;
default: cout << "FAIL! Try again" << endl;break;
}}
void main()
{int i;while(true)
{ scan();
v=vibor();
insertSort(pr,10,v);
print();
i=search_record();}}
Скриншоты результатов