Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование на C / C++ / Лабораторные работы / Лабораторная работа №9

.doc
Скачиваний:
35
Добавлен:
02.05.2014
Размер:
195.07 Кб
Скачать

Уфимский Государственный Авиационный Технический Университет

Лабораторная работа №9.

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

Выполнил студент группы

Проверил доцент

кафедры АПрИС

Бежаева О.Я.

Уфа-2008.

1.Цель работы:

Знакомство и получение навыков работы с динамическими массивами на языке С++.

2. Условия задания:

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

3. Решение задания:

  1. Алгоритм решения задания в виде блок- схемы:

k++

2)Текст программы на языке С++:

#include <conio.h>

#include <iostream.h>

#include <string.h>

#include <stdlib.h>

#include <fstream.h>

#include <iomanip.h>

struct book

{char avtor[15];

char name[15];

char izdat[15];

int god;

};

struct avtor

{char avtor[15];

int kolvo;

};

book *inputbookfile(int &k);

avtor *perech(book x[],int k,int &kk);

void outputperech(avtor y[],int kk);

void outputperechfile(avtor y[],int kk);

book *inputbookfile(int &k)

{int i;

book t;

book *ps;

ifstream fin;

char file[10];

cout<<"Name of input file:\n";

cin>>file;

fin.open(file);

if (fin==NULL) {cout<<file<<" "<<"Can’t open file\n";getch();exit(1);}

k=0;

do {fin>>t.avtor>>t.name>>t.izdat>>t.god;

k++; }while (fin.good());

k--;

fin.close();

fin.open(file);

ps=new book[k];

if(ps==NULL){cout<<"No memory\n";getch();exit(1);}

for (i=0;i<k;i++)

fin>>ps[i].avtor>>ps[i].name>>ps[i].izdat>>ps[i].god;

fin.close();

return ps;

}

avtor *perech(book x[],int k,int &kk)

{

int i,j,fl;

avtor *t;

t=new avtor[k];

if(t==NULL){cout<<"No memory";getch();exit(1);}

kk=0;

for(i=0;i<k;i++)

{fl=0;

for(j=0;j<kk;j++)

if(strcmp(x[i].avtor,t[j].avtor)==0){fl=1;t[j].kolvo++;}

if (fl==0){strcpy(t[kk].avtor,x[i].avtor);

t[kk].kolvo=1;

kk++;}

}

return t;

}

void outputperech(avtor y[],int kk)

{int i;

cout<<"ABTOP Koli4ECTBO\n";

for(i=0;i<kk;i++)

cout<<y[i].avtor<<" "<<y[i].kolvo<<endl;

}

void outputperechfile(avtor y[],int kk)

{ofstream fout;

int i;

char file[10];

cout<<"Name of output file:\n";

cin>>file;

fout.open(file);

if (!fout.good()) {cout<<file<<"Not created\n";getch();exit(1);}

for (i=0;i<kk;i++)

fout<<setw(15)<<y[i].avtor<<setw(10)<<y[i].kolvo<<endl;

fout.close();

}

void main()

{book *ps;

int n;

avtor *pp;

int l;

ps=inputbookfile(n);

pp=perech(ps,n,l);

outputperech(pp,l);

outputperechfile(pp,l);

delete[] ps;

delete[] pp;

}

3)Результат тестирования программы:

Текстовый файл:

Работа программы:

Полученный текстовой файл: