Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР Методы программирования Build1.0.pdf
Скачиваний:
97
Добавлен:
10.06.2015
Размер:
1.89 Mб
Скачать

21

People.Money

:=

1500.55;

People.Experience :=

10;

end;

 

 

Современный синтаксис позволяет создавать записи с различными вариантами полей. Будем назвать такую запись записью с вариантным полем. Синтаксис объявления выглядит следующим образом:

type <имя_типа_записи> = record <поле_1>: <тип_данных_1>; <поле_2>: <тип_данных_2>;

...

case <поле_N>: <порядковоый_тип_данных> of значение_1: (вариант 1);

...

значение_M: (вариант 2);

end;

Отличительная особенность записи с вариантным полем – наличие внутри её оператораселектора Case.

Множества

Множества представляют собой коллекцию однотипных значений. При определении множества вы можете указать диапазон значений:

type TIntSet = set of 1..10;

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

type TCharSet = set of 'A'.. 'Z';

кроме того, вы имеете право определять свои собственные элементы множества:

type TWeekDays = set of (Mo, Tu, We, Th, Fr, St, Su);

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

type TLampsSet = set of (Lamp1, Lamp2, Lamp3);

При освещении сцены осветитель в состоянии зажечь любой из прожекторов, или два, или все, короче говоря, выбрать любую понравившуюся комбинацию. Если ассоциировать прожектора с ячейками памяти компьютера, то это всего на всего три бита. Единичка в ячейке свидетельствует о включении, нолик о выключении соответствующего прожектора. Если множество содержит всего три элемента, то общее количество возможных комбинаций составляет 23=8. Зарезервированное слово Set способно определять множество размерностью до 256 элементов. Возведите 2 в

степень 256. и получите 1,1579208923731619542357098500869e+77 вариантов. На практике тако-

го количества вариаций никогда не понадобиться. В частности разработчики Delphi рекомендуют использовать множество с количеством элементов не более 16.

Представление структур в памяти

Проблема представления данных есть проблема отображения абстрактной структуры в память вычислительной машины. В первом приближении эта память представляет собой массив отдельных ячеек памяти, называемых словами (word). Индексы этих слов называются адресами

(address):

Представление массива — это отображение (абстрактного) массива компонент типа T в память, которая представляет собой массив компонент типа word.

Массив следует отображать таким способом, чтобы можно было максимально просто и потому эффективно вычислять адреса его компонент.

Адрес, или индекс памяти, i-ой компоненты массива вычисляется с помощью линейной функции отображения

i =i0 +i ×S , (1.1).

22

Где: i0 – адрес первой компоненты; S – число слов, которые занимает компонента.

Память

i 0

МАССИВ

Рисунок 1.2. – Представление массива в памяти

Так как по определению WORD есть минимальная доступная единица памяти, то, по-видимому, желательно, чтобы S было целым числом. Если S не целое число слов памяти (а так бывает довольно часто), то S обычно округляется до ближайшего большего целого числа [s]. В этом случае каждая компонента массива занимает [S] слов, причем часть слова величиной [S] - S остается неиспользованной

Округление числа занимаемых слов до ближайшего целого называется выравниванием.

Отношение размера памяти, которая отводится для описания структуры данных, к размеру действительно занятой памяти называется коэффициентом использования памяти:

u= ss' = [ss] , (1.2).

Содной стороны, разработчик стремится получить коэффициент использования памяти, близкий

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

1.Выравнивание понижает коэффициент использования памяти.

2.Отказ от выравнивания может привести к неэффективному обращению к частям слова.

3.Обращение к частям слова может удлинить программу (оттранслированную) и этим свести на нет выигрыш, достигнутый отказом от выравнивания.

Упаковкой называется приём помещения в каждое слово более одной компоненты массива

Записи отображаются в память простым объединением отображений их компонент. Адрес компоненты ri относительно начального адреса записи называется смещением ki.

ki = S1 +S2 +...+Si1 , (1.3)

где Si – размер компоненты.

Если в одно слово можно укладывать несколько компонент записи, то упаковка позволит экономить память (см. рис. 1.3).

23

Рисунок 1.3. – Представление в памяти упакованной записи

Желательность упаковки будет обозначаться словом packed перед словом array (или record).

Задание

1.Разработайте структуру данных позволяющую составлять прайс-лист магазина. В

прайс-лист входят следующие позиции: название товара, цена за единицу, единица измерения, количество.

2.Подготовьте структуру данных позволяющую создавать расписание телепередач на неделю. В расписание входят следующие позиции: день недели, номер канала, время начала передачи, название передачи, жанр передачи.

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

количество часов, вид отчётности (экзамен, зачёт, курсовая работа), оценка.

4.Предложите структуру для хранения информации о произвольной музыкальной мелодии. Помимо тона звуков, ваша структура должна уметь описывать длительность звучания каждой ноты.

Совет: При определении записей (record) и массивов (array) исследуйте какой объём памяти выделяется для ваших структур при включённом и отключённом режимах упаковки (packed). Для этого вам понадобится помощь функции:

function SizeOf(X): Integer; {возвращает число задействованных байт}

Сделайте выводы об особенностях определения структур с учётом минимизации расхода памяти.

Примечание:

Результаты работы оформляются в письменном виде. В отчетё следует схематично изобразить представление в памяти данных в упакованном и неупакованном виде.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]