Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава 3_1.doc
Скачиваний:
60
Добавлен:
13.03.2016
Размер:
358.91 Кб
Скачать

Ветвление

Ветвление – алгоритмическая структура, осуществляющая выбор одного из возможных направлений выполнения алгоритма в зависимости от значения некоторых условий с последующим выходом на общее продолжение.

В Фортране существуют четыре вида программных конструкций, реализующих ветвления. Их будем называть так:

если - то;

если - то - иначе;

если - то - иначе - если;

выбор по ключу.

Ветвление «если - то» реализует неполное ветвление и записывается на Фортране с помощью конструкции IF THEN ENDIF:

[имя:] IF(логическое_выражение) THEN

БОК

END IF [имя]

Ветвление "если - то" работает так:

• вычисляется значение логического выражения;

• если оно истинно, то выполняется БОК (Блок Операторов и Конструкций) затем происходит выход из ветвления;

• если оно ложно, то управление передается на следующий оператор, стоящий после ветвления.

Конструкция может иметь имя, отделяемое от IF двоеточием. В таком случае это же имя должно быть повторено в конце конструкции. Например:

swap: if(a < b) then

c=a; a=b; b=c !в a – максимальное значение a и b

endif swap

Оператор END IF можно писать как с пробелом, так и слитно: ENDIF.

Если в БОК входит один оператор, то ветвление "если - то" может быть записано более компактно с помощью условного логического оператора IF:

IF (логическое_выражение) оператор

Например:

If(x<0) x=-x ! получение абсолютной величины x

Ветвление "если - то - иначе" на Фортране записывается с помощью конструкции IF THEN ELSE ENDIF:

[имя:]IF(логическое_выражение) THEN

БОК1

ELSE [имя]

БОК2

ENDIF [имя]

Имя конструкции, если оно задано, должно обязательно присут­ствовать и перед IF, и послеENDIF.

Ветвление "если - то - иначе" работает так:

• вычисляется значение логического выражения;

• если оно истинно, то выполняется БОК1;

• если оно ложно, то выполняется БОК2;

• далее управление передается следующему после ветвления оператору.

Пример 4:

if(b*b-4*a*c>=0) then

print *,'Уравнение имеет вещественные корни'

else

print *, 'Нет вещественных корней'

endif

Структура «если-то-иначе-если» реализует вложенные ветвления, когда вложенность имеется на отрицательной ветви развилки. Конструкция IF THEN ELSE IF имеет следующий вид:

[имя:] IF(логическое_выражение_1) THEN

БОК1

ELSE IF(логическое_выражение_2) THEN [имя]

БОК2

[ELSE [имя]

БОКn

END IF [имя]

Такая запись более компактна, поскольку END IF пишется только один раз.

Пример 5. Времена года. Здесь month – целое положительное число – номер месяца.

if (month==12.or.month==1.or.month==2) then

print*,′Зима′

else if (month==3.or.month==4.or.month==5) then

print*,′Весна′

else if (month==6.or.month==7.or.month==8) then

print*,′Лето′

else if (month==9.or.month==10.or.month==11) then

print*,′Осень′

else

print*,′Месяц указан неверно′

endif

Структура выбора по ключу реализуется с помощью конструкции SELECT CASE:

[имя:] SELECT CASE (ключ_выбора)

CASE(СП1) [имя]

[БОК1]

[CASE(СП2) [имя]

[БОК2]]

[CASE DEFAULT [имя]

[БОКn]]

END SELECT [имя]

Ключ_выбора – это выражение целого типа или логическое выражение или символьная переменная типа CHARACTER(l).

СП – список констант, тип которых должен совпадать с типом ключа_выбора.

Исполнение конструкции происходит следующим образом. Сначала вычисляется ключ выбора. Полученное значение сравнивается с элементами списков СП1, СП2… Если в каком-то из списков обнаружено искомое значение, то выполняется БОК соответствующей CASE-секции (ветви), после чего происходит выход на оператор, стоящий следующим послеENDSELECT. Если ни в одном из СПiзначения ключа не обнаружено, то выполняется БОК, расположенный послеCASEDEFAULTи затем происходит выход из конструкции.

Пример. Времена года.

select case (month)

case(12,1,2)

print*,′Зима′

case(3:5)

print*,′Весна′

case(6:8)

print*,′Лето′

case(9:11)

print*,′Осень′

case default

print*,′Месяц указан неверно′

end select

Если сравнить этот пример с предыдущим, то видно, что использование оператора SELECTCASEв данном случае упрощает запись алгоритма.

Из приведенного примера видно, что СП может быть представлен в как в виде последовательности значений, разделенных запятыми, так и в интервальной форме через двоеточие - (A:B). Значение А должно быть не больше В. Запись вида ( :В) означает любые значения, не большие В. Запись вида (А:) означает любые значения, не меньшие А

Каждое значение, даже если оно задано в диапазоне значений, может появляться только в одном СП.

Нельзя переходить посредством оператора GOTO или в результате аль­тернативного возврата из подпрограммы внутрь конструкции SELECT CASE или из одной CASE-секции в другую. Такая ошибка будет обнаружена компилятором.