istream & operator >> (istream & f1, Tmag & u )//дружественная функция, перегрузка операции ввода
{
f1>>u.n;//реальное количество элементов в массиве
for(int i=0; i<u.n; ++i)
f1>>u[i];
cout<<"Введите заданный журнал: ";
cin>>u.str;//заданный журнал
return f1;
}
ostream & operator << (ostream & f2, Tmag & u )//дружественная функция, перегрузка операции вывода
{
for(int i=0; i<u.n; ++i)
f2<<u[i];
u.reader();//вызов функции
f2<<endl<<"Фамилии читателей журналов: "<<endl;
for(int i=0; i<u.n; ++i)
f2<<u.a[i]<<endl;
return f2;
}
int Tmag::num (void)//последний номер заданного журнала
{
int * temp=new int [n];//для содержания номеров заданного журнала
for (int j=0;j<n;j++)
{
if(!strcmp(str,mass[j].Get_namemag()))//Функция strcmp() сравнивает в лексикографическом порядке две строки и возвращает целое значение
{
temp[j]=mass[j].Get_nomer();//если заданный журнал
}
else temp[j]=0;//иначе присваеваем элементу ноль
}
int max_nomer=temp[0];//присваиваем переменной первый элемент массива
for (int i = 1; i < n; i++)//цикл со второго элемента
if(temp[i]>max_nomer)//если i-ый элемент массива больше, чем первый,
max_nomer = temp[i];//то присваиваем переменной значение i-ого элемента
delete []temp;//очистка памяти
return max_nomer;//возвращает максимальный номер заданного журнала
}
void Tmag::reader (void)//фамилии читателей журналов
{
for (int i=0;i<n;i++)
a[i]=mass[i].Get_name();
}
Tmag::~Tmag(void)//деструктор
{
}
mag.cpp
#include "StdAfx.h"
#include "mag.h"
#include <iomanip>
//mag (char * new_namemag="Космос", int new_nomer=5, char * new_name="Демидович");
mag::mag(void)//конструктор
{
namemag == "Космос"; nomer = 5; name == "Демидович";
}
char* mag::Get_namemag(void)//возвращает название журнала
{
return namemag;
}
int mag::Get_nomer(void)//возвращает номер
{
return nomer;
}
char* mag::Get_name(void)//возвращает фамилию читателя
{
return name;
}
istream & operator >> (istream & f1, mag &p )//дружественная функция, перегрузка операции ввода
{
f1>>p.namemag>>p.nomer>>p.name;
return f1;
}
ostream & operator << (ostream & f2, mag &p )//дружественная функция, перегрузка операции вывода
{
f2<<setw(max_n+1)<<p.namemag<<setw(13)<<p.nomer<<setw(13)<<p.name<<endl;
return f2;
}
mag::~mag(void)//деструктор
{
}
lb4.cpp
// lb4.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include "Tmag.h"
#include <fstream>
#include <windows.h>
using namespace std;
ifstream f1("G:\\in.txt");//исходный файл
ofstream f2("G:\\out.txt");//файл-результат
int _tmain(int argc, _TCHAR* argv[])
{
//русская раскладка
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
Tmag magazines; // данные о журналах
// чтение данных из файла
if (!f1)
cout<<"Файл не найден!"<<endl<<endl;
f1>>magazines;
f1.close();
// вывод результата
if (!f2)
cout<<"Файл не найден!"<<endl<<endl;
f2<<magazines;
f2<<endl<<"Максимальный номер заданного журнала: "<<magazines.num()<<endl;
f2.close();
system("pause");
return 0;
}
Результаты:
Файл с исходными данными "G:\\in.txt"
Консоль
Результат в файле "G:\\out.txt
Выводы: закрепили знания работы функций; научились решать данную задачу в виде класса
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.