Запись в Pascal. Работа с записями. Прямой доступ к записям

Комбинированный тип данных.

При работе с массивами основное ограничение заключается в том, что каждый элемент должен иметь один и тот же тип. Но при решении многих задач возникает необходимость хранить и обрабатывать совокупности данных различного типа.
Пример
Для каждого из 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;

Примечания 

  1. Имена полей, составляющих запись, не должны повторяться. 
  2. Каждое поле записи может иметь любой тип (кроме файлового), в частности, оно может быть снова

Доступ к полям записи 

Его можно осуществить двумя способами.
  1. Указанием имени переменной и имени поля.
    Например
    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;
    
  2. Использованием оператора присоединения, который позволяет осуществлять доступ к полям записи, таким образом, как если бы они были простыми переменными.
    Его общий вид: With <имя записи> Do <оператор>.
    Внутри оператора к компонентам записи можно обращаться только с помощью имени соответствующего поля.
    Пример
    For i : = 1 To 25 Do
      With klass [i] Do
        Begin
          Readln (fam);
          ReadLn (b1,b2,b3,b4,b5);
        End;