- •Начальные сведения
- •Алфавит
- •Лексемы, разделители и комментарии
- •Форма Бэкуса-Наура
- •Структура программы на Паскале
- •Типы данных
- •Базовые возможности Паскаля
- •Стандартные типы данных
- •Константы
- •Конструирование типов
- •Перечисления
- •Диапазоны (интервалы)
- •Массивы
- •Описание переменных и типов данных
- •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
Константы
Константы – это значения разных типов, которые записываются непосредственно в программе. Константы стандартных типов представляются изображениями, описанными в предыдущем подразделе.
В некоторых случаях употребляется еще один вид констант – строковые константы. Это цепочка символов длиной от 0 до 255 символов, заключенных между двумя апострофами. При необходимости поместить апостроф в строковой константе, его удваивают. Во многих реализациях кроме строковых констант применяются строковые переменные. В стандартном Паскале применение строковых констант ограничено.
Паскаль предоставляет возможность объявлять именованные константы, которые затем употребляются в программе путем указания имени константы, а не ее значения. Преимущества использования именованных констант: лучшая читаемость программы, облегчение модификации программы, экономия памяти (для каждого изображения резервируются отдельные ячейки памяти, даже если они одинаковы, тогда как для именованной константы память резервируется один раз).
Именованные константы описываются в разделе описаний Const, отделяясь одно от другого точкой с запятой. Тип константы определяется типом назначенного ей значения.
<описание константы>::=<имя константы> "=" <значение константы>.
Пример раздела описания констант:
Const Pi=3.14159265; {Число Пи}
Rz=6371.0; {Средний радиус Земли в километрах}
Yes=True; No=False;
Confirm='Y'; Deny='N';
Конструирование типов
В этом разделе рассматривается пока лишь конструирование простых типов и массивов.
Перечисления
Этот тип задается упорядоченным перечислением его возможных значений. Значения этого типа – это имена констант, входящих в перечисление. Считается, что константы упорядочены по возрастанию в порядке их перечисления. Имена констант должны быть уникальными в программе (в пределах области видимости).
<перечисление>::= "(" <имя> { "," <имя> ')'.
Пример: (Su, Mo, Tu, We, Th, Fr, Sa)
Диапазоны (интервалы)
Этот тип задается как непрерывное подмножество (диапазон, интервал) значений некоторого другого ординального типа, называемого базовым типом диапазонного типа. Для задания диапазона указываются его начальное и конечное значения (включительно) в множестве значений базового типа.
<диапазон>::= <начальное значение> ".." <конечное значение>.
Здесь начальное и конечное значения – допустимые значения базового типа, причем, конечное значение старше (больше) начального.
Примеры:
0..5 – диапазон на целом типе. Значения 0, 1, 2, 3, 4, 5.
'A'..'Z' – диапазон на типе Char. Значения – большие буквы латинского алфавита.
Mo..Fr – диапазон на типе перечисления, описанном в примере предыдущего пункта.
Массивы
Массивы относятся к сложным типам данных.
Массив – это упорядоченная последовательность значений одного и того же базового типа. Базовым типом массива может быть любой тип, кроме файлового.
<массив>::= "Array" "[" <тип индекса> "]" "of" <базовый тип>.
Индекс – это порядковый номер элемента массива. Тип индекса определяет множество возможных значений индекса и количество элементов массива. Тип индекса может быть любым ординальным типом.
Примеры:
Array [1..20] of Real – массив, содержащий 20 элементов типа Real;
array [-10..50] of char – массив из 61 элемента символьного типа;
Array [Mo..Fr] of Boolean – массив, тип индекса которого задан на основе перечисления, описанного ранее. Он содержит 5 элементов булевского типа.
Поскольку базовым типом массива может быть любой тип, кроме файлового, в частности, массив может состоять из массивов. Пример:
Array [1..5] of array ['A'..'D'] of array [Boolean] of Real
Этот массив содержит 542 = 40 элементов вещественного типа.
Массивы, подобные описанному в последнем примере, называются многомерными. Для удобства описания таких массивов в Паскале предусмотрено сокращенное описание:
<массив>::= "Array" "[" <тип индекса> {"," <тип индекса> }"]" "of" <базовый тип>.
С помощью такого синтаксиса, последний пример может быть записан таким образом:
Array [1..5, 'A'..'D', Boolean] of Real