Шаг 51.
Доступ к полям записи

    На этом шаге мы рассмотрим способы доступа к полям записи.

    Рассмотрим возможные способы доступа к полям записи.

    1. Указывается имя переменной типа запись и имя интересующего поля, разделённых точкой (рис.1):


Рис.1. Способ доступа к полям записи

    Ввод фамилий и оценок учащихся, то есть элементов массива Klass, можно записать так:


   For i:=1 To 25 Do
      Begin
        Readln(Klass[i].Name);
        For j:=1 To 5 Do 
            Readln(Klass[i].Ocenki[j]);
      End;

    2. С использованием оператора присоединения. Имеется возможность осуществлять доступ к полям записи таким образом, как если бы они были простыми переменными. Для этого используется оператор присоединения, общий вид которого следующий:


     With <переменная типа запись> Do <оператор>;

    Внутри оператора присоединения к компонентам записи можно обращаться, используя только имя поля:


For i:=1 To 25 Do
   With Klass[i] Do {Элемент массива записей.}
       Begin
         Readln(Name); {Имя поля.}
         For j:=1 To 5 Do 
            Readln(Ocenki[j]); {Имя поля.}
       End;   

    Приведем текст программы, реализующей сформулированную в начале предыдущего шага задачу, с использованием рассмотренных операторов.

Program Zapisi;
Type
   Zap=Record
         Name: String[30];  {Фамилия}
         Ocenki: Array[1..5] of 2..5; {Массив оценок}
         Sr_Ball:Real;  {Средний балл}
       End;
Var
    Klass:Array[1..25] Of Zap; {Массив записей}
    i,j:Integer; {Счетчики циклов}
    Sr_Ball_max:Real; {Максимальный средний балл}
Begin
    For i:=1 To 25 Do  {Ввод данных}
     With Klass[i] Do
       Begin
        Writeln('Введите фамилию и пять оценок');
        Readln(Name);
        For j:=1 To 5 Do
           Readln(Ocenki [j]);
       End;
    For i:=1 To 25 Do  {Вычисление среднего балла}
     With Klass[i] Do 
       Begin
        Sr_Ball:=0;
        For j:=1 To 5 Do
           Sr_Ball:= Sr_Ball + Ocenki[j];
        Sr_Ball:= Sr_Ball/5;  
       End;
    {Вычисление максимального среднего балла}  
    Sr_Ball_max:=0;
    For i:=1 To 25 Do
       If Klass[i].Sr_Ball>=Sr_Ball_max Then
                      Sr_Ball_max:=Klass[i].Sr_Ball; 
    Writeln('Ученики, имеющие максимальный средний балл 
        (его значение - ',Sr_Ball_max,'): ');
    For i:=1 To 25 Do  {Печать результатов}
       If Klass[i].Sr_Ball = Sr_Ball_max Then
                        Writeln(Klass[i].Name); 
    Readln;
End.
Текст этой программы можно взять здесь.


    Следующий шаг будет содержать решение задачи с использованием записей.


Предыдущий шаг Содержание Следующий шаг