Кстати, об операторах.
Вызов процедуры
имя(аргументы);
имя();
имя(аргументы) – вызов функции в выражениях
Возврат из процедуры
return;
return выражение;
Семантика
– в процедуре может быть несколько операторов return
– второй вид оператора допускается только в функции
– тип выражения должен совпадать или приводиться к типу возвращаемого значения функции
Условный – традиционный
Код:
если выражение то
операторы;
конец;
--------------------------------------------------------------
если выражение то
операторы;
иначе
операторы;
конец;
--------------------------------------------------------------
если выражение то
операторы;
аесли выражение то
операторы;
…
иначе
операторы;
конец;
Семантика
Выражение является булевским
В многоветочном операторе булевские выражения являются взаимоисключающими
Поэтому выполняется только одна из веток аесли
Если все выражения ложны, то выполняется ветка иначе
Дейкстра
Синтаксис требует уточнения
Код:
if
| условие: операторы;
| условие: операторы;
…
| условие: операторы;
end;
Этот же оператор является переключателем – семантика Дейкстры.
Условие – булевское выражение
Условия в операторе не являются взаимоисключающими
Поэтому выполняются те группы операторов, у которых условия истинны
Оператор позволяет задавать одиночный if:
Код:
if | условие: операторы;
end;
Обычный двухветочный if эквивалентен:
Код:
if | условие: операторы;
|~условие: операторы;
end;
Вариант: представляется более подходящим; ветка иначе не является обязательной
Код:
if
| условие: операторы;
| условие: операторы;
…
| условие: операторы;
else
операторы;
end;
Семантика: если не выполняется ни одно из условий, то выполняется ветка else
Цикл
Цикл с предусловием
Код:
while выражение do
операторы;
end;
Цикл с постусловием
Код:
repeat
операторы;
until выражение end;
Вопрос: какой-то вариант цикла со счетчиком? Или типа foreach ?
Дейкстра --- требует принятия конкретного решения
Код:
do
| условие: операторы;
| условие: операторы;
…
| условие: операторы;
end;
Семантика: цикл выполняется, пока есть хотя бы одно истинное условие
вариант: представляется более подходящим; ветка иначе не является обязательной
Код:
do
| условие: операторы;
| условие: операторы;
…
| условие: операторы;
else
операторы;
end;
Семантика: если нет ни одного истинного условия, то выполняется ветка else и цикл завершается
Цикл while:
Код:
do
| условие: операторы;
end;
цикл do while (repeat):
Код:
do
| true: операторы; ---- так нельзя по семантике Дейкстры…
| условие:
end;
вариант: true можно пропускать вместе со скобками
Код:
do
|операторы; ---- так нельзя по семантике Дейкстры…
| условие:
end;
Цикл Паук – упрощённый
Код:
do
|операторы; – выполняются без условий ???
| условие: операторы;
| условие: операторы;
…
| условие: операторы;
|операторы; – выполняются без условий ???
end;
Определение процедуры – независимая
Код:
процедура (параметры) имя; || функция (параметры): тип имя;
Операторы;
Конец имя;
Семантика
1. тип может отсутствовать, тогда это процедура.
2. Все объекты, объявленные внутри, являются локальными
3. локальные объекты объявляются в любом месте по мере необходимости
----------------------- этого пока нет ---------------------------
Вопрос: 1. Локальная запись в процедуре – разрешено ?
2. Локальные процедуры – разрешено ?
----------------------------------------------------------------------
Параметры
– тип параметра может быть любым:
1. – базовые
2. – запись
3. – массив
4. – процедура
5. – указатель на запись
– Параметры-значения и параметры переменные;
– Параметры значения могут быть только базовые; при вызове процедуры на месте параметра-значения разрешается задавать выражение, совместимое по типу с параметром
– Параметры-переменные – любого типа
– параметр-массив передаётся без указания размера
– параметры-переменные входной, выходной, переменный
–
Возвращаемые значения
– нельзя возвратить массив
Внимание!
Массив нельзя возвратить. Если разрешить возвратить массив, то разрешаются, как минимум присваивания с массивами.
Модули
Код:
модуль имя
Элементы модуля
начало
операторы
конец имя.
Оператор
Код:
подключить модуль, модуль, …
Английское слово
import
Ключевое слово доступно
Ключевое слово uses
Модуль определяет:
- пространство имён
- единица трансляции-загрузки-выполнения
Программа = набор модулей
Пространство имён:
- любые поименованные объекты – секция объявлений
- имена видны с момента объявления
- имена локальны в модуле по умолчанию
- имя можно явно объявить публичным (видимым в других модулях) – public
- доступ к публичным именам другого модуля определяется оператором import
Единица трансляции
- модуль строится в процессе редактирования - трансляции не требуется
- правильно построенный модуль может быть сразу выполнен
- оператор import определяет необходимые загружаемые модули
- выполнение начинается с операторов секции инициализации модуля
Вопрос: объявления констант и переменных в секции инициализации ?
Секция инициализации – это неименованная процедура, выполняемая первой.
Объявленные в ней переменные являются локальными.
В этой секции может стоять вызов любой процедуры-функции-метода, определённой в секции объявлений.
Один документ = один модуль
В документе перед, после и внутри модуля могут быть заданы узлы текста:
# Текст #
Вопрос, требующий решения:
Формат сохранения самого модуля и сопутствующих данных (таблица имен ?)