Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прграммирование и основы алгоритмизации. Прграм...doc
Скачиваний:
1
Добавлен:
23.09.2019
Размер:
839.68 Кб
Скачать

3. Организация ветвлений

Программа, которую мы разобрали, называется линейной поскольку все операторы выполнялись один за другим в порядке их записи. На практике это редкий случай. Чаще бывает, что такой порядок должен быть нарушен. Для этого используются следующие операторы.

Условный оператор позволяет выполнять некоторые действия в зависимости от заданных условий.

IF логическое условие THEN оператор1 ELSE оператор2

З десь, если условие истинно, выполняется оператор1, иначе оператор2. Например, оператор

IF a>b THEN WRITELN ('А больше В') ELSE WRITELN ('А не больше В');

выводит словесное сообщение о соотношении переменных А и В.

Оператор может использоваться и в усеченной форме без опции ELSE.

Другой пример. На практике иногда приходится выяснять кратность числа (например Х) некоторому другому числу (Y). Это можно сделать с помощью следующего выражения (оба числа должны быть целого типа)

IF x MOD y =0 THEN WRITELN ('X кратно Y')

ELSE WRITELN ('X не кратно Y')

Всюду, где в синтаксисе команд встречается слово “оператор”, может быть записано любое число операторов, заключенных в операторные скобки BEGIN...END.

Пример. Напишем оператор взятия корня числа х с учетом его знака.

IF x>0

THEN BEGIN y:=SQRT(x); WRITELN('корень=', y) END

ELSE WRITELN('число отрицательно')

Замечание. С целью придания наглядности подчиненные (вложенные) операторы удобно вводить с некоторым отступом, как показано выше.

В

if a>0 then writeln(a)

else if b>0 then writeln(b)

else if c>0 then writeln(c)

else writeln('все числа <0');

нутрь оператора if могут быть вложены другие if. Например, пусть в последовательности чисел a,b,c требуется вывести первое по порядку положительное число. Если таковых не оказалось, печатать “Все числа меньше 0”. Программа справа.

О

IF a>0 THEN WRITELN(a)

ELSE IF b>0 THEN WRITELN(b)

ELSE IF c>0 THEN WRITELN(c)

ELSE WRITELN('все числа <0');

ператор безусловного перехода. Оператор вида:

GOTO метка оператора

вынуждает программу выполнять не следующий по порядку оператор, а оператор с указанной меткой. Например, опе­ратор GOTO m читается как “Идти к оператору с меткой mи передает ему управление. Метки должны быть предварительно объявлены оператором label в разделе объявлений программы (в нашем случае label m). Меткам можно давать произвольные символьные или числовые имена, важно чтобы все метки были разными, т.е. никогда не совпадали в пределах программы. В операторе, на который происходит ссылка, метка ставится перед ним и отделяется двоеточием.

Очень распространенной задачей является программирование алгоритмов с несколькими исходами – ветвящихся процессов. Здесь удобно (по крайней мере, на первом этапе) сначала построить блок-схему, дающую наглядное графическое представление алгоритма. В блок-схеме отдельные операции или их группы помещаются в прямоугольные блоки. Операции анализа отобража­ются ромбами. Обозначение других операций будет рассмотрено позже. Блок-схемы обрамляют блоки НАЧАЛО и КОНЕЦ. Мы будем изображать последние только в случае, если возможно разночтение.

П ример 3-1. Для произвольного аргумента Х вычислить значение кусоч­но-ломаной функции Y(X) (рис. 3.1а).

Отметим, что практически любая задача может быть запрограммирована по-разному. Два таких решения приведены в program p3_1 (рис. 3.1б и 3.1в). Второй вариант работает быстрее поскольку, если обнаружено выполняющееся условие, следующие условия не проверяются.

Пример 3-2. Даны три произвольных числа А, В, С. Составить прог­рамму, которая анализирует их и, если сумма первых двух чисел не мень­ше третьего, а второе больше первого – выдает сооб­щение ВЕРНО. Если хотя бы одно из условий не выполняется, – то сообщение НЕВЕРНО. Иными словами