На этом шаге мы разберем еще один составной тип данных - запись.
Необходимость введения записей рассмотрим на следующем примере. Известны фамилии и оценки (в баллах) по пяти предметам каждого из двадцати пяти учеников класса. Требуется вычислить среднюю оценку каждого из учеников и выбрать человека, имеющего максимальный средний балл.
В данном случае фамилия может быть представлена символьной строкой, оценки - это
целые числа, а средний балл должен быть представлен действительным числом. Для хранения
указанных значений могут использоваться следующие массивы:
Name : Array [1..25] Of String[30]; {Массив фамилий}
Ocenki : Array [1..25,1..5] Of 2..5; {Массив оценок}
Sr_Ball : Array [1..25] Of Real; {Массив средних значений}
Если мы разместим данные по каждому ученику в указанных массивах, то фамилия ученика будет храниться в одном массиве, оценки по предметам - в другом, средняя оценка - в третьем. Таким образом, данные, относящиеся к одному ученику, будут "разбросаны" по разным массивам.
Гораздо удобнее объединить данные, относящиеся к отдельному ученику. В этом нам поможет новый тип данных - запись.
Общий вид описания записи следующий:
Type
<имя типа>=Record
<имя_поля_1>: <тип_1>;
<имя_поля_2>: <тип_2>;
. . . .
<имя_поля_n>:<тип_n>;
End;
Var
<имя переменной>: <имя типа>;
Здесь служебное слово Record (запись) выполняет роль открывающей операторной скобки, End - закрывающей операторной скобки.
Применительно к рассматриваемой задаче запись можно описать следующим образом:
Type
Zap=Record
Name: String[30]; {фамилия}
Ocenki: Array[1..5] of 2..5; {массив оценок}
Sr_Ball:Real; {средний балл}
End;
Переменная типа Zap будет хранить структуру, содержащую информацию об одном
ученике. Чтобы сохранить в памяти компьютера информацию обо всех двадцати пяти учениках
класса, необходимо ввести массив, например, Klass, представляющий собой массив
записей:
Var
Klass: Array [1..25] Of Zap;
В памяти компьютера элементы этого массива располагаются следующим образом:
Рис.1. Расположение элементов массива
Каждый элемент массива представляет собой набор полей. Если по каким-то причинам некоторые из этих полей не заполнены, компьютер эту память не может использовать по своему усмотрению. Отсюда вывод - задавайте размеры полей так, чтобы свободного места было как можно меньше.
Подведем некоторые итоги. Для хранения полученных оценок каждым учеником мы ввели тип "запись", состоящий из трех полей:
Для размещения данных по всем 25 ученикам класса нам потребовался массив, каждый элемент которого есть запись, содержащая данные по одному ученику.
Теперь нужно заполнять наш массив данными. Мы знаем, как получить доступ к
элементу массива. Однако элементами нашего массива являются записи, а мы пока
не знаем, как обратиться к конкретному полю записи.
На следующем шаге мы рассмотрим возможные способы доступа к полям записи.