Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
74
Добавлен:
12.04.2015
Размер:
536.58 Кб
Скачать

Условный структурный оператор

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

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:

  1. Что собой представляет алгоритм разветвляющейся структуры?

  2. Что такое «ветвь» алгоритма?

  3. Какая ситуация в задаче приводит к разветвлению?

  4. Как называется ветвление, при котором в одной ветви не предусмотрено никаких шагов?

  5. Каким образом реализуется разветвление в блок-схеме алгоритма?

  6. Какие виды условных операторов предусмотрены на Фортране?

  7. Что называется логическим выражением?

  8. Что означают слова .TRUE. и .FALSE.?

  9. Перечислите обозначения операций сравнения на Фортране.

  10. Как обозначаются логические операции на Фортране?

  11. Приведите примеры логических выражений.

  12. Что собой представляет условный логический оператор?

  13. Назовите правила выполнения условного логического оператора.

  14. Приведите примеры использования условного логического оператора.

  15. В каких случаях необходимо использовать в программе условный логический оператор?

  16. Можно ли в Фортран-программе оставлять пустые строки?

  17. Как можно структурировать программу, используя сдвиг начала строки в записи оператора?

  18. Запишите общий вид условного блочного оператора. Объясните, как это работает в программе.

  19. Сколько ветвей может быть в условном блочном операторе?

  20. Приведите пример программы с условным блочным оператором.

  21. Опишите алгоритм нахождения максимального/минимального из двух вещественных чисел. Приведите пример.

  22. Опишите алгоритм нахождения максимального/минимального из трех вещественных чисел. Приведите пример.

  23. В каких задачах используется условный структурный оператор?

  24. Сколько ветвей может содержать условный структурный оператор?

  25. Запишите общий вид оператора выбора. Как выполняется этот оператор?

  26. Для чего служит ветвь CASE DEFAULT в операторе выбора?

  27. Какого типа переменные могут быть использованы в качестве управляющего параметра в операторе выбора?

  28. Приведите пример применения оператора выбора.

11

Соседние файлы в папке Лекции_фортран_текст