- •Начальные сведения
- •Алфавит
- •Лексемы, разделители и комментарии
- •Форма Бэкуса-Наура
- •Структура программы на Паскале
- •Типы данных
- •Базовые возможности Паскаля
- •Стандартные типы данных
- •Константы
- •Конструирование типов
- •Перечисления
- •Диапазоны (интервалы)
- •Массивы
- •Описание переменных и типов данных
- •Var a,b,c: Real; {описаны переменные вещественного типа}
- •I,j,k,l,m,n:Integer; {описаны переменные целого типа}
- •Оператор присваивания
- •Условные операторы
- •Оператор If
- •Оператор Case
- •Операторы цикла
- •Цикл While
- •Цикл Repeat-Until
- •Цикл For
- •Оператор безусловного перехода и метки
- •Пустой оператор
- •1: End; {конец тела цикла с помеченным пустым оператором}
- •Процедуры и функции
- •Описание
- •Список формальных параметров
- •Вызов процедур и функций
- •Локализация (области видимости) имен. Глобальные и локальные объявления.
- •Статическое и динамическое выделение памяти переменным
- •Рекурсия и опережающее описание
- •Стандартные функции
- •Стандартные процедуры
- •Стандартный ввод-вывод
- •Сложные типы данных и их использование
- •Квалификаторы
- •Конструкция записи, тип записи и переменная типа запись
- •Id:Person; {личные данные}
- •Id:Person; {личные данные}
- •Index: Ch; {Название/номер группы}
- •Использование записей в программе
- •Оператор With
- •Записи с вариантными полями
- •0:(I:Integer) {Два байта как одно поле Integer}
- •1:(Lo,hi:Char); {отдельно младш. И старш. Байты}
- •Var e: Integer; {в этой переменной будем менять байты}
- •Указатели и динамические структуры данных
- •Определение и описание
- •I:integer; {Информационное поле}
- •Var p,q:Point; {переменные-указатели на записи типа Rec}
- •Использование указателей и динамических переменных
- •Создание и уничтожение динамических переменных
- •Простейшие динамические структуры
- •Множества
- •Назначение и описание
- •Константы типа множество
- •Операции с множествами
- •Назначение и описание
- •Работа с файлами
- •Файлы типа Text
Сложные типы данных и их использование
В предыдущем разделе уже рассмотрен один вид сложных типов данных – массивы. Здесь рассматриваются записи, множества и файлы. Также здесь рассматриваются указатели, которые, вообще говоря, не относятся к сложным типам, но применяются преимущественно с данными сложных типов, в основном, записями, для построения динамических структур данных.
Квалификаторы
Ранее упоминалось, что к элементу переменной сложного типа можно обратиться с помощью квалификатора следующим образом:
<доступ к элементу>::= <имя> [<квалификатор>].
Поскольку элемент переменной сложного типа сам может быть переменной сложного типа, может возникнуть необходимость обращения к элементу элемента. И так далее. Поэтому квалификатор определяется рекурсивно следующим образом:
<квалификатор>::=("["<список индексов>"]" | "."<имя поля> | "^"){<квалификатор>}.
Таким образом, квалификаторы могут быть трех видов. Первый вид уже описан в предыдущем разделе, он используется для доступа к элементам массивов, второй вид используется для доступа к элементам записей, третий вид используется для доступа к переменным, на которые указывает переменная типа указатель. Подробнее о квалификаторах доступа к элементам записи и доступа по указателю – в соответствующих подразделах.
Как следует из синтаксиса, за одним квалификатором может, при необходимости, следовать другой, что обеспечивает доступ к элементам переменных сколь угодно сложной структуры.
Записи
Запись – это переменная, состоящая из нескольких элементов (полей) данных разного типа.
Запись – удобный способ представления объектов реального мира в программе. Реальные объекты характеризуются набором атрибутов (признаков, свойств, характеристик), представляемых данными разного типа – числовыми и нечисловыми (качественные, идентификационные, логические). В записи все разнородные атрибуты, относящиеся к одному объекту, объединяются вместе. Таким образом, программист видит в своей программе объект реального мира как одно целое, но при этом у него есть возможность отдельного доступа к каждому из атрибутов каждого из объектов.
Конструкция записи, тип записи и переменная типа запись
Синтаксис конструкции записи:
<конструкция записи>::="Record" <описание полей>";"<описание полей> "End".
<описание полей>::=<имя>{","имя} ":" (<имя типа>|<конструкция типа>).
Тип в описании полей может быть любым, кроме файлового. В одном описании может быть описано несколько полей одного типа. Поля разного типа описываются в разных описаниях полей. Имена полей должны быть уникальными в пределах записи.
Тип записи и переменные типа запись описываются так же, как любые другие типы и переменные, соответственно (см. Описание переменных и типов данных). Целесообразно вначале сконструировать тип записи и присвоить ему имя в разделе Type, а затем объявлять переменные соответствующего типа в разделе Var.
Пример. Разделы описаний типов и переменных:
Type Ch=Array [1..16] of Char;
Person=Record {данные о человеке}
Surname, {Два поля одного типа –}
Name:Ch; {фамилия и имя}
Gender:(Male, Female); {пол – муж./жен.}
Age:Integer {Возраст, лет}
End;
StudentR=Record {данные о студенте}