Тип данных запись позволяет объединять разнотипные данные.
Запись – это совокупность компонентов разного типа. Компонент записи называется ее полем. Каждое поле имеет уникальное имя.
Обработка записей в языке Турбо Паскаль:
6. Описание нового типа данных - запись:
a. Описание типа:
Type <имя типа>= Record
<имя поля 1> :<тип поля 1>;
…
<имя поля N> :<тип поля N>
End;
Если несколько полей имеют одинаковый тип, их имена можно перечислить через запятую.
b. Описание переменной типа запись:
Var<имя переменной> : <имя описанного выше типа>;
Например:
Type Book = Record { тип данных книга состоит из трех полей }
Name, Author : String [ 30 ]; { название и автор }
Year : Integer { год издания }
End;
Var Bk : Book; { Переменная Bk – запись с тремя полями }
7. Обращение к полям записи:
Для обращения к отдельному полю записи следует сначала указать имя переменной типа запись, затем через точку имя поля. Например: Bk.Name.
Для ввода значений полей описанной выше записи Bk может быть записан следующий фрагмент программы:
Write (‘Введите название книги ’); Readln (Bk.Name);
Write (‘Введите фамилию автора ’); Readln (Bk.Author);
Write (‘Введите год издания книги ’); Readln (Bk.Year);
При многочисленных обращениях к полям одной и той же записи можно использовать оператор присоединения With.
With <имя переменной-записи> Do
<составной оператор>;
Оператор With позволяет «вынести за скобки» имя переменной-записи. Приведенный выше фрагмент программы можно переписать с использованием оператора присоединения:
With Bk Do
Begin
Write (‘Введите название книги ’); Readln (Name);
Write (‘Введите фамилию автора ’); Readln (Author);
Write (‘Введите год издания книги ’); Readln (Year)
End;
Примеры решаемых задач
Пример 1. Составить программу, которая обрабатывает информацию о студентах (фамилия, номер группы, рейтинг):
а) вводит такую информацию;
б) выводит список студентов заданной группы;
в) выводит список студентов в порядке убывания рейтинга.
Пояснение: Для хранения данных будем использовать массив записей с информацией о студентах. (При решении этой задачи можно и не использовать тип запись, а написать программу, обрабатывающую три массива. Без использования типа Record трудно обойтись при обработке файлов – см. следующую тему.)
Программа:
Program Record_Student;
Uses Crt;
Const N = 100; { N - максимальное количество студентов }
Type Stud = Record {данные об одном студенте–запись из трех полей:}
Name : String; { фамилия}
Group : Integer; { номер группы}
Rating : Real { рейтинг }
End;
Students = Array [1..N] Of Stud; { данные обо всех студентах - }
{ это массив записей }
Var St : Students; { список студентов – массив записей }
K, M, L, Gr : Integer;
Pst : Stud; { промежуточная переменная, необходимая для того, }
{чтобы менять местами два элемента массива при его сортировке}
Begin
ClrScr;
{ а) Ввод данных о студентах }
Write (‘Сколько студентов ’);
Readln (M);
For K := 1 To M Do
With St [K] Do { вводим все поля записи St[K] }
Begin
Write (‘Введите фамилию ’,K,’ студента ‘);
Readln (Name);
Write (‘Введите номер его группы ‘);
Readln (Group);
Write (‘Введите его рейтинг ‘);
Readln (Rating)
End;
{ б) Вывод списка заданной группы }
Write (‘Список какой группы требуется ’);
Readln (Gr);
Writeln(‘Список группы № ‘,Gr);
For K := 1 To M Do { просматриваем весь список }
With St [K] Do
If Group = Gr { если номер группы студента равен требуемому}
Then Writeln (Name:20); { то печатаем его фамилию }
{ в) Сортировка студентов по их рейтингу }
For K := 1 To M – 1 Do
For L := K + 1 To M Do
If St[L]. Rating > St[K]. Rating
Then Begin
Pst:= St[L];
St[L]:=St[K];
St[K]:=Pst
End;
{ вывод отсортированного списка}
Writeln (‘Список студентов в порядке убывания рейтинга:’);