ЛАБОРАТОРНЫЙ ПРАКТИКУМ: «ПРОГРАММИРОВАНИЕ НА ФОРТРАНЕ»
СТРУКТУРА ПРАКТИКУМА
ВВЕДЕНИЕ
ВАЖНАЯ ИНФОРМАЦИЯ
1. ПРАВИЛА ЗАПИСИ ПРОГРАММЫ
1. Набор символов Фортрана
2. Форматы записи программы
3. Фиксированный формат
4. Свободный формат
2. ТРАНСЛЯЦИЯ ПРОГРАММЫ
1. Программа в одном исходном файле
2. Трансляция исходного файла
3. Трансляция нескольких исходных файлов
4. Трансляция модулей
3. КОНЦЕПЦИЯ ДАННЫХ ЯЗЫКА ФОРТРАН
1. Имена (идентификаторы)
2. Понятие типа
3. Буквальные константы
4. Разновидности типов и диапазоны значений
5. Скалярные переменные и константы
6. Массивы
7. Производные типы данных
4. ВЫРАЖЕНИЯ И ПРЕОБРАЗОВАНИЕ ТИПОВ
1. Скалярное присваивание
2. Арифметика Фортрана
3. Логические выражения
4. Работа с текстовыми строками
5. Операции с массивами
5. УПРАВЛЯЮЩИЕ ОПЕРАТОРЫ
1. Условный оператор и конструкция IF
2. Оператор варианта – конструкция CASE
3. Циклы – разновидности конструкции DO
4. Оператор GO TO
6. ВВОД/ВЫВОД ДАННЫХ
1. Простейшие операции ввода/вывода
2. Форматный ввод/вывод данных
3. Ввод/вывод массивов в неявных циклах
4. Файловый ввод/вывод
7. ПРОГРАММНЫЕ КОМПОНЕНТЫ И ЭЛЕМЕНТЫ ООП
1. Структура программных компонентов
2. Внешние подпрограммы
3. Внутренние подпрограммы
4. Модули как библиотеки производных типов
5. Встроенные функции Фортрана
ЗАДАЧИ ДЛЯ ПРОГРАММИРОВАНИЯ
4.3 Логические выражения
Логическими данными чаще всего являются логические отношения числовых или текстовых данных (п. 5.1), хотя могут иметь вид самостоятельных логических выражений. Каждая операция логического отношения имеет два равноценных обозначения, поддерживаемых стандартом Фортрана 90/95 (Таблица 4.5). Для обозначений в первом столбце таблицы, унаследованных от ранних версий Фортрана (ФОРТРАН 77), обязательны обрамляющие точки, являющиеся частью мнемоники операции. Т.е. запись с обрамляющими точками: «.EQ.» – правильно, а без них: «EQ» – неправильно. При записи операций отношения, таких как «= =«, «/ =« и ниже, в том же столбце Таблицы 4.5, обрамляющие символы (точки или что-то еще) не требуются, но нужно следить, чтобы между символами не было пробелов. Если в тексте данного руководства такие пробелы присутствуют, то только для улучшения читаемости, поскольку некоторые читатели будут искать на клавиатуре кнопку с длинным знаком равенства (по аналогии с клавишей Any Key).
Таблица 4.5. Логические отношения в Фортране
Обозначение | Отношение |
---|---|
.EQ. | РАВНО |
.NE. | НЕ РАВНО |
.GT. | БОЛЬШЕ |
.GE. | БОЛЬШЕ ИЛИ РАВНО |
.LT. | МЕНЬШЕ |
.LE. | МЕНЬШЕ ИЛИ РАВНО |
Правила объявления и инициализация логических переменных и констант практически ничем не отличается от объявления и инициализация числовых данных (п. 4.1) – в точности также используется атрибут PARAMETER для объявления именованных констант и оператор присваивания «=« для присваивания логических значений переменным и именованным константам (Пример 4.6). Для объявления логических массивов в примере в пример используется атрибут DIMENSION
Для обеспечения возможности построения из операций отношения более сложных логических выражений в Фортране предусмотрены логические операции, представленные в Таблице 4.6 в порядке убывания приоритета.
Пример 4.6. Особенности деления целых чисел
program LOGFACT1 logical, parameter :: TRUFACT=.TRUE., FALFACT=.FALSE. logical, parameter , dimension(0:1):: FACTS=(/.FALSE., .TRUE. /) logical FACT1, FACT2 FACT1 = 0 .EQ. 0; FACT2 = – 1 /= 1 !Присваивание логических значений print*, TRUFACT, FALFACT ! Печать логических именованных констант print*, FACT1, FACT2 print*, FACTS end
Таблица 4.6. Логические операторы Фортрана
Обозначение | Название оператора |
---|---|
.NOT. | ЛОГИЧЕСКОЕ ОТРИЦАНИЕ (НЕ) |
.AND. | ЛОГИЧЕСКОЕ ПЕРЕСЕЧЕНИЕ (И) |
.OR. | ЛОГИЧЕСКОЕ ОБЪЕДИНЕНИЕ (ИЛИ) |
.EQV. | ЛОГИЧЕСКАЯ ЭКВИВАЛЕНТНОСТЬ |
.NEQV. | ЛОГИЧЕСКАЯ НЕЭКВИВАЛЕНТНОСТЬ |
Если операндами логических отношений (Таблица 4.5) могут быть только текстовые и числовые данные, то операндами логических операций могут быть только логические данные.
Логические отношения (Таблица 4.5) имеют более высокий приоритет выполнения по сравнению с логическими операциями (Таблица 4.6). Каждое логическое отношение (утверждение) является элементарным логическим выражением и может принимать значения: ".TRUE." или ".FALSE.", все операции отношения имеют одинаковый приоритет выполнения по отношению друг к другу:
Из логических данных и элементарных логических выражений можно выстраивать достаточно сложные логические выражения. При записи логических выражений можно использовать круглые скобки. Заключенные в круглые скобки части логического выражения вычисляются в первую очередь.
Оба логических выражения (для переменной FACT1 и FACT2 в Примере 4.7) содержат смешение стилей: для X > 0 используется знак «больше», а для Y.LT.2 используется мнемоника «меньше», что допустимо, но чего лучше избегать, в силу возникающей путаницы. В первом выражении проверяется истинность хотя бы одного из условий: принадлежности X интервалу от нуля до двух (включая два) или принадлежности Y тому же интервалу, но (включая ноль), а во втором выражении проверяется одновременная истинность тех же условий.
Поскольку логическое объединение «ИЛИ» (.OR.) имеет меньший приоритет, по сравнению с логическим пересечением «И» (.AND.), то в первом выражении скобки не требуются, а во втором выражении они необходимы для регулирования приоритета – иначе логические пересечения «И» (.AND.) будут выполняться последовательно, как имеющие равный приоритет.
Пример 4.7. Сложные логические выражения
program LOGFACT2 logical FACT1, FACT2 real :: X= 1., Y =2. FACT1=X > 0. .and. X <= 2. .or. Y .ge. 0. .and. Y .lt. 2. FACT2=(X > 0. .and. X <= 2.) .and. (Y .ge. 0. .and. Y .lt. 2.) print*, FACT1, FACT2 end
Практическое использование логических выражений рассматривается в связи с их использованием в логических операторах и конструкциях IF (п. 6.1).