
- •Алфавит и лексемы
- •Константы
- •Имена, ключевые слова и знаки операций
- •Ввод с клавиатуры
- •Вывод на экран
- •Условный оператор if
- •Оператор варианта case
- •Цикл с предусловием while
- •Цикл с постусловием repeat
- •Цикл с параметром for
- •Рекомендации по использованию циклов
- •Оператор перехода goto
- •Перечисляемый тип данных
- •Интервальный тип данных
- •Двумерные массивы
- •Операции
- •Процедуры и функции для работы со строками
- •Множества
- •Операции над множествами
- •Подпрограммы для работы со всеми типами файлов Процедуры
- •Функции
- •Текстовые файлы
- •Бестиповые файлы
- •Компонентные файлы
- •Прямой доступ
- •Процедуры
- •Функции
- •Глобальные и локальные переменные
- •Параметры-значения
- •Параметры-переменные
- •Параметры-константы
- •Нетипизированные параметры
- •Открытые массивы и строки
- •Рекурсивные подпрограммы
- •Описание модулей
- •Использование модулей
- •Модуль System
- •Модуль Crt
- •Работа с экраном
- •Работа с клавиатурой
- •Модули Dos и WinDos
- •Модуль Graph
- •Структура графической программы
- •Модуль Strings
Условный оператор if
Условный оператор if используется для разветвления процесса вычислений на два направления. Структурная схема оператора приведена на рис. 2 Формат оператора:
if выражение then оператор_1 [else оператор_2;]
Сначала вычисляется выражение, которое должно иметь логический тип. Если оно имеет значение true, выполняется первый оператор, иначе - второй. После этого управление передается на оператор, следующий за условным.
|
Рис. 2. |
Одна из ветвей может отсутствовать (см. рис. 2). Операторы, входящие в состав условного, могут быть простыми или составными. Составной оператор (блок) обрамляется ключевыми словами begin и end. Блок применяют в том случае, когда по какой-либо ветви требуется выполнить несколько операторов.
Пример #1. |
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}
|
Если требуется проверить несколько условий, их объединяют знаками логических операций. Так, выражение в примере 2 будет истинно в том случае, если выполнится одновременно условие a < b и хотя бы одно из условий a > d и a = 0.
Частая ошибка при программировании условных операторов - неверная запись проверки на принадлежность диапазону. Например, условие 0 < x < 1 нельзя записать непосредственно. Правильный способ: if(0 < x) and (x < 1) then..., поскольку фактически требуется задать проверку выполнения одновременно двух условий: x > 0 и x < 1.
Вторая ошибка - отсутствие блока после else, если на самом деле по этой ветви требуется выполнить более одного действия. Эта ошибка не может быть обнаружена компилятором, поскольку является не синтаксической, а семантической, то есть смысловой.
Пример #2. |
|||
|
Программа, которая по введенному значению аргумента вычисляет значение функции, заданной в виде графика (рис. 3).
|
||
Сначала составим описание алгоритма в неформальной словесной форме.
Второй пункт алгоритма следует детализировать. Сначала запишем определение функции в виде формул:
Теперь в соответствии с формулами опишем последовательность действий словами:
и так далее. program calc_function_1; var x, y : real; begin writeln(' Введите значение аргумента'); readln(x); if x < -2 then y := 0; if (x >= -2) and (x < -1) then y := -x - 2; if (x >= -1) and (x < 1) then y := x; if (x >= 1) and (x < 2) then y := -x + 2; if x >= 2 then y := 0; writeln('Для x = ', x:6:2, ' значение функции y = ', y:6:2); end.
Тестовые примеры для этой программы должны включать по крайней мере по одному значению аргумента из каждого интервала, а для проверки граничных условий - еще и все точки перегиба. |