Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Fortran 90. ANSI Standard.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
861.18 Кб
Скачать

Операции отношения

Логические переменные, определенные словом LOGICAL, могут принимать одно из двух значений (.TRUE. or .FALSE.). Обращение к логическим перменным имеет вид:

LOGICAL [, атрибуты] :: переменная

Логической переменной может быть присвоено явно значение или с помощью выражения, например:

LOGICAL :: guess, date

LOGICAL, PARAMETER :: no = .false.

INTEGER :: today_date

...

guess = .true.

date = (today_date==5)

если today_date предварительно присвоено значение и оно равно 5, то date равно .TRUE., в противном случае .FALSE.. Операция отношения == называется "равно", тогда today_date==5 читается как ' today_date равно 5?'. Ниже приведен список операций отношения:

  • < меньше чем

  • <= меньше чем или равно

  • больше чем

  • >= больше чем или равно

  • == равно

  • /= не равно

Ниже приведены примеры использования операций отношения:

LOGICAL :: test

INTEGER :: age, my_age

CHARACTER(LEN=5) :: name

...

test = 5 < 6 ! True

test = 5 > 6 ! False

test = 5 == 6 ! False

test = 5 /= 6 ! True

test = 5 <= 6 ! True

test = 5 >= 6 ! False

...

test = age > 34 ! переменная сравнивается с константой

test = age /= my_age ! две переменные сравниваются

test = 45 == my_age ! переменная может появляться в любой стороне

test = name == 'Smith' ! символьные можно использовать

test = (age*3) /= my_age ! допустимы выражения

Логические выражения

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

  • .AND. логическое пересечение

  • .OR. логическое объединение

  • .NOT. логическое отрицание

  • .EQV. логическое тождество

  • .NEQV. логическое отрицание тождества

Операция логического пересечения .AND., требует двух выражений или переменных, дает результат .TRUE. только в том случае, если оба выражения истинны, в противном случае дает значение .FALSE.. Рассмотрим следующий пример:

LOGICAL :: test, employed=.true.

INTEGER :: age=50

...

test = employed .AND. (age<45) ! test=.false.

Здесь два подвыражения, один имеет значение .TRUE. , второй .FALSE. .Поэтому результат .FALSE. .

Операция логического объединения .OR. требует двух выражений или переменных, дает результат .TRUE. в том случае, если хотя бы одно из выражений истинно, в противном случае дает значение .FALSE.. Рассмотрим следующий пример:

 

LOGICAL :: test

CHARACTER(LEN=10) :: name = 'James'

...

test = (name='Dimitris') .OR. (name='James') ! test=.true.

Операция логического отрицани .NOT. используется для отрицания (инверсии) логического значения выражения, то есть .TRUE. дает .FALSE. и наоборот. Например:

INTEGER :: big=100, small=2

LOGICAL :: test

...

test = .NOT. (big>small) ! test=.false.

test = .NOT. test ! test=.true.

где оператор, заключенный (необязательные) получает значение, которое инвертируется.

Операция логического тождества .EQV.чтобы проверить совпадение значений операндов (переменных или выражений) (оба могут иметь значения .TRUE. или .FALSE.). Если значения совпадают, результат .TRUE., в противном случае .FALSE..Например, в:

LOGICAL :: test

...

test = (5*3>12) .EQV. (6*2>8) ! test=.true.

test = (5*3<12) .EQV. (6*2<8) ! test=.true.

обоих операторах вычисляется .TRUE., поскольку подвыражения в обоих операторах имеют одинаковые значения.

Операция отрицания логического тождества .NEQV. используется для получения значения .TRUE. только если операнды имеют различные логические значения, в противном случае значением станет .FALSE.. Например, в:

LOGICAL :: test

...

test = (5*3>12) .NEQV. (6*2>13) ! test=.true.

test = (5*3>12) .NEQV. (6*2<13) ! test=.false.

первое выражение имеет одну истинную компоненту и одну ложную, поэтому результат .TRUE.. Второе выражение имеет две истинные компоненты, поэтому результат .FALSE..

Когда сравниваются значение REAL со значением INTEGER компилятор будет конвертировать values the целое к типу REAL. Сравнение значения типа REAL с REAL должно выполняться с осторожностью; ошибки округления по точности переменных типа REAL могут означать, что два числа REAL никогда не будут равны, если их значения численно близки. Поэтому, рекомендуется тестировать их разницу, чем фактические значения:

REAL :: a=100.0, b

LOGICAL :: equal

b = 2*50.0

equal = (a==b) ! потенциальная ошибка

equal = (a-b)<0.0005 ! лучше программировать так

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]