
Условный структурный оператор
Не всегда в программе необходимо предусмотреть только разделение на две ветви. Существуют различные сложные задачи, где может быть бόльшее количество ветвлений. Если в задаче нужно учесть три разных варианта решения, то для этого можно использовать условный структурный оператор, общий вид которого следующий:
IF
(ЛВ1)
THEN
………………
………………
ELSE IF (ЛВ2) THEN
……………
……………
……………
ELSE
……………
……………
……………
END IF
Порядок выполнения условного структурного оператора:
-
если ЛВ1 – истинно, то выполняются операторы ветви 1, если ложно – операторы не выполняются;
-
если ЛВ2 – истинно, то выполняются операторы ветви 2, если ложно – операторы не выполняются;
-
если ЛВ1 и ЛВ2 – ложны, то выполняются операторы ветви 3.
Пример
4.
Для произвольного вещественного значения
x
составить программу вычисления .
Чтобы правильно составить программу вычисления y, надо предварительно определить знак подкоренного выражения, из правил математики известно, что
Код программы на Фортране:
PROGRAM PRIM_4
read *, x
t = x ** 3 – sin(x)
if
(t > 0) then
y = t **(1./3.)
else if (t < 0) then
y = t **(1./3.)
else
y = 0
end if
print *, ‘ y =’,y
END
Заметим, что в программе начала и концы ветвей условного структурного оператора показаны прямоугольной скобкой. Такой способ используется при написании «бумажного» варианта программы для удобного выделения ветвей.
Если в задаче нужно учесть более трех вариантов решения, то для этого можно использовать условный структурный оператор, учитывающий большее количество ветвлений:
IF (ЛВ) THEN S ELSE IF(ЛВ1) THEN S1 ELSE IF(ЛВ2) THEN S2 ............................... ELSE IF(ЛВN) THEN SN ELSE SN+1 END IF |
где ЛВ, ЛВ1, ЛВ2, ..., ЛВN - логические выражения; S, S1, S2,...,SN, SN+1 - блоки операторов. Оператор работает следующим образом: Вычисляется логическое выражение ЛВ, если оно истинно, то выполняется блок операторов S, после чего управление передается оператору следующему за END IF; иначе вычисляется логическое выражение ЛВ1, если оно истинно, то выполняется блок операторов S1, после чего управление передается оператору, следующему за END IF, и т.д. Если все логические выражения ЛВ, ЛВ1, ЛВ2, ..., ЛВN ложны, то выполняется блок операторов SN+1. Таким образом, выполняется ближайший блок операторов Si, для которого логическое условие ЛВi принимает значение истина, после чего происходит выход из блока. |
Оператор выбора
Разветвление на несколько ветвей может быть организовано в программе и с помощью оператора множественного выбора. В зависимости от значения управляющего параметра, управление программой передается в определенный блок (ветвь):
SELECT CASE (key) CASE (Lkey1) S1 CASE (Lkey2) S2 ... CASE (LkeyN) SN CASE DEFAULT SN+1 END SELECT |
где key - управляющий параметр типа integer, logical или character*1. Lkey1, Lkey2, ... , LkeyN - список значений, которые могут быть константными выражениями. S1, S2, ... , SN, SN+1 - блоки операторов. CASE DEFAULT является необязательным. Список значений Lkeyi можно задавать либо одним значением, либо списком отдельных значений, разделенных запятыми, либо диапазоном значений, разделенных двоеточием. Например: CASE (5,12,19) - блок выполняется, если управляющий параметр равен либо 5, либо 12, либо 19. CASE (2:10) - блок выполняется, если управляющий параметр заключен в диапазоне от 2 до 12. CASE (‘A’:’z’) - блок выполняется, если управляющий параметр символьного типа является латинской буквой. |
Покажем применение структурного оператора и оператора выбора на примерах.
Пример 5. Вычислить значение функции:
Программа:
program ifelsefun
print *,’Введите аргумент функции’
read *,x
! начало условного структурного оператора
if (x.lt.-1.) then
y=0
else if ((x.ge.-1.).or.(x.lt.0.)) then
y=cos(3.14159*x)
else if ((x.ge.0.).or.(x.lt.2.)) then
y=x**2+1.
else if ((x.ge.2.).or.((x.lt.7.)) then
y=7.-x
else
y=0.
end if
! конец условного структурного оператора
print *,’y=’,y
end
Пример 6. По введенному номеру единицы измерения (1 – кг, 2 – мг, 3 – г, 4 – т, 5 – ц) и массе M вывести на экран соответствующее значение массы в килограммах.
Код программы:
program Perevod_v_Kg
! Поясняющая информация
print *, ‘Programma perevodit massu M v kilogrammy’
print *, ‘Vvedite massu M’
! Ввод значения переменной М
read *, M
! Поясняющая информация
print *, ‘Vvedite nomer edinitsy izmereniya massy M’
print *, ‘ 1 – kg, 2 – mg, 3 – gr, 4 – ton, 5 – centner’
! Ввод номера единицы измерения n
read *, n
SELECT CASE(n) ! оператор выбора
case (1)
m=m
case (2)
! Перевод миллиграммов в kg’
m=m*10**6
case (3)
! Перевод граммов в kg’
m=m*10**3
case (4)
! Перевод тонн в kg’
m=m*10**(-3)
case (5)
! Перевод центнеров в kg’
m=m*10**(-2)
case default ! если не один из случаев не сработал
print *, ‘ Net takogo nomera, 1 ≤ N ≤ 5 !’
END SELECT ! конец оператора выбора
print *, ‘ M=’,m,’ kg’ ! вывод результата
end
Вопросы к Лекции 4:
-
Что собой представляет алгоритм разветвляющейся структуры?
-
Что такое «ветвь» алгоритма?
-
Какая ситуация в задаче приводит к разветвлению?
-
Как называется ветвление, при котором в одной ветви не предусмотрено никаких шагов?
-
Каким образом реализуется разветвление в блок-схеме алгоритма?
-
Какие виды условных операторов предусмотрены на Фортране?
-
Что называется логическим выражением?
-
Что означают слова .TRUE. и .FALSE.?
-
Перечислите обозначения операций сравнения на Фортране.
-
Как обозначаются логические операции на Фортране?
-
Приведите примеры логических выражений.
-
Что собой представляет условный логический оператор?
-
Назовите правила выполнения условного логического оператора.
-
Приведите примеры использования условного логического оператора.
-
В каких случаях необходимо использовать в программе условный логический оператор?
-
Можно ли в Фортран-программе оставлять пустые строки?
-
Как можно структурировать программу, используя сдвиг начала строки в записи оператора?
-
Запишите общий вид условного блочного оператора. Объясните, как это работает в программе.
-
Сколько ветвей может быть в условном блочном операторе?
-
Приведите пример программы с условным блочным оператором.
-
Опишите алгоритм нахождения максимального/минимального из двух вещественных чисел. Приведите пример.
-
Опишите алгоритм нахождения максимального/минимального из трех вещественных чисел. Приведите пример.
-
В каких задачах используется условный структурный оператор?
-
Сколько ветвей может содержать условный структурный оператор?
-
Запишите общий вид оператора выбора. Как выполняется этот оператор?
-
Для чего служит ветвь CASE DEFAULT в операторе выбора?
-
Какого типа переменные могут быть использованы в качестве управляющего параметра в операторе выбора?
-
Приведите пример применения оператора выбора.