
- •Управление векторами и матрицами
- •Компиляция и выполнение Компиляция
- •Связывание (редактирование связей )
- •Выполнение
- •Примеры
- •Соглашения о записи кода
- •Арифметические выражения
- •Операции отношения
- •Логические выражения
- •Сравнение символов
- •Переносимость результата
- •Спецификация массивов
- •Сечения массива Индивидуальные элементы
- •Сечения
- •Векторные указатели
- •Память для массива Физическая память:
- •Присваивание массива Присваивание всего массива
- •Присваивание секции (вырезки) массива
- •Повторная нумерация
- •Основные встроенные процедуры
- •Массивы нулевого размера
- •Массивы и производные типы
- •Инициализация массивов Конструкторы
- •Оператор data
- •Встроенные функции для массива
- •Пример упрощения
- •Пример исследования (запроса)
- •Пример конструирования
- •Пример локализации
- •Я Операторы управления
- •Вложения
- •Порядок операторов
- •Синтаксис программы Main
- •Формат представления программы
- •Программные единицы
- •Уровни доступа
- •Дополнения
- •Спецификация входных-выходных параметров
- •Использование модуля
- •Родовые подпрограммы
- •Интерактивный ввод-вывод
- •Простой Input и Output
- •Форматирование по умолчанию
- •Форматированный ввод-вывод I/o
- •Дескрипторы редактора
- •Вещественные - форма с фиксированной точкой
- •Вещественные - экспотенциальная форма
- •Символьные
- •Логические
- •Заполнение пробелами (пропуск символьных позиций)
- •Специальные символы
- •Списки ввода-вывода
- •Производные типы данных
- •Неявный цикл do
- •Ввод-вывод без продвижения
- •Файловый ввод-вывод
- •Номера устройств
- •Операторы read и write
- •Оператор write
- •Оператор open
- •Оператор close
- •Оператор inquirе
- •Динамический массив
- •Распределяемые массивы
- •Спецификация
- •Выделение и возвращение памяти
- •Статус распределяемых массивов
- •Потоки памяти (куча)
- •Что есть указатели?
- •Указатели и адресаты
- •Спецификации указателя Общая форма для операторов определения указателя и адресата такая:
- •Присваивание указателя
- •Разыменование (Dereferencing)
- •Статус (состояние) связи указателя
- •Динамическая память
- •Общие ошибки
- •Указатели в производных типах данных
- •Связанные списки
- •Параметры - указатели
- •Функции для указателей
Операции отношения
Логические переменные, определенные словом 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 ! лучше программировать так