#19 Записи в Паскале (Record): Оператор присоединения with do
Primary tabs
Что такое записи
Запись - специальная структура данных в Паскале, которая представляет собой фиксированный набор полей с указанными типами.
Если переменную указанного типа можно сравнить с коробкой специальной формы/размера, то запись можно сравнить с пеналом (напр. школьным) - т.е. специальным хранилищем, в котором есть отделения под конечный набор хранимых предметов (причем предметы эти могут быть в т.ч. разного типа).
Объявление записей, составное имя
Прежде чем объявлять запись (переменную такого типа), необходимо объявить определить ее тип, для этого используется секция объявления типов type (по аналогии с тем как мы это делали для массивов).
Как уже более-менее опытные программисты, давайте сразу перейдем к примеру:
type
// объявим свой тип "TPhoneItem", котроый является записью
TPhoneItem = Record // Начало объявления типа TPhoneItem
Name: string[20];
Tel: string[10];
end; // конец объявления типа записи
var
// объявим одну переменную нашего типа TPhoneItem
student1: TPhoneItem;
begin
// заполним ее поля данными
student1.Name := 'Ivan';
student1.Tel := '+79456754';
// распечааем содержимое полей
writeln(student1.Name, ' ', student1.Tel);
end.
-- а данном случае в нашей записи мы объявили два поля, как строковые переменные с фиксированной длиной (можно было бы использовать и обычный тип string)
Обратите внимание как мы обращаемся в этом же примере к полям записи - мы используем сначала имя записи, а потом имя поля, например:
student1.Name
-- такое имя называется составным.
Оператор Присоединения with ... do - упрощение синтаксиса работы с записью
Чтобы сэкономить усилия и писать меньше кода, не упоминая каждый раз составную часть имени придумали оператор with do, пример выше можно было бы переписать так:
type
TPhoneItem = Record
Name: string[20];
Tel: string[10];
end;
var
student1: TPhoneItem;
begin
with student1 do begin // работаем с student1
Name := 'Ivan';
Tel := '+79456754';
end;
writeln(student1.Name, ' ', student1.Tel);
end.
Или даже так:
type
TPhoneItem = Record
Name: string[20];
Tel: string[10];
end;
var
student1: TPhoneItem;
begin
with student1 do begin // работаем с student1
Name := 'Ivan';
Tel := '+79456754';
writeln(Name, ' ', Tel);
end;
end.
Задачи для самостоятельного решения
- Получите случайный набор из 5 чисел, величиной от 1 до 50.
Рассчитайте для каждого числа два его наибольших делителя, число и два делителя храните как запись, а для всего набора используйте массив записей.
Используйте в коде do withВыведите на экран результаты расчетов для каждого из исходных значений
Что еще почитать
- Сергеев А.Н. Turbo Pascal 7.0 Электронный учебник для студентов и школьников: http://mif.vspu.ru/books/pascal/records....
- Log in to post comments
- 2558 reads