Рекурсия в C++
Автор Сообщение
murmax-91 Не на форуме
Banned

Сообщений: 8
Зарегистрирован: 11.2011
Сообщение: #1
Рекурсия в C++
Всем привет. У меня возникла проблема с реализацией рекурсивных функций.
В общем вот задача:
PHP код:
/*В массиве хранятся упорядоченые по номеру  данные о
сотрудниках ()табельный номер, фамилия, оклад).
Определить рекурсивную функцию поиска сотрудника по его
табельному номеру.*/

#include <iostream>
#include <fstream>

#define n 10

using namespace std;

void outfile(char name[]);
void vyv();
void sorting();
void search();

typedef struct
{
    
int nom;
    
char fam[31];
    
float pay;
}
bd;

/*********************************Переменные*************************************​***************/
int kol=0;
bd N;
/************************************Конец***************************************​***************/

/********************************************************************************​***************/
bd m[n]={};
/********************************************************************************​***************/

int main()
{
    
setlocale(LC_ALL"Russian");
    
setlocale(LC_ALL"RUS");

    
char name_f[31]="txt";
    
/*cout<<"Введите имя файла: ";
    cin>>name_f;*/

    
outfile(name_f);
    
sorting();
    
vyv();

    
search();

    return 
0;
}

void outfile(char name[])
{
    
//char s[80];
    
fstream f(nameios::in);
    while(!
f.eof())
    {
        
f>>m[kol].nom>>m[kol].fam>>m[kol].pay;
        
kol++;
//        cout<<m[kol].nom>>m[kol].fam>>m[kol].pay<<endl;
    
}
    
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;
    }
}

void sorting()
{
    for (
int i=0i<koli++)
    {
        
int k=i,j;
        for(
j=i+1;j<kol;j++)
        {
            if(
m[j].nom<m[k].nom)
                
k=j;
            if(
i!=k)
            {
                
N=m[i];
                
m[i]=m[k];
                
k[m]=N;
            }
        }
    }
}

void search()
{
    
int itab=0;
    
cout<<"Введите табельный номер: ";
    
cin>>tab;
    for(
i=0;i<kol;i++)
    {
        if(
tab == m[i].nom)
        {
            
cout<<m[i].nom<<"\t"<<m[i].fam<<"\t"<<m[i].pay<<endl;
        }
    }


Функцию search() нужно реализовать рекурсивно.
Помогите пожалуйста.....
27.11.2011 9:24
Найти все сообщения Цитировать это сообщение
murmax-91 Не на форуме
Banned

Сообщений: 8
Зарегистрирован: 11.2011
Сообщение: #2
RE: Рекурсия в C++
Нужна рекурсивная функция бинарного поиска по полю m[i].nom
05.12.2011 20:05
Найти все сообщения Цитировать это сообщение
murmax-91 Не на форуме
Banned

Сообщений: 8
Зарегистрирован: 11.2011
Сообщение: #3
RE: Рекурсия в C++
Собственно говоря никто мне не помог и я с бубном и плясками нашел решение. Вот если кому нужно берите код:
PHP код:
/*В массиве хранятся упорядоченые по номеру  данные о
сотрудниках ()табельный номер, фамилия, оклад).
Определить рекурсивную функцию поиска сотрудника по его
табельному номеру.*/

#include <iostream>
#include <fstream>

#define n 10

using namespace std;

void outfile(char name[]);
void vyv();
int bin_find(int keyint lint 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(tab0kol);
    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(nameios::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 keyint lint 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(keylmid-1);
    else
        return 
bin_find(keymid+1h);

14.12.2011 17:51
Найти все сообщения Цитировать это сообщение
Создать ответ