Комбинированный тип данных.
При работе с массивами основное ограничение заключается в том, что каждый элемент должен иметь один и тот же тип. Но при решении многих задач возникает необходимость хранить и обрабатывать совокупности данных различного типа.
Пример
Для каждого из 25 учеников класса известны фамилия и оценка (в баллах) по пяти дисциплинам. Требуется вычислить среднюю оценку каждого ученика и выбрать человека, имеющего максимальный средний балл.В данном случае фамилия может быть представлена строкой из 15 символов, оценка - это целое число, а средний балл должен быть представлен вещественным (действительным) числом. В Паскале для описания комбинаций объектов разных типов используются записи.
Запись
Запись - это структурированный тип, содержащий набор объектов разных типов. Составляющие запись объекты называются ее полями. В записи каждое поле имеет свое собственное имя. Чтобы описать запись, необходимо указать ее имя, имена объектов, составляющих запись и их типы.Общий вид такой:
Type "имя записи" = Record "поле 1" : "тип 1";... "поле n" : "тип n" End;Данные для решения рассматриваемой задачи можно описать как запись следующим образом:
Type pupil = Record fam: String[15]; {поле фамилии ученика} b1, b2, b3, b4, b5 : 2...5; {поля баллов по дисциплинам} sb : Real {поле среднего балла} End;Переменная типа pupil будет иметь смысл структуры, содержащий информацию, характеризующую одного ученика. Чтобы хранить в памяти ЭВМ информацию о всех 25 учениках класса, необходимо ввести массив klass, представляющий массив записей:
Var klass : Array[1.25] Of pupil;
Примечания
- Имена полей, составляющих запись, не должны повторяться.
- Каждое поле записи может иметь любой тип (кроме файлового), в частности, оно может быть снова
Доступ к полям записи
Его можно осуществить двумя способами.- Указанием имени переменной и имени поля.
Например
klass[2].fam, klass[3].sb, klass[1].b4.
Поэтому ввод фамилий и оценок учащихся, то есть элементов массива klass, можно задать так:For i: = 1 To 25 Do Begin Readln(klass[i].fam); Readln(klass[i].b1); Readln(klass[i].b2); Readln(klass[i].b3); Readln(klass[i].b4); Readln(klass[i].b5); End;
- Использованием оператора присоединения, который позволяет осуществлять доступ к полям записи, таким образом, как если бы они были простыми переменными.
Его общий вид: With <имя записи> Do <оператор>.
Внутри оператора к компонентам записи можно обращаться только с помощью имени соответствующего поля.
ПримерFor i : = 1 To 25 Do With klass [i] Do Begin Readln (fam); ReadLn (b1,b2,b3,b4,b5); End;