Поскольку оператор END не может иметь метки, перед ним ставится пустой оператор WRITE(*,*), который приводит к простому пропуску строки.
В данном случае, в отличие от предыдущих примеров, сначала вычисляется значение переменной d, зависящее от входных параметров. Затем, в зависимости от знака d, алгоритм разветвляется на две ветки: одна – линейный алгоритм с печатью на конце, вторая – один блок печати.
Алгоритм, в котором в зависимости от условия возможны два пути продолжения вычислительного процесса, называется простым разветвляющимся алгоритмом. Алгоритм, в котором в зависимости от выполнения условий возможны несколько путей продолжения вычислительного процесса, называется многоразветвляющимся алгоритмом.
Для программирования сложных разветвлений целесообразно использовать составной оператор IF. В этом случае применяется стиль структурного программирования, программа становится более компактной, хотя и не соответствует классической блок-схеме.
Составной оператор IF-ELSEIF-ELSE-END IF Структура оператора:
IF(A¤B) THEN оператор 1
ELSEIF(C¤D) THEN оператор 2
ELSEIF(E¤F) THEN оператор 3
ELSE оператор k
END IF
Если условие (A¤B) выполняется, то выполняется оператор 1, и управление передается на конец конструкции (END IF). Иначе, если (ELSEIF) выполняется условие (C¤D), то выполняется оператор 2, управление передается на END IF. Если нет, то проверяется следующее условие и т.д. (ELSEIF может быть несколько). Если ни одно из условий не выполнено (ELSE), то выполняется оператор k.
Структура ELSEIF может вообще отсутствовать, тогда оператор принимает более простой вид:
IF(A¤B) THEN оператор 1
ELSE оператор 2 END IF
Пример. Вычислить значение функции
x2 + bx + c, если x < 0;
y =bx + c, если 0 ≤ x ≤1;
x, если x >1
при любых заданных значениях x ,b ,c.
Перед решением задачи целесообразно нарисовать ось x и отложить на ней точки ветвления (рис. 8.). Блоки условного перехода расставляем в порядке расположения точек ветвления и в том же количестве. Проверяемые условия обычно имеют знаки «меньше» или «меньше или равно». Первое проверяемое условие в данном случае x < 0. Если оно не выполнено, вычисление проводится по первой формуле, не имеет смысла проверять обратное условие. Второе проверяемое
условие - x ≤ 1. Если оно выполнено, то вычисление осуществляется по второй формуле. Если оба условия не выполнены, то нет смысла проверять последнее условие, а вычисление проводится по третьей формуле.
Рис. 8. Точки ветвления
После выполнения действия по одному из разветвлений вычислительный процесс опять сводится в одно русло.
При построении многоразветвляющегося алгоритма следует пользоваться правилом:
вначале записываются блоки разветвления, число которых на один меньше, чем количество разветвлений; эти блоки содержат лишь односторонние условия (обычно со знаками «меньше» и «меньше или равно»); двойные условия записывать в блок-схеме и программе нельзя; затем записываются блоки вычисления в порядке, обратном исходным формулам; от каждого из блоков вычисления процесс переходит к одному блоку (обычно блоку печати), для этого после каждого блока вычисления (кроме последнего) следует использовать безусловный переход (стрелка на блок-схеме или оператор GOTO в программе); число проверяемых условий всегда на единицу меньше числа разветвлений.
Приведем блок-схему и два варианта программы. Первый вариант полностью соответствует блок-схеме. При этом блоки вычислений записываются в обратном порядке, а возвращение вычислительного процесса в единое русло (к блоку печати результатов) осуществляется с помощью оператора безусловного перехода GOTO. Более рациональной является запись программы с использованием структурного оператора IF (второй вариант).
Блок-схема Программа на Фортране
Первый вариант
WRITE(*,*) ’Введите b,c,x’
READ(*,*) b,c,x
IF (x.LT.0) GOTO 1 IF (x.LE.1) GOTO 2 y=SQRT(x) GOTO 3
2 y=b*x+c
GOTO 3
1 y=x**2+b*x+c
3 WRITE(*,*)
’b=’,b,’c=’,c,’x=’,x,’y=’,y
END
Второй вариант
WRITE(*,*) ’Введите b,c,x’
READ(*,*) b,c,x IF (x.LT.0) THEN y=x**2+b*x+c ELSE IF (x.LE.1) THEN y=b*x+c ELSE y=SQRT(x) END IF
WRITE(*,*)
’b=’,b,’c=’,c,’x=’,x,’y=’,y
END
Циклическим алгоритмом называется алгоритм, часть которого выполняется многократно с различными значениями изменяющейся по определенному закону переменной (переменной цикла). На рис. 9 приведена обобщенная схема циклического алгоритма.
|
||
|
||
|
||
|
Рис. 9. Обобщенная схема циклического алгоритма
Для организации цикла определяются переменная цикла (x) и его параметры - начальное и конечное значение переменной цикла и шаг ее изменения (xn, xk, hx). Блоки 1 – 4 называются блоками организации цикла:
1. Блок начального присвоения (переменной цикла присваивается начальное значение).
2. Тело цикла - многократно повторяющаяся часть алгоритма, внутри которой переменная цикла не изменяется. Телом цикла может быть любой алгоритм: линейный, разветвляющийся или циклический.
3. Блок приращения значения переменной цикла (переменная цикла изменяет
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.