//включаем необходимые заголовочные файлы
#include "iostream"
#include "group.h"
#include "stdlib.h"
#include "string.h"

//конструктор объекта Group
Group::Group(int Size)
{
//инициализируем данные
size = Size;
persons = new Person[size]; //выделяем динамическую память под массив
}

//деструктор класса
Group::~Group()
{
delete [] persons; //освобождаем память, занимаемую массивом
}

//функция вывода данных на экран
void Group::Print()
{
//в цикле выводим все записи массива на экран
for (int i = 0; i < size; i++)
	persons[i].Print(); //вызываем функцию объекта Person
}

//функция заносящая объект man типа Person в i-ый элемент массива
void Group::PutPerson(int i, Person &man)
{
persons[i] = man;
}

//функция, возвращающая все данные объекта типа Person из i-го элемента массива
Person &Group::GetPerson(int i)
{
return(persons[i]);
}

//функция, возвращающая средний возраст людей в группе
double Group::Age()
{
double agesum = 0;
//в цикле суммируем возраст людей
for (int i = 0; i < size; i++)
	agesum += persons[i];
agesum /= size;
return(agesum);
}

//функция, возвращающая средний возраст людей в группе,
//возраст которых не больше limit
double Group::Age(int limit)
{
double agesum = 0;
int num = 0;
//в цикле суммируем возраст людей
for (int i = 0; i < size; i++) {
	double age = persons[i];
	if (age < limit) {
		agesum += age;
		num ++;
	}
}
agesum /= num;
return(agesum);
}

//оператор индексирования
Person &Group::operator[](int i)
{
return(persons[i]);
}

//конструктор класса
GroupX::GroupX(int Size, char Group_name[30], char Group_leader[30]) :
Group(Size)
{
strcpy(group_name, Group_name);
strcpy(group_leader, Group_leader);
}

//функция вывода данных на экран
void GroupX::Print()
{
std::cout << "Group name: " << group_name << std::endl;
std::cout << "Group leader: "<< group_leader << std::endl;
std::cout << "Group members: " << Group::Size() << std::endl;
Group::Print();
}