Обратить внимание I/I=I; R8#C8
Операция ** определена не для всех типов
10.5 Арифметические выражения
Арифметические выражения – это конструкции, в которых арифметические величины связанны арифметическими операциями. Для указания последовательности операций следует использовать скобки. К моменту вычисления выражения все переменные должны быть инициализированы (т. е. значения их определены). Промежуточные результаты не должны выходить за разрядную сетку. В процессе вычислений производится преобразование типов данных в соответствии с таблицей п.10.4.
Пример: Сравнить 1/6*(А1+А2); (А1+А2)/6; 1./6*(А1+А2)
10.6 Отношения
Отношения – это операции преобразования типа. Отношения связывают арифметические величины, результат – логическая величина.
Примеры:
5.GT.3 - "истина";
3.GE.3 - "истина";
4.NE.4 - "ложь";
X. LE.3 - истинностная форма, принимает значение "истина", если X строго меньше трех, в противном случае - "ложь".
10.7 Логические операции
Операции над логическими величинами, результат - логические величины.
В.1 | В.2 | Отрицание | Умножение | Сложение | Эквивалентность | Неэквивалентность |
L1 | L2 | .NOT.L1 | L1.AND.L2 | L1.OR.L2 | L1.EQV.L2 | L1.NEQV.L2 |
и | и | л | и | и | и | л |
и | л | л | л | и | л | и |
л | и | и | л | и | л | и |
л | л | и | л | л | и | л |
Логические выражения - осмысленные комбинации логических величин, связанных логическими операциями.
10.8 Полный приоритет операций
1) Вызов функций;
2) Возведения в степень;
3) Умножения и деления;
4) Сложения и вычитания;
5) Отношения;
6) Отрицания;
7) Логические умножения;
8) Логические сложения;
9) Эквивалентности и неэквивалентности.
Примеры логических выражений
Выражение (i/2*2.EQ. i).EQV.(j/2*2.EQ. j) принимает значение "истина" на элементах матрицы (i - номер строки, j - номер столбца), расположенных в шахматном порядке относительно элемента с индексами i=1, j=1.
Выражение (X*X + Y*Y).LT.1 принимает значение "истина" на множестве точек (X, Y) на плоскости, лежащих внутри круга единичного радиуса с центром в начале координат.
Лекция 11
11.1 Операторы Фортрана
Выполняемые | Невыполняемые (декларативные) |
Присваивания Ввода/вывода Управления | Описания Распределения памяти Заголовки Остальные |
11.2 Программный модуль
Независимо транслируемая часть программы.
· Головная программа,
· подпрограмма-функция,
· подпрограмма-процедура,
· BLOCKDATA.
Порядок следования операторов в программном модуле
PROGRAM, BLOCKDATA, FUNCTION, SUBROUTINE | ||
IMPLICIT | PARAMETER | ENTRY |
COMMON DIMENSION EQUIVALENCE EXTERNAL INTRINSIC Операторы описания типа | FORMAT | |
Операторные функции | DATA | |
Выполняемые операторы | ||
END |
11.3 Операторы присваивания
Oпepaтop пpиcвaивaния являетcя выпoлняeмым oпepaтopом. Он служит для переопределения знaчeния простой пepeмeнной или элeмeнтa мaccивa и имеет вид:
А=В
где А - арифметическая (логическая) переменная, В - арифметическое (логическое) выражение. Символ присваивания "=" означает, что величина А принимает значение выражения В, возможно преобразование типа результата к типу переменной.
Имя оператора - знак "=".
А=В | I2 | I4 | R4 | R8 | C8 | C16 |
I2 | Ул | [ ] ул | [ ] ул | [ ] - i ул | [ ] - i ул | |
I4 | О | [ ] ул | [ ] ул | [ ] - i ул | [ ] - i ул | |
R4 | уп | - i | - i уп | |||
R8 | О | - i | - i | |||
C8 | 0i | 0i | 0i | 0i уп | уп | |
C16 | 0i | 0i | 0i О | 0i | О |
Обозначения:
ул - усечение старших разрядов;
уп - усечение младших разрядов;
[ ] - выбирается целая часть числа;
0 - дополняется нулями;
0i - добавляется нулевая мнимая часть;
-i - отбрасывается мнимая часть.
11.4 Оператор CONTINUE
Выполняемый пустой оператор – носитель метки. Играет важную роль в структурном программировании как средство отделения логики программы от вычислительных кодов.
11.5 Оператор безусловной передачи управления
Имя оператора – GOTO.
Формат записи – GOTO <метка>.
Осуществляется передача управления на оператор с меткой <метка>.
Существует ограничение на использование оператора GOTO – нельзя передавать управление внутрь тела цикла DO, а также внутрь блоков структурного оператора IF.
Пpимep:
GOTO 4022
...
4022 CONTINUE
11.6 Вычисляемый оператор передачи управления
Имя оператора – GOTO.
Формат записи – GOTO(<метка>[,<метка>]...)[,]<целочисленное выражение>
гдe:
<метка> – мeткa выпoлняeмoгo oпepaтopa, находящегося в той же программной единице. Однa и тa жe мeткa мoжeт пoвтopятьcя в списке.
Вычисляется значение i целочисленного выражения. Если это значение в диапазоне от 1 до n, где n – количество меток в скобках, то управление передается оператору с меткой, стоящей на
i-том месте в списке меток.
Пpимep:
GOTO (15,17,84,3) k+1
Если k=2, то управление будет передано оператору с меткой 84.
Если k=7, то управление передается следующему оператору программы.
11.7 Оператор передачи управления по предписанию
Имя оператора – GOTO.
Формат записи – GOTO <целочисленная переменная>(<метка>[,<метка>]...)
гдe:
<метка> – мeткa выпoлняeмoгo oпepaтopa, находящегося в той же программной единице.
С помощью оператора ASSIGN <метка> TO <целочисленная переменная> целочисленная переменная связывается с конкретной меткой из списка меток оператора «GOTO по предписанию». На оператор с этой меткой будет передано управления при выполнении оператора «GOTO по предписанию». Если метка отсутствует в списке, управление передается следующему оператору.
Пример :
ASSIGN 10 TO I
…
GOTO I(4,10,777)
…
10 CONTINUE
11.8 Арифметический оператор условной передачи управления
Имя оператора IF
Формат записи IF(<арифметическое выражение>)<метка1>,<метка2>,<метка3>
гдe:
<метка1>,<метка2>,<метка3> – мeтки выпoлняeмых oпepaтopов, находящихся в той же программной единице.
Bычиcляeтся арифметическое выpaжeниe и упpaвлeниe пepeдaeтся oпepaтopу, пoмeчeннoму oднoй из oпиcaнныx мeтoк в cooтвeтcтвии c peзультaтoм вычисления выpaжeния. Если значение выражения меньше нуля, то управление передается оператору с меткой <метка1>, если значение выражения равно нулю, то управление передается оператору с меткой <метка2>, если значение выражения больше нуля, то управление передается оператору с меткой <метка3>. Метки в списке меток могут повторяться. Оператор IF(A)17,17,17 эквивалентен оператору GOTO 17.
Пpимep:
I = 0
…
IF (I) 10,20,30
10 CONTINUE
…
20 CONTINUE
…
30 CONTINUE
11.9 Логический оператор условной передачи управления
Имя оператора IF
Формат записи IF(<логическое выражение>)<оператор>
Bычиcляeтся логическое выpaжeниe и, если значение. TRUE., то выполняется оператор <оператор>, в противном случае управление передается следующему оператору. В качестве оператора <оператор> может использоваться любой выпoлняeмый oпepaтop, кpoмe оператора цикла DO, логического и структурного операторов условной передачи управления.
Пpимep:
IF (I. EQ. O) J = 2
IF (X. GT.2.3) GOTO 100
…
100 CONTINUE
11.10 Структурный оператор условной передачи управления*
Формат оператора
IF (<логическое выражение>) THEN
<Блок операторов, выполняемых при значении. TRUE.>
[ELSE
<Блок операторов, выполняемых при значении. FALSE.>]
ENDIF
Строка ELSE с соответствующим блоком может отсутствовать.
Пepeдaвaть упpaвлeниe внутpь блоков нeдoпуcтимo.
Пpимep:
IF(I. GT.1000)THEN
<Набор операторов, вычисляемых если J. GT.1000>
ELSEIF(J. GT.100)THEN
<Набор операторов, вычисляемых если J. GT.100 и J. LE.1000>
ELSEIF(J. GT.10)THEN
<Набор операторов, вычисляемых если J. GT.10 и J. LE.100>
ELSE
<Набор операторов, вычисляемых если J. LE.10>
ENDIF
Конструкция
…
ELSEIF <операторы>
…
эквивалентна
…
ELSE
IF <операторы>
…
Блок IF с операторами ELSEIF.
11.11 Оператор цикла с параметром
DO<метка>[,]<переменная>=<выражение1>,<выражение2>[,<выражение3>]
Метка <метка> – метка конечного оператора цикла.
Переменная <переменная> называется параметром цикла – переменная целого (любого арифметического*) типа.
Выражения в списке – выражения целого (любого арифметического*) типа.
Конечный оператор цикла должен находиться после оператора DO и содержаться в той же программной единице.
В качестве конечного оператора цикла можно использовать любой выполняемый оператор, кроме оператора безусловной передачи управления, арифметического оператора условной передачи управления, операторов STOP, RETURN, DO и логического оператора условной передачи управления с перечисленными выше операторами.
Операторы, расположенные после оператора DO, вплоть (включая) до конечного оператора цикла, составляют тело цикла.
Тело цикла выполняется последовательно для каждого значения параметра цикла <переменная> начиная со значения <выражение1> до (включая) значения <выражение2> с шагом равным значению <выражение3>.
Если выражение <выражение3> отсутствует, то шаг изменения параметра цикла равен 1.
О вложенности операторов (гнезда операторов DO)
Предостерегающий пример:
INTEGER*2I
DO 100 I=32760,32767
. . .
100 CONTINUE
В этом примере параметр цикла объявлен как переменная целого типа длины 2 байта. При реализации цикла транслятор использует в качестве счетчика итераций 32-битное слово. Поэтому тело цикла будет выполнено благополучно, не смотря на то, что после последней итерации значение параметра цикла превышает максимальное двухбайтное целое.
Лекция 12
12.1 Реализация стандартных структур
Задача. Реализовать на Фортране структуры и их частные случаи. Выполните эту работу самостоятельно, а потом проверьте полученные решения
№ | Наименование структуры | Структура | Реализация |
1 | Линейная |
| … Ф1 Ф2 … |
2 | Выбор (стандарт) |
| IF (усл) GOTO 17 Ф2 GOTO 18 17 CONTINUE Ф1 18 CONTINUE |
3 | Выбор (Фортран-77) |
| IF (усл) THEN Ф1 ELSE Ф2 ENDIF |
4 | Односторонний выбор «истина» (стантарт) |
| IF (.NOT. усл) GOTO 18 Ф1 18 CONTINUE |
5 | Односторонний выбор «истина» (Фортран-77) |
| IF (усл) THEN Ф1 ENDIF |
6 | Односторонний выбор «ложь» (стантарт) |
| IF (усл) GOTO 17 Ф2 17 CONTINUE |
7 | Односторонний выбор «ложь» (Фортран-77) |
| IF (.NOT. усл) THEN Ф2 ENDIF |
8 | Односторонний выбор «истина» (элементарная операция) |
| IF (усл) Ф1 |
9 | Цикл итерационный |
| 17 CONTINUE Ф1 IF (усл) GOTO 18 Ф2 GOTO 17 18 CONTINUE |
10 | Цикл с предусловием |
| 17 CONTINUE IF (.NOT. усл) GOTO 18 Ф2 GOTO 17 18 CONTINU |
11 | Цикл с постусловием |
| 17 CONTINUE Ф1 IF (.NOT. усл) GOTO 17 |
12 | Цикл с параметром |
| DO 17 i=1,n,1 Ф1 17 CONTINUE |
12.2 Операции ввода/вывода
Ввод данных в программу осуществляется:
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 |











