Помогите, пожалуйста, решить задачу.
Дан массив, содержащий данные о книгах. Сведения о каждой из книг - это фамилия автора, название и год издания. составить перечень авторов, выпустивших книги в годы издания, в которые опубликовано максимальное число книг в таблице данных.
Вот, то что написала, но не работает(
Код:
#include <iostream.h>
#include <string.h>
#include <conio.h>
#include <iomanip.h>
#include <fstream.h>
const int L=30;
const int N=100;
struct avtnaz
{
char avtor[L];
char name[L];
};
struct book
{
avtnaz r;
int god;
int ng;
};
struct avt
{
char avtor[L];
};
struct godiz
{
int god;
int ng;
};
void inputbookfile (book x[], int &n);
void outputbook (book x[], int n);
void outputavtfile (avt y[], int k);
void outputavt (avt x[], int n);
void perechgod (book x[], int n, godiz y[], int &k);
void perechavt (book x[], int n, godiz y[], int &k, avt z[], int &h);
void main ()
{
clrscr();
book a[N];
godiz b[N];
avt c[N];
int j,m,k,l,f,g;
while(1)
{
clrscr();
cout<<"1. Otkrutie faila"<<endl;
cout<<"2. Vivod dannyh na ekran"<<endl;
cout<<"3. perechen avtorov"<<endl;
cout<<"4. Zapis dannih v file"<<endl;
cout<<"5. Vihod iz programmy"<<endl;
cout<<endl<<endl;
cout<<"Vash vibor 1-5"<<endl;
cin>>j;
cout<<endl<<endl;
switch(j)
{
case 1: inputbookfile(a,m); break;
case 2: outputbook (a,m);getch();break;
case 3: perechgod(a,m,b,l);perechavt(a,m,b,l,c,f);break;
case 4: outputavtfile(c,f);break;
case 5: cout<<"Konec raboti";
getch();
return;
default:cout<<"Net tacogo puncta";
getch();
break;
}
}
}
void inputbookfile (book x[],int &n)
{
int i;
ifstream fin;
char file [L];
n=0;
cout<<"Vvedite imya faila:";
cin>>file;
fin.open (file);
if (fin.fail())
{
cout<<file<<" ne naiden.:\n";
getch();
return;
}
do
{
fin>>x[n].r.avtor>>x[n].r.name>>x[n].god;
n++;
}
while (fin.good ());
n--;
fin.close();
}
void outputbook (book x[], int n)
{
int i;
cout<<" --------------------------------------------------------------\n";
cout<<" | Avtor | Nazvanie | God izdaniya |\n";
cout<<" |------------------------------------------------------------|\n";
for (i=0;i<n;i++)
cout<<" | "<<setw(20)<<x[i].r.avtor<<" | "<<setw(20)<<x[i].r.name<<" | "<<setw(12)<<x[i].god<<" |\n";
cout<<" --------------------------------------------------------------\n";
}
void outputavtfile (avt x[], int n)
{
int i;
ofstream fout;
char file [L];
cout<<"Imya faila:";
cin>>file;
fout.open(file);
if (fout.fail())
{
cout<<"Fail "<<file<<" ne sozdan\n";
getch();
return;
}
fout<<" ------------------------\n";
fout<<" | Avtor |\n";
fout<<" |----------------------|\n";
for (i=0;i<n;i++)
fout<<" | "<<setw(20)<<x[i].avtor<<" |\n";
fout<<" ------------------------\n";
fout.close();
cout<<"Dannye sohraneny!";
getch();
}
void perechgod (book x[], int n, godiz y[], int &k) //Создание перечня годов и кол-во встрещающихся в массиве
{
int i,j,fl,m;
for (k=0,i=0;i<n;i++)
{
fl=1;
for (j=0;j<k;j++)
if (x[i].god==y[j].god)
{
y[j].ng++;
fl=0;
break;
}
if (fl==1)
{
y[k].god=x[i].god;
y[k].ng=1;
k++;
}
}
}
void perechavt (book x[], int n, godiz y[], int &k, avt z[], int &h)
{
int i,j,dmax; // поиск максимально встрещающегося
dmax=y[0].ng;
for (j=1;j<k;j++)
if (y[j].ng>dmax)
{
dmax=y[j].ng;
k=0;
}
for (j=0;j<k;j++)
if (y[i].ng==dmax)
{
y[k].ng=y[j].ng;
k++;
}
for (h=0,i=0;i<n;i++) // запись максимально встреч. в новый массив
if (x[i].god==y[k].god)
{
strcpy(z[h].avtor,x[i].r.avtor);
h++;
}
outputavt(z,h);
getch();
}
void outputavt (avt x[], int n)
{
int i;
cout<<" ------------------------"<<endl;
cout<<" | Avtor |"<<endl;
cout<<" |----------------------|"<<endl;
for (i=0;i<n;i++)
cout<<" | "<<setw(20)<<x[i].avtor<<" |"<<endl;
cout<<" ------------------------"<<endl;
}