Вложенные структурные типы
Язык C++ позволяет определять один структурный тип в рамках другого. Например, структурный тип PersonInfo для записи роста, веса и даты рождения человека может быть определен, как показано в примере 6.5.
Пример 6.5.
struct Date
{
int month; //месяц
int day; //число
int year; //год
};
struct PersonInfo
{
float height; // рост
float weight; // вес
Date birthday; // датарождения
};
ПримеробъявленияпеременнойpersonтипаPersonInfo:
PersonInfo person;
Чтобыполучитьдоступкзначениюполяbirthday -переменной структурного типа PersonInfo, нужно использовать операцию точка: person.birthday, но так как birthday в свою очередь является полем структурного типа Date, то доступ, например, к году рождения осуществляется добавлением операции точка с именем year: person.birthday.year
Массивы структурного типа
Массивы структурного типа определяются так же, как и массивы стандартных типов.
Общий вид:
Имя_структурного_типа имя_переменной [количество_элементов_массива];
Например: PersonInfo personal[20];
Нумерация элементов массива начинается с нулевой компоненты и заканчивается индексом, равным количеству элементов массива минус 1.
Доступ к элементам массива структурного типа также осуществляется с использованием операции точка, например: personal[5].weight, personal[3].birthday.day и т. п.
Пример программирования
Сформировать массив, содержащий сведения о вкладах. Структурный тип содержит поля: ФИО вкладчика, номер счета, тип вклада (срочный, депозит, обычный), сумма вклада, дата последнего обращения к вкладу. Написать программу, которая выводит информацию о всех вкладчиках банка в алфавитном порядке имен и о вкладчиках банка, имеющих наибольший размер вклада.
Пример 6.6.
Текстпрограммы:
#include <string.h>
#include <stdio.h>
# include <iomanip.h>
struct Banc
{
char name[20]; // фамилия вкладчика
int sch; // номер счета
char tip[10]; // тип вклада
float sum; // сумма вклада
char data[10]; // дата последнего обращения
};
void main(void)
{
Banc b[10],b_new[10];
int kol;
cout<<"Введите количество вкладчиков >";
cin>>kol;
for(int i=0; i<kol; i++)
{
cout<<"Имя вкладчика :";
cin>>setw(15)>>b[i].name;
cout<<"Номер счета :";
cin>>b[i].sch;
cout<<"Тип вклада :";
cin>>b[i].tip;
cout<<"Сумма вклада :";
cin>>setw(10)>>b[i].sum;
cout<<"Дата последнего обращения к вкладу :";
cin>>setw(10)>>b[i].data;
cout<<endl;
}
/* Вывод содержимого массива вкладчиков в алфавитном порядке*/
for(int i=0; i<kol; i++)
{
Banc min=b[i];
int num=i;
for(int j=i; j<kol; j++)
if(strcmp(banc[j].name,min.name)<0)
{
min=b[j];
num=j;
}
b[num]=b[i];
b[i]=min;
}
cout<<"Имя вкладчика”<<”Номер счета”<<”Тип вклада”;
cout<<”Сумма вклада”<<”Дата последнего обращения к вкладу”<<endl;
for(int i=0; i<kol; i++)
{
cout<<setw(15)<<b[i].name<<setw(13)<<b[i].sch<<setw(11)<<b[i].tip;
cout<<setw(13)<<b[i].sum<<setw(16)<<b[i].data<<endl;
}
// Формирование массива вкладчиков, имеющих наибольший размер вклада
float max=0.0;
int kol_new=0;
for(int i=0; i<kol; i++) // Определение значения наибольшего вклада
if(b[i].sum>max) max=b[i].sum;
cout<<”Наибольшая сумма вклада”<<max<<endl;
// Массив вкладчиков с наибольшей суммой вклада
for(int i=0; i<kol; i++)
if(b[i].sum==max) b_new[kol_new++]=b[i];
cout<<”Имя вкладчика”<<”Номер счета”<<”Тип вклада”;
cout<<”Сумма вклада”<<”Дата последнего обращения к вкладу”<<endl;
for( i=0; i<kol_new; i++)
{ cout<<setw(15)<<b_new[i].name<<setw(13)<<b_new[i].sch<<
setw(11)<< b_new[i].tip;
cout<<setw(13)<<b_new[i].sum<<setw(16)<<b_new[i].data<<endl;
}
}