
- •1. Основные понятия
- •2. Основная структура программы
- •2. Оператор присваивания
- •3. Процедуры ввода-вывода
- •4. Операторы ветвления
- •4.1 Условный оператор if
- •4.2 Оператор варианта case
- •5. Операторы цикла
- •Цикл с предусловием while,
- •Цикл с постусловием repeat
- •Цикл с параметром for.
- •5.1 Цикл с предусловием while
- •5.2 Цикл с постусловием repeat
- •5.3 Цикл с параметром for
- •6. Процедуры передачи управления
- •7. Строковые операции
- •8. Определение типов
- •9. Массивы
- •9.1 Одномерные массивы
- •9.2 Двумерные и многомерные массивы
- •10. Процедуры и функции
- •11. Работа с файлами
4. Операторы ветвления
В теории программирования доказано, что программу для решения задачи любой сложности можно составить только из трех структур, называемых следованием, ветвлением и циклом. Следованием называется конструкция, представляющая собой последовательное выполнение двух или более операторов (простых или составных). Ветвление задает выполнение либо одного, либо другого оператора в зависимости от выполнения какого-либо условия. Цикл задает многократное выполнение оператора (см. рисунок 1).
Рисунок 1. Базовые конструкции структурного программирования
Следование, ветвление и цикл называют базовыми конструкциями структурного программирования. Их особенностью является то, что любая из них имеет только один вход и один выход, поэтому они могут вкладываться друг в друга. Например, цикл может содержать следование из нескольких ветвлений, каждое из которых включает вложенные циклы.
Целью использования базовых конструкций является получение программы простой структуры. Такую программу легко читать, отлаживать и при необходимости модифицировать. Язык Паскаль способствует созданию хорошо структурированных программ, поскольку базовые конструкции реализуются в нем непосредственно с помощью соответствующих операторов.
Операторы ветвления if и варианта case применяются для того чтобы в зависимости от конкретных значений исходных данных обеспечить выполнение разных последовательностей операторов. Оператор if обеспечивает передачу управления на одну из двух ветвей вычислений, а оператор case — на одну из произвольного числа ветвей.
4.1 Условный оператор if
Условный оператор if используется для разветвления процесса вычислений на два направления. Структурная схема оператора приведена на рисунке 2.
Формат оператора:
if выражение then оператор_1 [else оператор_2;]
Сначала вычисляется выражение, которое должно иметь логический тип. Если оно имеет значение true, выполняется первый оператор, иначе — второй. После этого управление передается на оператор, следующий за условным.
Рисунок 2. Структурная схема условного оператора
Oператоры, входящие в состав условного оператора, могут быть простыми или составными. Составной оператор ( блок ) обрамляется ключевыми словами begin и end. Блок применяют в том случае, когда по какой-либо ветви требуется выполнить несколько операторов: ведь иначе компилятор не сможет понять, где заканчивается ветвь и начинается следующая часть программы. Одна из ветвей может отсутствовать.
ВНИМАНИЕ Отсутствие ключевых слов begin и end в ветви else компилятор как ошибку не распознает!
Примеры условных операторов:
if a < 0 then b := 1; { 1 }
if (a < b) and ((a >d) or (a = 0)) then inc(b)
else begin
b := b * a; a := 0
end; { 2 }
if a < b then
if a < c then m := a else m := c
else
if b < c then m := b else m := c; { 3 }
В примере 1 отсутствует ветвь else. Такая конструкция называется 'пропуск оператора'.
Если требуется проверить несколько условий, их объединяют знаками логических операций. Так, выражение в примере 2 будет истинно в том случае, если выполнится одновременно условие a < b и хотя бы одно из условий a > d и a = 0. Скобки, в которые заключены операции отношения, обязательны, потому что приоритет у логических операций выше, чем у операций отношения. Поскольку по ветви else требуется выполнить два оператора, они заключены в блок.
В примере 3 вычисляется наименьшее из значений трех переменных a, b и с.
ВНИМАНИЕ Частая ошибка при программировании условных операторов — неверная запись проверки на принадлежность диапазону. Например, условие 0 < x < 1 нельзя записать непосредственно. Правильный способ: if(0 < x) and (x < 1) then …, поскольку фактически требуется задать проверку выполнения одновременно двух условий: x > 0 и x < 1.
Если условие изначально истинно и в теле цикла нет действий, влияющих на истинность этого условия, то тело цикла будет выполняться бесконечное количество раз. Такая ситуация называется "зацикливанием". Прервать зациклившуюся программу может либо оператор (нажав Ctrl+C), либо аварийный останов самой программы, в случае переполнения переменной, деления на ноль и т.п., поэтому использовать структуру цикла следует с осторожностью, хорошо понимая, что многократное выполнение должно когда-нибудь заканчиваться.