Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Краткий обзор структур (записей)




Предположим, что нужно сохранить информацию об игроке в баскетбол. Сюда входят следующие данные: имя, заработок, рост, вес, средний рейтинг, процент попаданий и т.д. Хотелось бы иметь некоторую форму данных, которая может содержать всю эту информацию в одном блоке. Массив для этого не годится, поскольку все его элементы должны быть одного типа. Иначе говоря, один массив может содержать двадцать элементов типа Integer, а другой — десять элементов типа Real, но один и тот же массив не может содержать элементы типа Integer и Real.

Решение состоит в применении структуры. Структура — более универсальная форма данных, чем массив, поскольку может содержать элементы, относящиеся к различным типам данных. Использование структуры позволяет унифицировать представление данных путем сохранения всей связанной с баскетболистом информации в единственной переменной структуры, а для ведения данных по целой команде можно использовать массив структур. Тип структуры также служит мостиком к классу, который является основой ООП (объектно - ориентированного программирования). Изучение структур позволит нам гораздо глубже понять, что представляет собой класс.

Структура (запись) — определяемый пользователем тип данных. Объявление структуры (записи) служит для того, чтобы задавать свойства типов данных. После определения типа можно создавать переменные этого вновь созданного типа. Таким образом, создание структуры предусматривает два этапа. Сначала создается описание структуры. При этом описываются и именуются различные типы данных, которые могут содержаться в структуре. Затем можно создавать структурные переменные или, более обобщенно, структурные объекты данных, которые соответствуют схеме описания.

Предположим, компания Bloataire хочет создать некий тип для описания видов надувных изделий. В частности, этот тип должен содержать название изделия, его объем в кубических футах и цену. Ниже приведено описание структуры, удовлетворяющей перечисленным условиям:

Type

TInflatable = record

name: String;

volume: Integer;

price: Real;

end;

Ключевое слово record указывает на то, что код определяет компоновку записи. Идентификатор TInflatable — имя, или дескриптор, для этой формы. Таким образом, TInflatable представляет собой имя нового типа данных. Теперь можно создавать переменные типа TInflatable так же, как переменные типа char или integer. Между словами record и end; находится список типов данных, которые будут содержаться в структуре. Каждый элемент списка — это оператор объявления. Здесь можно использовать любой из типов данных, включая массивы и другие структуры. В этом примере применяется тип String для сохранения строки, а также Real и Integer. Каждый отдельный элемент в списке называется элементом структуры или полем записи, так что структура
TInflatable включает три элемента.

Когда шаблон готов, можно создавать переменные данного типа:

Var

hat, vincent: TInflatable; // структурные переменные типа TInflatable

Поскольку переменная hat имеет тип TInflatable, для обращения к отдельным элементам можно использовать оператор принадлежности (.). Например, выражение hat.volume указывает на элемент volume структуры, a hat.price — на элемент price. Аналогично vincent.price — элемент price переменной vincent. Итак, имена элементов предоставляют возможность обращения к элементам структуры во многом подобно тому, как индексы позволяют обращаться к элементам массива. Поскольку элемент price объявлен как тип Real, элементы hat.price и vincent.price эквивалентны переменным типа Real, и их можно использовать так же, как используется обыкновенная переменная типа Real. Таким образом, hat — это структура, но hat.price — элемент типа Real.

Программа 3_2

// простая запись

program Project1;

{$APPTYPE CONSOLE}

Uses

SysUtils;

Type

TInflatable = record

name: String;

volume: Real;

price: Real;

end;

Var

Guest: TInflatable = (name: 'Glorious Gloria'; volume: 1.88; price: 29.99);

Pal: TInflatable = (name: 'Audacious Arthur'; volume: 3.12; price: 32.99);

r: Real;

Begin

Writeln('Expand your guest list with ', Guest.name, ' and ', Pal.name);

r:= Guest.price + Pal.price;

Writeln('You can have both for $', Format('%G', [Guest.price+Pal.price]),'!');

Readln;

end.

Результат:

Expand your guest list with Glorious Gloria and Audacious Arthur

You can have both for $62,98!

Другие свойства структур

Определяемые пользователем типы настолько близки по свойствам к встроенным типам, насколько это возможно. Например, можно передавать структуры функциям в качестве аргументов, а также использовать структуру, как возвращаемое значение функции. Кроме того, допускается использование оператора присвоения (=), чтобы присвоить значение одной структуры другой структуре того же типа. Такое действие приводит к тому, что каждому элементу одной структуры будет присвоено значение соответствующего элемента другой структуры, даже если этот элемент — массив. Данный вид операций называется поэлементным присваиванием.

Программа 3_3

// присвоение значений структурам

program Project1;

 

{$APPTYPE CONSOLE}

 

Uses

SysUtils;

Type

TInflatable = record

name: String;

volume: Real;

price: Real;

end;

Var

Bouquet: TInflatable = (name: 'Sunflowers'; volume: 0.20; price: 12.49);

Choice: TInflatable;

 

Begin

Writeln('Bouquet: ', Bouquet.name, ' for $', Bouquet.price:0:2, '! ');

Choice:= Bouquet; //присвоение значения одной структуры другой структуре

Writeln('Choice: ', Choice.name, ' for $', Choice.price:0:2, '!');

 

Readln;

end.

Результат:

Bouquet: Sunflowers for $12.49!

Choice: Sunflowers for $12.49!

Как видим, здесь выполнено поэлементное присваивание: элементам структуры choice присвоены те же самые значения, что хранились в структуре bouquet.

Массивы структур

Можно также создавать массивы, элементы которых будут структурами. Методика — точно такая же, как и при создании массивов базовых типов данных. В следующем примере создается массив из 100 структур
TInflatable:

var

Gifts: array [1..100] of TInflatable;

В результате будет создан массив Gifts типа TInflatable. Следовательно, каждый элемент массива, такой как Gifts[1] или Gifts[100], — это объект типа TInflatable, и его можно использовать с оператором принадлежности:

WrietLn(Gifts[1].volume); //используется элемент volume первой структуры

WrietLn(Gifts[100].price); //отобразить элемент price последней структуры

Передача структур функциям

Программа 3_31

program Project1;

 

{$APPTYPE CONSOLE}

 

Uses

SysUtils;

Type

TPers = record

Fam: string;

Year: Integer;

end;

Var

Pers: TPers;

 

procedure p(Zap: TPers);

Begin

Writeln(Zap.Fam + ' ' + IntTostr(Zap.Year));

end;

 

Begin

Pers.Fam:= 'Ivanov';

Pers.Year:= 1997;

p(Pers);

Readln;

end.

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...