![]() |
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
О проекте
|
Тема: Комбинированный тип данных. Запись. Описание записи. Доступ к полям записи. Оператор With. Примеры решения задач.Довольно часто вполне оправданным является представление некоторых элементов в качестве составных частей другой, более крупной логической единицы. представляется естественным сгруппировать информацию о номере дома, названии улицы и городе в единое целое и назвать адресом, а объединенную информацию о дне, месяце и годе рождения - датой. В языке Паскаль для представления совокупности разнородных данных служит комбинированный тип запись. Запись и массив схожи в том, что обе эти структуры составлены из ряда отдельных компонент. В то же время, если компоненты массива должны быть одного типа, записи могут содержать компоненты разных типов. Приведем пример описания переменной, имеющей структуру записи:
Отметим, что поля StreetName и CityName имеют одинаковый тип: String[20]. Поскольку в описании эти поля могут располагаться в любом порядке, то можно сократить описание записи с полями одинакового типа. Сокращенное описание записи Address выглядит следующим образом:
Каждая компонента записи называется полем. В переменной записи Address поле с именем HouseNumber само является переменной типа Integer, поле StreetName - двадцатисимвольной строкой и т.д. Для того чтобы обратиться к некоторому полю записи, следует написать имя переменной и имя поля. Эти два идентификатора должны разделяться точкой. Оператор, который присваивает полю HouseNumber значение 45, выглядит так:
Таким же образом присваиваются значения другим полям записи Address :
Каждое поле записи Address можно рассматривать как обычную переменную, которую можно напечатать или использовать в расчетах. Вместе с тем запись может использоваться как единое целое. В этом случае надо ввести тип записи. Предположим, имеется следующее описание:
После приведенного описания переменные HisBirth и MyBirth имеют тип записи Date. Помимо действий над отдельными полями записей HisBirth и MyBirth можно выполнять операции над всей записью. Следующий оператор присваивания устанавливает равенство значений записей HisBirth и MyBirth :
Это присваивание эквивалентно следующей последовательности операторов:
Для переменных одного типа можно проверить выполнение отношения равенства или неравенства ("=", "<>"). После выполнения приведенных выше присваиваний следующее булево выражение будет иметь значение True:
Рассмотрите пример описания процедуры, которая получает запись в качестве параметра-значения и печатает дату в сокращенной стандартной форме, используя формат (MM-DD-YYYY).
Так как на тип компонент массива не накладывается ограничений, то можно использовать массив, компонентами которого являются записи. Посмотрите описание такого массива:
Чтобы обратиться к некоторому полю определенной записи массива, следует определить имя массива, индекс интересующей записи и имя необходимого поля. Например, следующий оператор печатает содержимое поля Year записи Birthdays[3]:
Примечание. Поля записи в свою очередь тоже могут быть массивами, множествами, записями. Задание. Рассмотрите следующие описания:
Запишите в тетрадь, какой тип, если он определен, у следующих идентификаторов?
Задание. Составьте программу, организующую ввод наиболее полной информации о людях и вывод интересующей информации на экран. Приведем описание массива, компоненты которого являются записями:
Отметим, что два поля Residence и Phone являются записями. Как выполнить обращение к полям этих записей? Как распечатать условный шифр рабочего № 7? Поскольку это поле располагается во вложенной записи, то следует указать как имя самой записи, так и имя записи, в которую данная запись входит.
Аналогично приведенное присваивание корректирует шифр рабочего № 23:
Оператор if, представленный ниже, выполняет проверку инициала рабочего № 58:
Соблюдение всех правил перечисления индексов и имен полей при составлении ссылок является довольно утомительным занятием, часто приводящим к ошибкам. В некоторых программах, содержащих большое количество обращений к одному и тому же полю, такое положение приводит к однообразному повторению. Чтобы облегчить выполнение многократных ссылок для описанных структур вводится оператор With (в переводе с английского - предлог "с"). Общая форма записи:
В рамках оператора, определяемого внутри оператора With, к полям определяемой переменной можно обращаться просто по имени. Например,
Оператор with позволяет более компактно представлять часто используемые переменные. Посмотрите это на примере фрагмента программы, печатающего адрес рабочего № 14:
В рамках составного оператора, следующего за with, каждое обращение к имени поля автоматически связывается с записью Payroll[14].Residence. Печать адресов всех рабочих выполняется при помощи следующего оператора цикла:
Операторы with могут быть вложенными. Приведенные ниже три оператора эквивалентны друг другу:
Однако недопустимым является использование вложенных операторов With, в которых указываются поля одного типа, поскольку возникает неоднозначность конструкции. По этой причине приведенное использование вложенных операторов With является неверным:
Следует очень внимательно подходить к использованию вложенных операторов With, применение которых не только может привести к ошибкам, но также к потере наглядности структуры программы. Хотя оператор With является стандартным средством сокращения, его полезность должна еще проявиться. Конечной целью всякого хорошего программиста является написание не только короткой, но и понятной программы. Рассмотрите решение задачи. Задача. В массиве хранятся данные об учениках класса: школа, фамилия, класс. Вывести список учеников, которые учатся в восьмом классе.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Проект «Pascaler» лучший на ХI Всероссийской конференции молодых исследователей с международным участием «Шаг в будущее», Россия, Москва, 12 – 16 апреля 2004г.
|