Программирование на C / C++ / Лабораторные работы / Лабораторная работа №9
.docУфимский Государственный Авиационный Технический Университет
Лабораторная работа №9.
Динамические массивы структур
Выполнил студент группы
Проверил доцент
кафедры АПрИС
Бежаева О.Я.
Уфа-2008.
1.Цель работы:
Знакомство и получение навыков работы с динамическими массивами на языке С++.
2. Условия задания:
Строка таблицы данных содержит следующую информацию о книгах: автор, наименование, издательство, год издания. Требуется найти перечень авторов с указанием числа их книг.
3. Решение задания:
-
Алгоритм решения задания в виде блок- схемы:
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)Результат тестирования программы:
Текстовый файл:
Работа программы:
Полученный текстовой файл: