4. Оператори переходу і логічні оператори
З допомогою уже відомих читачу операторів Фортрану (арифметичного оператора присвоєння, оператора описання типу) можна обчислювати арифметичні вирази і присвоювати їх значення змінним. Однак із їхньою допомогою не можна програмувати задачі у цілому, переривати і змінювати хід виконання програм. Для цієї мети існують оператори переходу GO TO, арифметичний та логічний умовні оператори. Це виконувані оператори.
4.1. Оператори переходу GO TO
У мові Фортран є три види операторів переходу GO TO:
безумовний оператор переходу;
оператор переходу за обчисленням;
оператор переходу за приписом.
4.1.1. Безумовний оператор переходу
Безумовний оператор переходу має вигляд:
GO TO n
де GO TO – символ Фортрану; n – мітка виконуваного оператора. Після виконання безумовного оператора переходу виконується оператор, помічений міткою n.
Розглянемо роботу програми, приведеної на рис. 2.
С
С
С
С

Програма, яка містить
безумовні оператори переходу


C
C
C
C

1
13
17
8
9
5
32
12
INTEGER B1
REAL J7
J7=6.7
GO TO 5
B1=3
J7=J7–2.3
GO TO 32
DOB=J7
DOB=DOB*J7
GO TO 17
STOP
END


Рис. 2. Приклад використання безумовних операторів переходу
Усі оператори програми мають мітки для зручності описання ходу виконання програми. Оператори будуть виконуватися у наступній послідовності:
1, 13, 5, 32, 12, 17, 8, 9, 32, 12, 17, 8, 9 ...
Процес обчислення ніколи не закінчиться. Для закінчення процесу обчислення необхідно приймати спеціальні заходи, які тут не розглядаються.
На рис. 3 наведена програма обчислення відстані між двома точками.
С
С
С
С

Програма обчислення
відстані між двома точками


C
C
C
С
77
1
12
READ (*,1) X1, Y1, Z1
READ (*,1) X2, Y2, Z2
FORMAT(3F7.2)
RK=(X1–X2)**2+(Y1–Y2)**2+(Z1–Z2)**2
R=SQRT(RK)
WRITE (*,12) R
FORMAT(2X,’Відстань між точками =’,F10.3)
GO TO 77
STOP
END


Рис. 3. Програма обчислення відстані між двома точками
4.1.2. Оператор переходу за обчисленням
Оператор переходу за обчисленням має вигляд:
GO TO (), l
де GO TO – символ Фортрану; – мітки виконуваних операторів; l – ціла змінна. Значення l повинно задовольняти рівність 1?l?j, де j – кількість міток у дужках. Якщо значення змінної дорівнює k, то виконання програми продовжується з оператора, поміченого міткою nk.
В операторі
GO TO (3, 17, 5), ІТ
змінна ІТ може приймати значення 1, 2, 3. Якщо значення ІТ дорівнює 2, то керування передається оператору, поміченому міткою 17.
В операторі
GO TO (2, 13, 7, 50, 9), N
змінна N може приймати значення 1, 2, 3, 4, 5. Якщо N дорівнює 2, то керування передається оператору, поміченому міткою 13.
Оператор переходу за обчисленням зручно використовувати у тому випадку, коли із декількох формул необхідно вибрати одну до розрахунку. У фрагменті програми, приведеної на рис. 4, обчислюється значення многочлена Тейлора за однією із формул:




яка вибирається у відповідності з величиною М (1?М?4).
С
С
С

Програма обчислення многочлена Тейлора


C
C
C
C
С

1
2
3
4
5
GOTO (1, 2, 3, 4), M
V=C1+C2*X
GOTO 5
V=C1+C2*X+C3*X**2/2
GOTO 5
V=C1+C2*X+C3*X**2/2+C4*X**3/6
GOTO 5
V=C1+C2*X+C3*X**2/2+C4*X**3/6+C5*X**4/24
GOTO 5
D=V**2–12.3


Рис. 4. Фрагмент програми обчислення многочлена Тейлора
4.1.3. Оператор переходу за приписом і оператор припису переходу
Оператор переходу за приписом має вигляд:
GO TO l, ()
де GO TO – символ Фортрану; l – ціла змінна; – мітки виконуваних операторів. Змінна l може бути лише в операторі припису переходу, який має вигляд:
ASSING n TO l
де ASSING і ТО – символи Фортрану; n – ціла константа без знаку, яка представляє мітку; l – ціла змінна. При виконанні оператора припису переходу змінній l присвоюється значення константи n. Якщо змінній l було присвоєне одне із значень міток , то після виконання оператора переходу за приписом виконання програми продовжується з оператора, поміченого цією міткою.
Наприклад, у результаті виконання операторів
ASSING 19 TO M
GO TO M, (3, 1, 19, 8)
відбудеться перехід до оператора з міткою 19.
У результаті виконання третього оператора фрагменту
INTEGER B
ASSING 1 TO B
GO TO B, (3, 1, 19, 8, 123)
відбудеться перехід до оператора з міткою 1.
Пара операторів
ASSING 10 TO L
GO TO L, (3, 1, 19, 8)
записана невірно, бо мітка 10 відсутня серед міток, взятих у дужки.
Увага! Не можна змінній l присвоювати значення, яке не співпадає з мітками .
Оператор переходу за приписом і оператор припису переходу, як правило, використовуються у випадку необхідності організації звертання до одного і того ж фрагмента програми із різних її місць. У такому випадку фрагмент описується лише один раз, а передачі керування на нього організовують за допомогою безумовного оператора переходу. Фрагмент, який повторюється, повинен закінчуватися оператором переходу за приписом, що забезпечує необхідне повернення. Для розуміння цього, розглянемо частину програми, звертаючи увагу на пояснення.


12
15
3
ASSING 12 TO L
GO TO 3
...
...
...
ASSING 15 TO L
GO TO 3
...
...
...
...
...
GO TO L, (12, 15)
Встановлення мітки повертання
Перехід до фрагменту програми, який повторюється
Оператор, який виконується першим після повертання
Встановлення мітки повертання
Перехід до фрагменту програми, який повторюється
Оператор, який виконується першим після повертання
Фрагмент, який повторюється
Оператор, який здійснює повертання


Що ж стосується оператора переходу за обчисленням, то запис
К=3
GO TО (21, 1, 25, 14, 3), К
еквівалентний до запису
ASSING 25 ТО К
GO TО К, (21, 1, 25, 14, 3)
В обох випадках виконання програми продовжується із оператора, поміченого міткою 25.
Слід відмітити, що розташування міток в операторі переходу за приписом не має значення, у той час як в операторі переходу за обчисленням воно є вирішальним.
У фрагменті програми, наведеному на рис. 4, також можна використати оператор переходу за приписом. На цей раз читачу надається можливість зробити це самому.
4.2. Арифметичний умовний оператор переходу
Арифметичний умовний оператор переходу має вигляд:
IF (a)
де IF – символ Фортрану; a – арифметичний вираз; – мітки виконуваних операторів. Слід зауважити, що дві з трьох міток можуть бути однаковими. Вираз a може бути цілим, дійсним чи з подвійною точністю.
При виконанні арифметичного умовного оператора переходу спочатку обчислюється значення виразу a. Якщо це значення менше нуля, рівне нулю чи більше нуля, то хід виконання програми продовжується з оператора, поміченого відповідно мітками n1, n2, чи n3. Таким чином, арифметичний умовний оператор переходу працює як перемикач з трьома виходами, як показано на рис. 5.
Рис. 5.
Приклади арифметичних умовних операторів переходу:
IF (B) 1, 2, 3
IF (5*J–17) 7, 3, 13
IF (DCOS(A)) 12, 2, 35
IF (C+2.3–D**3/ALF) 21, 6, 8
IF (2*SIN(B)**3) 1, 6, 1
Увага! В останньому прикладі мітки n1 і n3 однакові.
Невірні записи арифметичних умовних операторів переходу:
Запис
Причина помилки

IF (B–С) 1, 2
IF (B+С 21, 12, 5
IF (Р–(2.1, 7.4)) 2, 10, 9
Відсутня одна із міток
Відсутня закриваюча дужка
Комплексний вираз недопустимий


Видозмінимо програму обчислення відстані між двома точками, яка зображена на рис. 3, доповнивши її арифметичними умовними операторами переходу (див. рис. 4).
С
С
С
С

Програма обчислення
відстані між двома точками


C
C
C
C
С
77
1
3
4
5
12
13
RERAD (*,1) X1, Y1, Z1
RERAD (*,1) X2, Y2, Z2
FORMAT(3F7.2)
IF (X1–X2) 5, 3, 5
IF (Y1–Y2) 5, 4, 5
IF (Z1–Z2) 5, 13, 5
RK=(X1–X2)**2+(Y1–Y2)**2+(Z1–Z2)**2
R=SQRT(RK)
WRITE (*,12) R
FORMAT(2X,’Відстань між точками =’,F10.3)
GO TO 77
STOP
END


Рис. 6. Програма обчислення відстані між двома точками
Доповнена програма припиняє обчислення при умові рівності усіх координат двох точок. З цією метою після оператора введення проводиться серія перевірок арифметичними умовними операторами переходу. Обчислюється різниця значень двох відповідних координат та організовується перевірка на нуль для виявлення випадку їх рівності.
4.3. Вирази відношень
Вирази відношень складаються із двох арифметичних виразів, які розділені знаками операцій відношення. Знаки операцій відношення мають наступний вигляд:
Математичне позначення
Запис на Фортрані
Визначення

<
?
=
?
>
?
.LT.
.LE.
.EQ.
.NE.
.GT.
.GE.
Менше
Менше чи рівне
Рівне
Не рівне
Більше
Більше чи рівне


Арифметичні вирази і вирази відношень можуть бути цілими, дійсними чи із подвійною точністю. Вирази відношень приймають одне із двох логічних значень: істина (чи 1) чи фальш (чи 0).
При обчисленні виразів відношення спочатку розраховуються значення обох арифметичних виразів, а потім отримані значення порівнюються у відповідності до знаку операції відношення. Якщо умова виконується, то вираз відношення пр