|   Войти

Объединение разнотипной информации. Структуры.

Часто для какого-то объекта необходимо сохранить разнообразную информацию, например, данные о текущих настройках видеокарты, или данные об учениках в классе. Причем эти данные могут быть самых разных типов. К примеру, фамилия, имя и отчество – это строки, возраст – это целочисленный тип, буква класса – это символьный тип. Чтобы не хранить информацию об одном объекте в разных переменных, в C++ мы можем создать свои собственные типы данных, которые называются структурами, в которых мы можем сгруппировать переменные разных типов в единое целое.

Чтобы создать структуры используется ключевое слово «struct», после чего пишется имя структуры, затем в фигурных скобках перечисляются все переменные, принадлежащие данной структуре. Эти переменные называются полями структуры. После закрывающейся фигурной скобки обязательно ставится точка с запятой «;». Например, нам необходимо сохранить следующую информацию о компьютере: фирму производителя компьютера, название компьютера, название процессора, частота процессора, объем оперативной памяти. Для этого мы можем создать следующую структуру:

struct Computer{

           char firm[30];

           char compName[30];

           char cpuName[30];

           int cpuFrequency;

           int RAM;

};

Таким образом, мы создали свой собственный составной тип, который называется Computer. Чтобы теперь воспользоваться возможностями данного типа, необходимо создать переменную типа Computer. Чтобы обратиться к конкретному полю этого типа, необходимо после названия переменной через точку указать название поля этого типа:

Computer a; - создаем переменную a типа Computer;

strcpy(a.firm,”Lenovo”); - в поле firm переменной a копируем название фирмы «Lenovo».

strcpy(a.compName,”G580”); - в поле compName переменной a копируем название компьютера «G580».

strcpy(a.cpuName,”Celeron”); - в поле cpuName переменной a копируем название процессора «Celeron».

a.cpuFrequency=2333; - в поле cpuFrequency переменной a записываем частоту процессора – 2333 МГц.

a.RAM=4096; - в поле RAM переменной a записываем объем оперативной памяти – 4096 Мб.

Чтобы вывести на экран необходимую  характеристику, необходимо указать переменную и нужное поле:

cout<<”Частота процессора составляет ”<<a.cpuFrequency<<” МГц”;

Рассмотрим подробнее структуры на примере программы, которая будет собирать данные о 5-ти учащихся класса.

Скачайте эту программу, поместите скачанный файл STRUCT.CPP в папку C:\TCPP\BIN\.

Запустите DOSBox (Как настроить эту программу можно посмотреть ЗДЕСЬ).

Нажмите клавишу F3. Выберите файл STRUCT.CPP и нажмите клавишу Enter.

На экране появится текст программы:

Рассмотрим эту программу подробнее:

include<iostream.h>

#include<conio.h>

#include<string.h>  - подключаем модуль string.h, чтобы использовать некоторые функции для работы со строками.

struct StudentInfo{ - создаем структуру StudentInfo;

       char lastName[30]; - в этом поле будет содержаться фамилия ученика.

       char firstName[30]; - в этом поле будет храниться имя ученика.

       char middleName[30]; - в это поле будем записывать отчество ученика.

       int age; - в это поле сохраним возраст ученика.

       int nClass; - в это поле будем записывать номер класса, в котором учится ученик.

       char classLetter; - это поле будет содержать букву класса, в котором учится ученик.

}; - конец описания структуры.

void main(){

  StudentInfo SI[5]; - создаем массив с именем SI типа StudentInfo (этот тип мы описали выше), состоящий из пяти элементов.

  for(int i=0;i<5;i++){ - «пройдем» по всем элементам массива SI (от 0-го до 4-го).

     clrscr(); - очищаем экран.

     cout<<"Введине информацию об ученике №"<<i+1<<":\nФамилия: "; - предлагаем ввести данные об ученике.

     cin>>SI[i].lastName; - в поле lastName элемента с индексом i массива SI записываем фамилию учащегося, вводя ее с клавиатуры.

     cout<<"Имя: ";

     cin>>SI[i].firstName; - вводим с клавиатуры имя ученика и сохраняем в соответствующее поле.

     cout<<"Отчество: ";

     cin>>SI[i].middleName; - сохраняем введенное с клавиатуры отчество.

     cout<<"Возраст: ";

     cin>>SI[i].age; - записываем возраст,  вводя его с клавиатуры.

     cout<<"Номер класса: ";

     cin>>SI[i].nClass; - записываем номер класса.

     cout<<"Буква класса: ";

     cin>>SI[i].classLetter; - записывам букву класса.

  }

  clrscr(); - очищаем экран.

  for(i=0;i<5;i++){ -  для каждого из 5-ти учеников, выводим информацию…

    cout<<i+1<<": "<<SI[i].lastName<<" "<<SI[i].firstName<<" "<<SI[i].middleName<<"."; - …ФИО…

    cout<<" Возраст: "<<SI[i].age<<". Учится в "<<SI[i].nClass<<SI[i].classLetter<<" классе.\n"; - информацию о возрасте и классе.

  }

  getch(); - ждем нажатия любой клавиши, чтобы выйти из программы.

} – конец функции main и всей программы.

Чтобы запустить программу, нажимаем комбинацию клавиш Alt+R, выбираем в появившемся меню пункт Run и нажимаем клавишу Enter. Ни в коем случае не нажимайте для запуска программы комбинацию клавиш Ctrl+F9 – это закроет DOSBox!

Программа предлагает ввести фамилию, имя, отчество и другие данные для каждого из 5-ти учеников. Вводим эти данные с клавиатуры, каждый раз нажимая клавишу Enter:

Программа выводит данные 5 учеников:

При нажатии на любую клавишу программа закроется.

ЗАДАНИЕ: Напишите программу, которая будет запрашивать данные о 5-ти товарах, например, название товара, фирму, которая изготовила товар, его цену и год производства. После этого программа должна вывести полученную информацию на экран, аналогично примеру, рассмотренному выше.