- •Глава 5
- •5.1. Простые операторы
- •5.1.1. Оператор присваивания
- •5.1.2. Оператор процедуры
- •5.1.3. Оператор перехода
- •5.1.4. Пустой оператор
- •5.2. Структурные операторы
- •5.2.1. Структурограммы (схемы Насси - Шнейдермана)
- •5.2.2. Составной оператор
- •5.2.3. Форматирование Паскаль-программ
- •5.2.5. Оператор варианта
- •5.2.6. Оператор цикла с параметром
- •5.2.7. Оператор цикла с постусловием
- •5.2.8. Оператор цикла с предусловием
Глава 5
5.1. Простые операторы
5.1.1. Оператор присваивания
Является основным оператором. Имеет вид: a := V , где a - переменная, V - выражение.
Типы переменной a и выражения V должны совпадать. Исключе-ние: переменной вещественного типа можно присваивать значение выражения целого типа.
5.1.2. Оператор процедуры
Оператор процедуры - это имя процедуры, за которым в круглых скобках следует список фактических параметров .
Отметим упоминавшиеся стандартные процедуры ввода-вывода: Read, ReadLn, Write, WriteLn.
Возможны операторы процедуры и без списка фактических парамет-ров, например, процедуры ReadLn, WriteLn.
Оператор процедуры подчиняется общим правилам использования операторов в программах на языке Паскаль.
Подробнее о процедурах см. раздел 7.3.
5.1.3. Оператор перехода
Этот оператор имеет вид:
GOTO Lab ,
где Lab - метка - целое без знака либо идентификатор.
Метки должны быть объявлены в разделе описаний, например:
LABEL 15, forw, retn .
В тексте программы метка отделяется от помечаемого оператора двоеточием.
Метка считается локализованной внутри того блока (программы или подпрограммы), в котором она объявлена. Передача управления внутрь подпрограммы или из подпрограммы за ее пределы не допускается.
Отметим, что неумелое использование оператора перехода приводит к плохо структурированным программам, что затрудняет обнаружение и устранение ошибок.
5.1.4. Пустой оператор
Пустой оператор не имеет начертания и не выполняет никаких действий. Не вдаваясь в детали вопроса о необходимости существования этого оператора, отметим один момент. Наличие в разделе операторов нескольких следующих друг за другом символов "точка с запятой", например
a:=1;;; b:=2
не вызовет ошибки, т.к. это означает, что между двумя операторами присваивания находится два пустых оператора. Однако подобное в разделе описаний вызовет ошибку.
5.2. Структурные операторы
Процесс переработки информации в языке Паскаль реализуется по сути дела двумя простыми операторами: присваивания и процедуры. Структурные же операторы служат для организации взаимодействия входящих в него компонентов - операторов.
5.2.1. Структурограммы (схемы Насси - Шнейдермана)
При разработке больших и сложных по характеру взаимодействия от-дельных компонентов программ приходится прибегать к схемам того или ино-го вида. Наиболее удачным видом схем, соответствующим идеям структурно-го программирования, являются структурограммы (схемы Насси-Шней-дермана).Основным понятием системы схем-структурограмм является струк-тура.
Структура - это либо элементарная структура, либо следование структур, либо вложенность структур.
Элементарная структура - это структура, которая не может быть деструктурирована.
Рекурсивное определение структуры означает, что любая структура, кроме элементарной, состоит из структур.
В языке Паскаль элементарной структуре соответствуют операторы присваивания и процедуры.
В структуре "следование" (рис.5.1а) структура S1 по завершении своей работы передает управление следующей за ней структуре S2. В структуре "вложенность" (рис.5.1б) охватывающая структура S1 может передать управление вложенной в нее структуре S2, хотя и не обязательно это сделает. Вложенная же структура S2 по окончании работы обязана передать управление охватывающей ее структуре S1.
Количество уровней вложенности структур не ограничивается.
.
S1
S1
S2
S2
а) следование
б) вложенность
Рис.5.1. Способы
взаимодействия структур
Определены 2 вида структуры “вложенность“: - выбор;
- цикл.
Структура "выбор" предполагает наличие выражения W, называемого селектором. В зависимости от значения, принимаемого селектором, управле-ние передается одной из вложенных структур. На рис. 5.2 приведены четыре разновидности структуры "выбор".
Разновидность CASE реализует выполнение одной из внутренних структур S1,...Sn в зависимости от того, какое из значений k1,...kn принимает селектор W. Если значение селекторa W не равно ни одному из k1,...kn, то разновидность CASE эквивалентна пустой структуре, а разновидность CASE-ELSE реализует выполнение структуры S, соответствующей альтернативе ELSE.
Разновидности IF-THEN и IF-THEN-ELSE являются частными слу-чаями разновидностей CASE и CASE-ELSE. В них селектор W может прини-мать лишь два значения (в языке Паскаль это TRUE,FALSE).
k1
k1
W
W
ELSE
....
... kn
kn
S1 Sn
S1 Sn S
а) CASE б) CASE - ELSE
w? W?
да да нет
S1
S1 S2
в) IF-THEN
г) IF-THEN-ELSE
Рис.5.2.
Разновидности структуры "выбор"
Примечание: На чертежах вместо разновидности IF-THEN часто изо-бражают IF-THEN-ELSE, оставляя прямоугольник со структурой S2 пустым, поскольку рисунок разновидности IF-THEN может восприниматься как сле-дование двух структур.
Структура "цикл" предполагает многократное (или ни разу) выполне-ние внутренней структуры, называемой телом цикла. Существует две разно-видности структуры типа "цикл" (рис.5.3):
- цикл с предусловием;
- цикл с постусловием .
S1
S1
S2
S2
а)цикл с
предусловием б)цикл с постусловием
(WHILE-DO)
(REPEAT-UNTIL)
Рис.5.3. Разновидности структуры
"цикл"
В разновидности "цикл с постусловием" проверка на окончание производится после выполнения тела цикла, следовательно, здесь тело цикла обязательно выполнится как минимум один раз.
Отдельного упоминания заслуживает так называемый цикл с параметром. В нем задается набор значений (от начального до конечного), которые должен принять некоторый параметр-переменная. В различных языках по разному трактуется ситуация, когда начальное значение параметра цикла выходит за пределы конечного значения. Язык Паскаль устанавливает, что в этом случае тело цикла не выполнится ни разу, т.е. такой цикл следует отнести к разновидности "цикл с предусловием".