R
Romashkinu
Доброго времени суток уважаемые программисты. Мне необходима ваша помощь.
Прошу помочь написать программный код для выполнения задачи (И желательно объяснить его).
Задача на тему "Динамические массивы структур"
Задача звучит следующим образом:
"Строка таблицы данных содержит следующую информацию о книгах: автор, наименование, издательство, год издания. Найти: перечень издательств, выпустивших максимальное число книг. Главное 1) Исходные данные вводятся из файла, 2)Результаты выводятся на экран и в файлы."
P.S. Так же в методичке был пример решенного задания, но он с ошибками.
Заранее спасибо
Прошу помочь написать программный код для выполнения задачи (И желательно объяснить его).
Задача на тему "Динамические массивы структур"
Задача звучит следующим образом:
"Строка таблицы данных содержит следующую информацию о книгах: автор, наименование, издательство, год издания. Найти: перечень издательств, выпустивших максимальное число книг. Главное 1) Исходные данные вводятся из файла, 2)Результаты выводятся на экран и в файлы."
P.S. Так же в методичке был пример решенного задания, но он с ошибками.
C++:
# include <iostream.h>
# include <fstream.h>
# include <string.h>
# include <iomanip.h>
# include <stdlib.h>
const int N=200;
struct student
{
char name[30];
int kurs;
char gr[7];
};
struct group
{
char gr[7];
int ng;
};
// Прототипы функций
student *inputstudentfile ( int &nn);
void outputstudent ( student st[], int nn);
group *perechengroup ( student st[], int nn, int &kk);
void outputgroup (group z[], int kk);
void outputgroupfile (group z[], int kk);
// Ввод исходного массива задолжников из файла
student *inputstudentfile ( int &nn)
{
ifstream fin;
char file[10];
char iniz[7]; // рабочая переменная для инициалов
student t; // рабочая переменная для подсчета записей в файле
student *ps;
int i;
cout << ”Имя файла:”;
cin >> file;
fin.open(file);
if( fin==NULL) {cout<<”Файл не открыт.\n”; exit(1);}
// подсчет записей в файле
nn =0;
do {
fin >> t.name >> iniz >> t.kurs >> t.gr;
nn++;
}while (fin.good());
nn--;
fin.close();
// выделение памяти для динамического массива
ps= new student [nn];
if( ps=NULL ) { cout<<”Нет динамической памяти.”; getch(); exit(1);}
// ввод массива задолжников из файла
fin.open(file);
if( fin==NULL) {cout<<”Файл не открыт.\n”; exit(1);}
for (i=0; i< nn; i++)
{
fin >> ps[i].name >> iniz >> ps[i].kurs >> ps[i].gr;
strcat( ps[i].name, “ “); // добавление инициалов через
strcat( ps[i].name, iniz); // пробел к фамилии
}
fin.close();
return ps;
}
// Вывод массива задолжников на экран
void outputstudent ( student st[], int nn)
{
cout<< “Фамилия и инициалы Курс Группа \n”;
for (i=0; i<nn; i++)
cout << setw(16)<< st[i].name << setw(7)<< st[i].kurs << setw(8) << st[i].gr << endl;
}
// Формирование перечня групп, имеющих задолжников
group *perechengroup ( student st[], int nn, int &kk)
{
int i,j,fl;
group *p;
// выделение памяти для динамического массива (перечня)
p= new group [nn];
if( p==NULL ) { cout<<”Нет динамической памяти.”; getch(); exit(1);}
kk=0;
for ( i=0; i<nn; i++)
{
fl=1;
for ( j=0; j<kk; j++)
if (strcmp(st[i].gr, p[j].gr) == 0) { fl=1; p[j].ng++; }
if (fl==1) { strcpy(p[k].gr, st[i].gr); p[k].ng =1; kk++; }
}
return p;
}
// Вывод перечня групп, имеющих задолжников, на экран
void outputgroup (group z[], int kk)
{
cout<< “ Группа Кол-во \n”;
for (i=0; i< kk; i++)
cout << setw(8)<< z[i].gr << setw(8)<< z[i].ng << << endl;
}
// Вывод перечня групп, имеющих задолжников, в файл
void outputgroupfile (group z[], int kk)
{
оfstream fout;
char file[10];
int i;
cout << ”Имя файла:”;
cin >> file;
fout.open(file);
if( !fout.good()) {cout<<”Файл не открыт.\n”; exit(1);}
for (i=0; i< kk; i++)
fout << setw(8)<< z[i].gr << setw(8)<< z[i].ng << << endl;
fout.close();
}
/*основная функция программы */
void main()
{
student *pst; // указатель на исходную таблицу задолжников
int n; // n – число строк в исходной таблице
group *pz; // указатель на перечень групп, имеющих задолжников
int k; // к – число групп в перечне
pst=inputstudentfile ( n);
cout << ” Исходный массив структур. \n”;
outputstudent ( pst, n);
pz=perechengroup ( pst, n, k);
cout << ” Перечень групп, имеющих задолжников. \n”;
outputgroup ( pz, k);
outputgroupfile ( pz, k);
delete [] pst;
delete [] pz;
}
Заранее спасибо