Список представляет собой таблицу

Фамилия и инициалы Курс Группа
  Иванов А.А.   ИСТ – 101
  Сидоров Б.Б.   АСУ – 120
.
       

# 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;

}

Задания для лабораторной работы:

1. Исходные данные вводятся из файла.

2. Результаты выводятся на экран и в файлы.

3.1 Строка таблицы данных содержит следующую информацию о первокурсниках: фамилия, имя, отчество, группа, количество баллов, набранных на вступительных экзаменах.

Требуется найти:

3.1.1) перечень фамилий с указанием числа студентов с такой фамилией;

3.1.2) перечень имён с указанием числа студентов с таким именем;

3.1.3) перечень отчеств с указанием числа студентов с таким отчеством;

3.1.4) перечень групп с указанием числа студентов, обучающихся в них;

3.1.5) перечень баллов с указанием числа студентов, набравших это количество баллов;

3.1.6) перечень имен, встречающихся максимальное количество раз;

3.1.7) перечень групп, в которых максимальное количество обучающихся студентов;

3.1.8) перечень студентов, набравших максимальное количество баллов;

3.1.9) перечень групп, в которых максимальное количество студентов, набравших максимальное количество баллов;

3.1.10) перечень групп, в которых средний балл студентов по группе максимален.

3.2 Строка таблицы данных содержит следующую информацию о книгах: автор, наименование, издательство, год издания.

Требуется найти:

3.2.1) перечень авторов с указанием числа их книг;

3.2.2) перечень наименований с указанием числа книг с таким названием;

3.2.3) перечень издательств с указанием числа книг, выпущенных ими;

3.2.4) перечень годов изданий с указанием числа книг, выпущенных в эти годы;

3.2.5) перечень авторов, имеющих максимальное число книг;

3.2.6) перечень издательств, выпустивших максимальное число книг;

3.2.7) перечень наименований книг, встречающихся максимальное число раз;

3.2.8) перечень годов изданий, в которые выпущено максимальное число книг;

3.2.9) перечень издательств, выпустивших книги авторов, которые имеют максимальное число книг в таблице данных;

3.2.10) перечень авторов, выпустивших книги в годы издания, в которые опубликовано максимальное число книг в таблице данных.

3.3 Строка таблицы данных содержит следующую информацию о владельцах авто: ф.и.о. владельца, марка авто, год выпуска, страна производитель.

Требуется найти:

3.3.1) перечень владельцев с указанием числа их авто;

3.3.2) перечень марок авто с указанием их числа;

3.3.3) перечень стран производителей с указанием количества авто, выпущенных ими;

3.3.4) перечень годов выпуска с указанием количества авто, выпущенных в эти годы;

3.3.5) перечень владельцев, имеющих максимальное число авто;

3.3.6) перечень стран, выпустивших максимальное количество авто;

3.3.7) перечень марок авто, встречающихся максимальное число раз;

3.3.8) перечень годов выпуска, в которые выпущено максимальное количество авто;

3.3.9) перечень стран, выпустивших марки авто, которых имеется в таблице данных в максимальном количестве;

3.3.10) перечень марок, выпущенных в годы, в которые произведено максимальное количество авто в таблице данных.

Контрольные вопросы:

1. Как осуществляется доступ к динамическим элементам массива?

2. Что такое стек?

3. Каким образом происходит распределение памяти?

4. В чем преимущества динамических массивов структур?

5. Какие функции отвечают за выделение и освобождение памяти? Привести примеры.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: