• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Динамические массивы структур

  • Автор темы Romashkinu
  • Дата начала
R

Romashkinu

Доброго времени суток уважаемые программисты. Мне необходима ваша помощь.
Прошу помочь написать программный код для выполнения задачи (И желательно объяснить его).

Задача на тему "Динамические массивы структур"

Задача звучит следующим образом:
"Строка таблицы данных содержит следующую информацию о книгах: автор, наименование, издательство, год издания. Найти: перечень издательств, выпустивших максимальное число книг. Главное 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;
}

Заранее спасибо
 
H

hosm

ну, в примере походу кавычки неправильные - вместо ” надо " - это можно сказу сказать. А что еще за ошибки, что не работает?
 
R

Romashkinu

С остальном в целом всё работает (Добавил библиотеку conio, int i). Но всё равно не могу применить этот пример для решения своей задачи.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!