Условный оператор
( 3типа)

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

 

Пример с использованием логического условного оператора - программа вводит число и печатает его модуль:

read *, a

if (a<0) a=-a ! оператор присваивания выполняется только, если значение переменной a меньше 0

print *,'absolute value is ', a

 

В Fortran-е есть 3 типа условных операторов: арифметический, логический и логический блочный.

 

1.    Арифметический

if (арифм. выражение) L1,L2,L3

арифм. выражение – после вычисления – число!

Порядок выполнения:

вычисление значения арифм. выражения в скобках;

если значение выражения меньше 0 –> goto L1

иначе если значение выражения равно 0 –> goto L2

иначе (если значение выражения больше 0 ) –> goto L3

 

Признан устаревшим и не рекомендован к использованию.

 

2.    Логический

Используется, если нужно выполнить одно действие в случае истинности условия.

Фома записи:

if (логич. выражение) действие

логич. выражение – в результате может принимать значения .TRUE.,.FALSE.

Порядок выполнения:

            вычисление значения логич. выражения в скобках;

            если значение выражения == .TRUE. -> выполнение действия.

действие – почти любой исполняемый оператор (кроме if, for …)

Пример: нахождение модуля числа

 

 

 

 

 

 

if (a<0) print *,’value of a is negative’

a<0 – логическое выражение , например, если значение переменной a равно -5, значение логического выражения (a<0) равно .TRUE., в этом случае выполняется оператор print.

Другой пример:

logical l1

l1=a<0

if (l1) print *,’value of a is negative’

 

3. Блочный логический

(конструкция if)

Имеется несколько форм записи блочного (или структурного) if.

Первая используется в том-же случае, когда и простой логический, только позволяет выполнять сразу несколько действий (операторов):

  if (a<0) then 
           print *,'number is negative' 
           a=-a 
  end if
(если условие a<0- истинно, то печатать на экран текст 'number is negative' и менять знак числа на положительный, в противном случае ничего не делать.)

 

 

 

if (логич. выражение) then

 оператор

………

 оператор

endif

 

Другая форма позволяет выполнять разные группы операторов, то есть сделать две ветки в алгоритме:

if (логич. выражение) then

! 1

 оператор

………

 оператор

else

! 2

 оператор

………

 оператор

endif

 

Сначала вычисляется значение логического выражения. Если оно равно .TRUE., то выполняется группа операторов 1. В противном случае выполняется группа операторов 2.

Важно помнить, что выполняется либо группа операторов 1, либо группа операторов 2. В обоих случаях после этого будет выполняться 3.

Фома записи:

If (логич. выражение) THEN

      действие

………

      действие

else

      действие

………

      действие

endif

 

If (логич. выражение) THEN

      действие

………

      действие

else

     if (…) THEN

           действие

           ………

          действие

    end if

endif

 

Последнее равнозначно следующему:

 

If (логич. выражение1) THEN

      действие

………

      действие

else if (логич. выражение2) THEN

   действие

    ………

   действие

endif

Сначала вычисляется значение логического выражения 1. Если оно равно .TRUE., то выполняется 1-я группа операторов (между THEN и else). В противном случае вычисляется значение логического выражения 2. Если оно равно .TRUE., то выполняется 2-я группа операторов. И так далее.

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

Примеры: определение знака числа.

вычисление значения системы функций.

НА ГЛАВНУЮ ДАЛЕЕ
Hosted by uCoz