Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2010, 16:49   #1
Qwerik
Пользователь
 
Регистрация: 05.04.2010
Сообщений: 23
Восклицание Массивы на С++

Помогите, пожалуйста, решить задачу.
Дан массив, содержащий данные о книгах. Сведения о каждой из книг - это фамилия автора, название и год издания. составить перечень авторов, выпустивших книги в годы издания, в которые опубликовано максимальное число книг в таблице данных.

Вот, то что написала, но не работает(

Код:
#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;
	}
Qwerik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент LyaLya Помощь студентам 15 20.12.2009 14:12
Массивы Student117 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 25.11.2009 22:26
C++ массивы dimaangel Общие вопросы C/C++ 8 15.12.2008 19:38