- •Лекция 3
- •3. Алгоритмический язык фортран /3,5,11/
- •3.1. Историческая справка
- •1978 Г., Фортран 77.
- •3.2. Элементы языка Фортран
- •3.2.1. Алфавит, форматы записи программы
- •3.2.2. Имена, объекты данных, атрибуты
- •3.2.4. Программные единицы
- •3.3. Порядок следования операторов и метакоманд в программной единице
- •3.4. Организация данных
- •3.4.1. Типы данных
- •3.4.2. Описание несимвольных типов данных
- •3.4.3. Буквальные (неименованные) константы
- •3.4.4. Задание именованных констант
- •3.4.5. Задание начальных значений переменных
- •3.4.6. Символьные данные
- •3.5. Выражения, операции и присваивания
- •3.5.1. Арифметическое выражение
- •Integer(2)
- •Integer(4)
- •3.5.2. Выражения отношения и логические выражения
- •3.5.3. Правила вычисления выражений
- •3.5.4. Константные и описательные выражения
- •3.6. Управляющие операторы и конструкции
- •3.6.2. Конструкция select case
- •1 Continue
- •3.6.5. Операторы pause, stop, end
- •3.7. Форматный ввод-вывод
- •3.7.1. Вводный комментарий
- •3.7.2. Оператор format
- •3.7.3. Дескрипторы данных
- •3.7.4. Дескрипторы управления
- •3.7.5. Задание формата в операторах ввода-вывода
- •20 Format (f5.0, 2p, 2f5.0, 3p, f5.0)
- •21 Format (1x, 2p, e10.3, 3x, 3p, f10.3)
- •3.7.6. Списки ввода-вывода
- •3.7.7. Управляемый списком ввод-вывод
- •Namelist / имя списка b/b / список переменных &
- •24.000000 Qwertyuiop sub
- •3.8. Массивы
- •3.8.1. Описание размерности статических массивов
- •3.8.2. Сечение массива
- •3.8.3. Присваивание значений элементам массива
- •Where (логическое выражение - массив) присваивание массива
- •3.8.4. Динамические массивы
- •Integer n, m, kp
- •Integer I
- •Interface
- •3.8.5. Массивы – формальные параметры процедур
- •Integer n, m, j
- •Integer n, I, j
- •Interface
- •3.9. Файлы Фортрана
- •3.9.1. Основные понятия
- •3.9.2. Операции над внешними файлами
- •3.9.3.Операторы передачи данных
- •Endfile u
- •3.9.4. Порядок выполнения передачи данных
- •3.9.5. Операторы подсоединения устройств к файлам
- •24.000000 Qwertyuiop sub
- •3.9.6. Операторы позиционирования файла
- •3.10. Встроенные функции и процедуры
3.5. Выражения, операции и присваивания
3.5.1. Арифметическое выражение
Таблица 3.5
Например,
Ранг операнда определяется в соответствии со следующим списком:
INTEGER(1) - низший ранг;
Integer(2)
Integer(4)
REAL(4)
REAL(8)
COMPLEX(8)
COMPLEX(16) - высший ранг.
3.5.2. Выражения отношения и логические выражения
Операции отношения (табл. 3.5):
.LT. - меньше
.LE. - меньше или равно
.GT. - больше
.GE. - больше или равно
.EQ. - равно
.NE. - не равно.
Логические выражения
Логические операции: .NOT. - отрицание (наивысший приоритет)
.AND. - умножение (средний приоритет)
.OR. - объединение (средний приоритет))
.ХOR. - логическое исключающее ИЛИ (низший приоритет))
.EQV. - эквивалентность (низший приоритет)
.NEQV.- неэквивалентность (низший приоритет)
Таблица 3.4.Таблица истинности
X |
y |
x.and.y |
x.or.y |
.not.x |
x.xor.y |
x.eqv.y |
x.neqv.y |
И И Л Л |
И Л И Л |
И Л Л Л |
И И И Л |
Л Л И И |
Л И И Л |
И Л Л И |
Л И И Л |
Пример логического выражения с операндами целого типа.
write(*,*) 8.or.1 ! на печать будет выдано 9
Пример использования маски в логическом выражении.
program ttt
integer(2) :: mask=#00ff ! маска mask и число k заданы в
integer(2) :: k=#5577 ! шестнадцатеричной системе счисления
print *,’(z)’, mask.and.k ! результат в 16-ричной системе: 119
end program ttt
3.5.3. Правила вычисления выражений
Таблица 3.5. Приоритет выполнения встроенных операций
** |
* / |
+ - |
// |
.LT., < .LE., <= .GT., > .GE., >= |
.EQ., == .NE., /= |
.NOT. |
.AND. |
.OR. |
.XOR. .EQV. .NEQV. |
3.5.4. Константные и описательные выражения
Пример константных выражений.
integer, parameter :: n=10, m=1/2 ! константные выражения
character(*), parameter :: st(3)= (/’январь’,‘февраль’,’март’/) ! инициализирующие
! константные выражения
3.6. Управляющие операторы и конструкции
3.6.1. Операторы условного и безусловного перехода
Оператор безусловного перехода GO TO: GO TO метка
Условный логический оператор IF имеет вид: IF (ЛВ) оператор
Конструкция IF THEN ENDIF имеет вид:
<имя:> IF (ЛВ) THEN
блок
END IF <имя>
Конструкция IF THEN ELSE ENDIF имеет формат:
<имя:> IF (ЛВ1) THEN
Блок1
ELSE IF (ЛВ2) THEN <имя>
Блок2
...........................
< ELSE <имя>
Блокn>
END IF <имя>
Пример использования операторов и конструкций перехода.
program yok1
integer a(15), ap/0/, ae/0/, az/0/, i, x, y/100/ ! описание и инициализация данных
print *, 'Input a(15)' ! вывод сообщения
read *, (a(i), i=1,15) ! ввод массива:
! -2 10 -3 0 3 14 -7 0 4 12 0 8 1 0 2
print *, 'Input x' ! вывод сообщения
read *, x ! ввод переменной: 98
! использование конструкции if then endif
! для нахождение большего из двух чисел
if (x.gt.y) then ! проверка условия: если оно истинно, то
print *, ‘x=’, x ! вывод результата
end if ! завершение проверки условия
print *, ‘y=’, y ! вывод результата, если условие ложно: y=100
! определение числа положительных ap, отрицательных ae и нулевых az
! элементов в массиве а
2 i=1 ! подготовка цикла
3 continue ! точка возврата на повторение цикла
! использование конструкции if then else endif для проверки условий
NAME1: if (a(i)>0) then ! определение количества
ap=ap+1 ! положительных чисел
else if (a(i)<0) then ! определение количества
ae=ae+1 ! отрицательных чисел
else NAME1 ! определение количества
az=az+1 ! чисел, равных нулю
end if NAME1
i=i+1 ! увеличение счетчика цикла
! использование условного логического оператора для проверки условия
if (i<=15) goto 3 ! конца цикла и передача управления по метке
print *, ap,'(>0)', ae,'(<0)', az,'(=0)' ! вывод результатов:
end program yok1 ! 8(>0) 4(<0) 3(=0)