#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
- 1792 reads