/*В массиве хранятся упорядоченые по номеру данные о
сотрудниках ()табельный номер, фамилия, оклад).
Определить рекурсивную функцию поиска сотрудника по его
табельному номеру.*/
#include <iostream>
#include <fstream>
#define n 10
using namespace std;
void outfile(char name[]);
void vyv();
int bin_find(int key, int l, int h);
typedef struct
{
int nom;
char fam[31];
float pay;
}bd;
/*********************************Переменные****************************************************/
int kol=0;
/************************************Конец******************************************************/
/***********************************************************************************************/
bd m[n]={};
/***********************************************************************************************/
int main()
{
setlocale(LC_ALL, "Russian");
setlocale(LC_ALL, "RUS");
char name_f[31]="/0";
int tab=0;
cout<<"Введите имя файла: ";
cin>>name_f;
outfile(name_f);
vyv();
cout<<"Введите ключ поиска: ";
cin>>tab;
cout<<endl<<endl;
int lol=bin_find(tab, 0, kol);
if(lol!=-1)
cout<<"Интдекс найденого элимента: "<<m[lol].nom<<"\t"<<m[lol].fam<<"\t"<<m[lol].pay<<endl;
else
cout<<"Элимент не найден..."<<endl;
return 0;
}
void outfile(char name[])
{
fstream f(name, ios::in);
if(f.fail())
{
cout<<"\7Файл не найден"<<endl;
system("pause");
exit(1);
}
while(!f.eof())
{
f>>m[kol].nom>>m[kol].fam>>m[kol].pay;
kol++;
}
f.close();
}
void vyv()
{
cout<<"№"<<"\tФамилия "<<" оклад"<<endl
<<"-------------------------------"<<endl;
for(int i=0;i<kol;i++)
{
cout<<m[i].nom<<"\t"<<m[i].fam<<" "<<m[i].pay<<endl;
}
}
int bin_find(int key, int l, int h)
{
int mid=(l+h)/2;
if(l>h) return -1;
if(key==m[mid].nom) return mid;
if(key<m[mid].nom)
return bin_find(key, l, mid-1);
else
return bin_find(key, mid+1, h);
}