- •Начальные сведения
- •Алфавит
- •Лексемы, разделители и комментарии
- •Форма Бэкуса-Наура
- •Структура программы на Паскале
- •Типы данных
- •Базовые возможности Паскаля
- •Стандартные типы данных
- •Константы
- •Конструирование типов
- •Перечисления
- •Диапазоны (интервалы)
- •Массивы
- •Описание переменных и типов данных
- •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
Множества
Назначение и описание
Данные типа множества реализуют в Паскале математическое понятие конечных множеств. В Паскале множество может состоять из нескольких элементов одного и того же типа, который является базовым типом множества, либо может не содержать ни одного элемента (пустое множество).
Значение переменной типа множество – это перечень в произвольной последовательности тех элементов, из которых это множество состоит.
Синтаксис конструкции типа множество:
<конструкция множества>::="Set" "of" <базовый тип>.
Здесь базовый тип – любой ординальный тип. Значения базового типа – это возможные элементы множества. Количество значений базового типа определяет наибольшее количество элементов множества.
В действительности в реализациях Паскаля наибольшее количество элементов множества ограничено, поэтому базовым типом множества может быть не любой ординальный тип, а только такой тип, количество значений которого не превышает допустимое количество элементов множества.
Например, в системе Turbo Pascal базовый тип множества должен иметь не более 256 возможных значений, поскольку для представления множества выделяется 32 байта. Более того, ординальные значения базового типа (то есть, значения, возвращаемые функцией Ord) должны быть в пределах от 0 до 255. Например, базовым типом множества в Turbo Pascal может быть тип Char, имеющий 256 значений, любой диапазон на типе Char, диапазонный тип на типе Integer 0..255, или любой другой диапазон с наименьшим и наибольшим значениями в пределах от 0 до 255, тип Boolean, любое перечисление с количеством значений не более 256.
Пример. Следующие описания допустимы в Turbo Pascal:
Type Coins=(One, Two, Five, Ten, TwentyFive, Fifty);
Var Purse: Set of Coins;
CharSet: Set of Char;
CapitalLetters: Set of 'A'..'Z';
ByteSet: Set of 0..255;
TopTwenty: Set of 1..20;
Следующие описания, допустимые в стандартном Паскале, недопустимы в Turbo Pascal и в большинстве других реализаций.
Var Balance: Set of –10..10;
IntSet: Set of Integer;
Здесь в обоих описаниях ординальные значения базовых типах выходят за разрешенный диапазон 0–255.
Константы типа множество
Множество задается перечислением элементов, входящих в него, и являющихся допустимыми элементами этого множества. В Паскале такое перечисление описывается специальным синтаксическим элементом, называемым изображением множества (иногда называется также конструктором множества).
<изображение множества>::="[" [<элемент> {","<элемент>}]"]".
<элемент>::=<константа> | <константа>..<константа>.
Здесь элемент – это значение или диапазон значений одного и того же типа, который является базовым для соответствующего изображения множества. Само изображение множества состоит из квадратных скобок, в которых через запятую перечисляются элементы. Изображение множества совместимо по типу с переменной-множеством в том случае, если у них один и тот же базовый тип, либо элементы изображения входят в диапазон значений базового типа переменной-множества. Порядок перечисления элементов множества произвольный.
Если в реализации Паскаля действуют ограничения на допустимые базовые типы множеств, они применимы и к элементам в изображении множества.
Если в изображении множества не указан ни один элемент, то это изображение пустого множества. Изображение пустого множества совместимо по типу с переменными-множествами любых базовых типов.
Пример (на основе описаний в предыдущем пункте):
CharSet:=['+','-','.',',','A'..'Z','0'..'9'];
CapitalLetters:=['A'..'Z'];
Purse:=[];
ByteSet:=['0','4','2'];