
5 Структуры
Структура – это упорядоченная совокупность произвольных типов данных, которые объединены в одной области памяти. Тип структуры вводится описанием следующего вида:
struct [ім’я_структури]
{тип_1 ім’я_поля_1;
тип_2 ім’я_поля_2;...;
тип_n ім’я_поля_n;};
где имя структуры – имя структуры шаблона, который удовлетворяет правилам задания идентификаторов языка С++;
тип_1, тип_2, ... , тип_n – какие-либо назначенные типы;
имя_поля_1, ... , имя_поля_n – идентификаторы полей, которые удовлетворяют правилам задания идентификаторов.
Описание структуры представляет собой задание нового типа «имя стуктуры» ы не приводит к выделению памяти, а только дает информацию компилятору о типах и количестве полей. Эта информация используется при описании структурированных переменных для резервирования необходимого места в памяти и организации доступа к необходимым полям структурной переменной.
Доступ к полям структуры можно обеспечить двумя способами: используя оператор разименования поля (символ „.”):
имя _структурной_переменной. имя_поля;
или используя оператор указателя на структуру (символы „->”):
указатель_на_структуру-> имя_поля;
Наиболее приоритетным в современном программировании является использование указателей.
Допускается использование массивов структур, структур внутри структур и т.д. Главное при этом – чтобы программист не использовал излишней памяти компьютера и контролировал связь данных внутри созданных структур.
Пример 5.1.
Ввести в компьютер информацию об автомобиле со следующими данными: марка, год выпуска, мощность. Напечатать названия марок тех автомобилей, год выпуска и мощность которых совпадает с введенными в строке запроса.
#include<iostream.h>
#include<conio.h>
const int n=2;
struct Poisk { char name[20];
int year;
int power; };
void main ()
{
Poisk car[n], *point=&car[0];
int i,yy,pp;
bool flag=false;
// введення інформації
for(i=0; i<n; i++, point++)
{
cout << "\nVvedi nazvy avto:";
cin >> point-> name; // або cin >> (*point).name;
cou t<< "\nVvedi rik vipusku:";
cin >> point->year; // або cin >> (*point). year;
cout << "\nVvedi potuznist':";
cin >> point->power; // cin >> (*point). power;
}
point-= n; // повернення покажчика на початок масиву
//Рядок запиту: рік випуску і потужність
cout << "\nVvedit rik vipusku:"; cin >> yy;
cout << "\nVvedi poshukovu potuznist':"; cin >> pp;
for (i =0; i < n; i++, point++)
if((point->year== yy) && (point->power == pp))
{ cout <<"the name of car is\n"<< point->name <<"\n";
flag=true; /* автомобіль знайдено*/
}
if(!flag)
cout<<"Avto ne znajdene\n ";
getch() ;
}
5.2. Контрольные вопросы и задания
С какой целью используется тип данных «структура»?
Какие преимущества и недостатки имеет использование структур?
Какие типы полей может содержать структура?
Как можно обратиться к элементам структуры?
Назовите способы описание переменных структурного типа.
Можно ли использовать структуру внутри другой структуры?
Когда используют массивы структур?
Как в приведенном примере программы понимать выражение point->year ?
Возможно ли реализовать пример 5.1 без использования массива?