
книги / Справочник проектировщика систем автоматизации управления производством
..pdfФ о р т р а н |
П Р О Г Р А П П А |
С О С Т А В И Л С а п р ы к и н |
Д А Т А |
|
_ Л И С Т |
1 |
|
|
|
|
|||||
M t A U n i f |
7 0 “ |
|
В ы ч и с л е н и е s i n x |
д . 1 0 . 7 2 |
г . |
Л И С Т О В |
1 |
|
|
|
|||||
„ и r u r i *f\ |
s J £ |
|
|
|
|
Ш и ф р з а д а ч и |
|
|
|
|
П Р О В О Р И Л Ж б а н о в |
Д А Т А |
• |
||
|
|
|
|
|
|
|
|
|
|
|
|
2 8 . 1 2 . 7 2 г . |
■ ' 1 ■ ' |
■g ‘ |
и |
С W u H c m p . |
Я |
||||
1 |
2 |
| J |
, |
4 . |
5 |
6 |
L |
— |
I . |
1 |
1 |
|
|
|
|
|
||||
|
— 1____1____L |
_ |
|
|||
|
|
, |
, |
7 , |
0 |
|
|
____!____> |
» |
|
|
||
|
|
1 |
t |
i |
|
|
—!— 1____1___
,, 2 , 0
—i____i____l___
,, 3 . 0
— i____i |
» |
|
« |
1 4 |
1 0 |
i |
1 |
1 0 |
___ i____! |
» |
|
— I____1____L _ |
||
i |
i |
i |
___ 1____1__I__
—1____!____!____
—I____L . !
_ J ____I____1____
■ 1 ) 1
___ i____i____L L
i |
i |
i |
■ |
J . - L |
. l . |
_ J __ !____1__
■
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 0 |
|
|
|
|
|
|
1 - 1 |
! |
.1 |
> |
1 |
1 |
1 |
1 |
|
|
» |
1 |
! |
1 |
1 |
У |
) |
1 |
\ °\ |
1 |
1 |
» |
1 |
1 |
1 |
i |
1 |
|
|
1 |
i |
1 |
1 |
1 |
1 |
|
, . |
» |
i |
, |
■ |
, |
, |
|
,.................................... 6 0 . . . . . |
i |
i |
i |
t |
7 0 |
77 |
|||||||||||||||
|
|
|
|
|
r K a U К A П |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
............................................................ |
|
|
|
|
|
|
|
......... |
|
.................................... |
|
|
|
|
■ |
• |
|
i |
■■ i |
■ |
i |
|
i |
i |
i |
i |
i |
. |
i |
t |
i . |
|
||||||||||||||||
T |
f o |
|
W |
- V |
a 1 V |
|
' Л |
1 1 1 1 1 1 1 1 1 1 ' |
1 1 1 1 1 1 1 1 ' |
1 1 1 1 1 1 , |
' |
, |
' |
|
i |
, |
! |
i |
, |
|
, |
, |
|
i |
i |
, |
i |
, |
|
i |
......................................................................... |
|
|
|
|
|
|
|
|
|
■ |
|
||||||||||||||||||||||||||||
F 0 |
R f 1 A |
|
T ( 2 F 8 . 5 ) |
|
1 1 1 l - |
|
1 1 1 1 J - ■ |
1 - J---------------- |
|
|
1— ^ - 1 1 1 1 -] |
1 1 I |
1 » ■ » |
|
f |
1 1 1 1 1 1 » |
« |
i |
i |
i |
|
i |
. |
i . |
|
, |
i |
, |
i |
, , |
, |
, |
, |
|
||||||||||||||||||||||||||||||||||||
T |
' V / |
V |
. V |
|
............................................................................................................................................................................................................ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
' |
! |
■ |
• |
1 |
1 |
1 |
|
1 |
! |
1 |
1 |
■ |
|
1 |
, |
|
, .................................................................................................................... |
|
||||||||||||||||||
Г |
7 F f l - |
0 |
|
' ' |
1 1 1 1 1 1 1 1 l ~ J ' 1 1 - 1" 1 1 1 1 1 1 1 1 1 J - 1 1 ' |
|
1 '■ |
1 1 1 1 1 1 1 1 1 » |
1 1 1 1 ! |
1 1 • |
|
t |
1 1 ! |
|
1 1 1 . |
1 ! |
1 . |
1 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
т У |
. г У |
- |
ï |
|
' |
' |
' - 1- 1 1 1 1 1 1 1 |
|
1 |
1 ■ ■ |
> ■ ' |
■ 1 ■ .....................................> » |
|
|
|
|
|
............................................................................................................................................................................................................................... |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
|
p j |
î \ r u J |
J £ |
|
p |
|
1 ! |
1 J |
|
1 ? |
1 1 *• 1 1 1 * |
|
|
1 1 } |
1 1 1 1 1 ’ ■ 1 |
' |
1 1 1 » |
1 ! |
1 |
|
1 1 1 1 1 1 1 1 1 1 f |
1 1 1 1 1 1 1 . |
1 ! |
||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
p ' ; i |
|
|
|
|
м Ж ' А ъ : |
L : : |
: |
: |
|
: : |
: : : |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
P R I N T |
|
5 0 . X |
|
. F R |
|
Т е Т Г р |
|
|
T a H |
|
|
r V |
|
r V |
......................... |
|
|
|
|
1 1 1 1 ■ |
» |
■ |
■ |
» |
1 » |
< |
> |
1 i |
i |
|
i |
1 i. i |
|
i |
i |
i |
t |
i |
i |
» |
t |
i |
i |
i |
i |
> . |
|
|
||||||||||||||||||||||
U |
|
» |
i |
i |
I |
П . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i . . . |
. |
. . . |
|
, |
, |
( |
) |
l l |
|
l |
( |
. , , |
r |
|
|
|
|
|
|
|
|
|
|
........................................... |
|
|
|
|
|
....... |
...................... |
|
|
|
|
: |
|
||||||
F 0 R П A i ( 4 E 2 0 . |
8 |
|
1 2 0 ) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 1 1 1 1 1 1 1 *■ 1 1 1 ? |
|
1 1 1 1 1 1 1 1 1 > - ' ■ » » » |
1 . 1 |
i |
i |
1 » |
■ |
||||||||||||||||||||||||||||||||||||||||||||
- - . L J |
0 |
« |
1 |
1 |
1 |
1 |
1 |
1 |
» |
1 |
1 |
1 * |
1' |
I |
l |
\ '\ |
■ |
[ |
j |
t |
| |
| |
| |
i |
| |
| |
i |
i |
‘i |
i . . . |
. |
, |
i |
i . |
, |
| |
| |
|
, |
, |
| |
, |
|
, |
, |
, |
, |
|
, |
, |
, ................................................................. |
, |
, |
■ |
||||||||||||||||
S |
1 |
P |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---------- |
|
|
— — |
— *— * |
1— 1— ‘ |
■ |
■— 1— 1— 1— 1— 1— 1— I— !— 1— 1— 1___1___1 |
I |
1 1 |
1 |
1 |
1 |
! |
1 |
t |
1 |
1 |
1 |
1 |
|
||||||||||||||||||||||||
E |
N |
J } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
— |
— ---------- |
— |
— |
— |
— 1— 1— 1 |
'— ■— 1— 1— 1— 1— 1— 1— 1— 1— 1— 1— 1— 1— !— I— 1— 1— L J — 1___1___ 1__ t |
1 |
t |
1 |
t |
1 |
1 |
1 |
, |
|||||||||||||||||||||||||||||||
- |
Г |
Г |
» |
1 1— L |
i ■ ! |
1 1 |
t |
1 1 i |
i |
i |
l |
l |
1 i |
i |
. |
i |
i |
i |
i |
i |
i |
i . |
i |
, |
, |
, |
| |
, |
, |
| |
| |
| |
, |
, |
, |
|
, |
, |
| |
, |
|
, |
, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; |
||||||||
- - 1 |
1 1 |
1 |
1 |
> |
» |
1 t |
1 ) |
1 |
1 ! |
1 - 1 |
1 1 « |
1 « |
» |
1 1 » |
» |
1 1 ) . |
1 1 1 1 1 1 I |
, |
! |
, |
I |
1 I |
|
, |
, |
, |
, |
|
, |
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
, |
|
|||||||||||||||||||||
“ |
1— |
■— ■— |
*— |
l— |
1— *— 1— 1 1 — 1— •— |
!— 1— 1— 1— !— 1— 1— 1— 1— 1— 1___1___1 |
i |
1 |
1 |
1 |
» |
i |
I |
l |
i |
i |
i |
i |
i |
i |
i |
t |
i |
i |
|
i |
1 |
1 |
1 |
|
1 |
l |
i |
l |
i |
|
i |
i |
i |
i |
i |
i |
i |
i |
i |
f |
i |
i |
i |
i |
|
|||||||||||||||||||
— |
1— |
1 |
) |
1 |
1 |
1— |
1— |
!— |
L - |
) |
1 |
1 |
1— 1— 1— 1— 1 |
1 |
!— 1 |
1 |
1___1 |
I |
* . |
1 |
l |
1 |
1 |
i |
i |
i |
i |
i |
i |
, |
i |
i |
i |
| |
i |
1 |
|
i |
1 |
1 |
i |
|
i |
I |
I |
i |
i |
|
i |
i |
i |
i |
i |
i |
i |
• |
i |
i |
i |
i . |
» |
|
||||||||
|
' |
* |
* |
1— !■ |
) |
) |
1 1 1 |
) |
1 1 - 1 ) |
1 1— L J — I |
* |
j |
1 1 1 > |
i |
i |
! |
i |
i |
l |
i |
i |
i |
i |
i |
i |
i |
i |
i |
i |
i |
|
i |
i |
i |
i |
|
i |
i . i |
i |
i |
|
i |
i |
i |
i |
i |
i |
i |
i |
i |
i |
i |
i |
i |
i |
|
||||||||||||||
— L - 1 » |
» |
1 1 » |
1 1 i - |
1 1 1 1 - 1 |
1 » |
1 1 1 ■ » |
1 1 1 1 1 1 1 1 t |
1 1 . |
| |
| |
. |
t |
| |
| |
, |
| |
, |
| |
|
| |
| |
| |
| |
|
| |
| |
, . . . . . . |
|
. . . . |
|
. . . . |
|
. . |
|
||||||||||||||||||||||||||||||||||||
— *— *— *— 1— 1— 1— *— *— 1— 1— 1— 1— 1— 1— 1— 1— 1— 1— 1— 1— 1— 1— 1— 1— 1— 1—1_1_L 1 1 1 1 t l 1 l i 1 f l 1 i i i i | i | | i , i i t i t i t i i , . . . , |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
— |
|
1— *— 1— 1— 1— *— 1— 1— 1— 1— 1— |
1— 1— 1— 1— 1— 1— 1— 1— 1— 1— 1— 1— 1___» |
» |
1 |
« |
» |
l |
l |
» |
1 |
1 |
» |
1 |
1 |
t |
1 |
1 |
1 |
1 |
|
1 |
l |
1 |
1 |
|
1 |
l |
| |
| |
| |
|
| |
| |
i |
I |
1 |
l |
i |
i |
r |
1 |
l |
1 |
1 |
i |
|
|||||||||||||||||||||||
■ |
i |
1— i— 1— i— |
l—J — |
1— 1— l— i— l— l |
l |
l— 1— I— 1— 1— 1— |
1— 1— » |
l |
« |
» |
» |
1 |
« |
» |
l |
» |
> |
» |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
|
1 |
i |
l |
i |
|
1 |
t |
i |
i |
i |
|
| |
i |
i |
Г |
i |
i |
i |
i |
■ |
|
|
|
|
. |
|
||||||||||||||||
|
1 1 1 1 1 1 * 1 1 - 1 1 1 1 » |
1 1 f |
1 1 » |
1 1 1 -1 1 1 » |
» |
» |
i |
I |
» |
t |
1 1 « |
1 1 1 » |
1 1 1 1 1 1 f |
|
1 1 1 1 1 |
|
.................................................. |
|
|
|
|
|
|
....... |
|
, |
|
|
|
|
|
1 1 1 ! 1 1 1 1 1 1 f - J ' 1 1 M 1 1 1 1 *■ 1 ' 1 1 »■ ■ » 1 » ' » 1 » 1 » > • » « » ' » » 1 > 1 1 » » » » t i- J .1 1 1 1 » > 1 , , ,
Рис. VII. 11. Запись ФОРТРАН-програг.шы на бланке
О. — означает число типа REAL;
О— число типа INTEGER.
ВФОРТРАНе имеется несколько типов функций, из которых наиболее важными являются стандартные функции и функции, определенные программистом. Иденти фикатор стандартной функции обязательно оканчивается буквой F, а результат функции принадлежит к типу INTEGER, тогда и только тогда, когда ее идентифи катор начинается с буквы X.
Примеры стандартных функций:
ABSF (X) — абсолютная величина;
SQRTF (X) = V IT , EXPF (X) = е*; SIN F (X) = sin X;
FLOATF (X) — значение в области REAL, соответствующее аргументу IN TEGER; X F IX F (X) — значение в области INTEGER, соответствующее аргументу
REAL.
Идентификаторы функций, определяемые программистом, не должны оканчи ваться на F, а результат относится к типу INTEGER в том случае, если первая буква идентификатора есть / -5- N.
Пример: SUM (FOOT, J ) — функция для выполнения суммирования первых J членов массива FOOT.
Для изменения естественного порядка следования команд используются инструк ции передачи управления. В нашем примере (рис. VII. 11) это:
GO ТО 20 — безусловная передача управления оператору с номером 20; IF (ABSF (TEMP)—ER) 30, 30, 40 — условная передача управления (так называемая «ариф метическая инструкция IF»):
если |
ABSF (TEMP) ^ |
ER оператору №30; |
если |
ABSF (TEMP) > |
ER -> оператору № 40. |
Вообще говоря, в таком виде инструкции передачи управления осуществляются в зависимости от значения арифметического выражения Е = ABSF (TEMP) — ER следующим образом:
при |
Е |
< |
|
0 |
оператору,номеркоторого стоит первым |
в списке; |
в с |
|||
при |
Е |
= |
|
0 |
-*■ |
оператору,номеркоторого является вторым |
||||
при |
Е |
> |
|
0 |
оператору,номеркоторого стоит третьим |
в списке. |
|
|||
Существует еще несколько видов инструкций передачи управления: |
|
|||||||||
1) вычисляемая |
инструкция |
GO ТО: |
|
|
|
|||||
например, GO ТО (39, 70, 11, 74), ITEM |
|
|
|
|||||||
П А = В |
|
|
|
|
|
|
|
|||
70 В = SQRTF (2.) |
|
|
|
|
||||||
74 А = В * С |
|
|
|
|
|
|
||||
39 B = |
C + |
D . |
|
|
|
|
|
|
||
Значение |
целочисленной переменной ITEM |
вычисляется, и если, например, |
|
|||||||
ITEM = 3, управление передается оператору № |
11; |
|
|
|||||||
2) присваиваемая |
инструкция GO ТО: |
|
|
|
||||||
например, |
|
|
|
|
|
|
|
|||
10 |
ASSIGN 20 |
ТО ITEM |
30) |
|
|
|
||||
GO ТО IT E M , |
(40, 20, 60, |
|
|
|
||||||
20 |
Л |
= |
B C + D . |
|
|
|
|
|
После слова ASSIGN стоит один из номеров операторов, содержащихся в списке инструкции GO ТО, к нему и происходит безусловный переход;
3) логическая инструкция IF:
например,
a)j 8 IF (A.EQ.B) GO TO 10
FALSE U «) |
C = D * E |
—30 |
IF (A.GT.O.b) SPEED = (A— B) *C TRUE |
FALSE |
TRUE-*' |
—25 |
F = C |
10D = EJC <------------------------------
6)—20 IF (.NOT.(P.OR.Q)) A = B/2.
FALSE |
TRUE — |
—10 |
D = B/3. |
Для организации циклов используется инструкция DO, в которой задается но мер последнего оператора в группе повторяемых команд и определяются значения, которые должен принимать индекс цикла.
Пример: DO 20 / = 1,500
STOCK (/) = STOCK (/) — OUT (I) 20 CONTINUE.
Эта инструкция вызывает повторное выполнение команд, стоящих после опера тора £Ю до оператора с номером 20, причем индекс I принимает значения-1, 2,..., 500.
Если шаг изменения индекса не равен 1, инструкция DO записывается в виде: DO 30 J = 2, 30, 2
SUM = SUM + X (J) 30 CONTINUE
(здесь индекс J изменяется от 2 до 30 с шагом 2).
Внашем примере (рис. VII. 11)
READ 10, X , ER
10 FORMAT (2 F 8.5)
является управляющим оператором ввода, состоящим из инструкции READ, ко торая обеспечивает чтение с вводного устройства чисел и присваивает их перемен ным X и ER , и инструкции FORMAT, которая описывает перечень и форму вво димых величин. В нашем примере .вводятся два числа в форме с фиксированной запя той (/Q, причем восемь первых колонок перфокарты отведены под изображение числа: пять колонок отведены под дробную часть числа, а три заняты целой частью.
В нашей программе инструкции
40 PRIN T 50, X, ER, TEMP, SUM, ITEM
50 FORMAT (4£20.8, /20)
обеспечивают вывод (печать) значений переменных X, ER, TEMP, SUM в форме чисел с плавающей запятой, состоящих из 20 символов каждое, из которых восемь будут принадлежать нормализованной мантиссе, а также вывод на печать значе
ния ITEM в виде целого числа, |
состоящего из 20 символов. |
В ФОРТРАНе используются |
подпрограммы типов FUNCTION и SU BROU* |
TIN E. |
|
Подпрограмма типа FUNCTION является сама по себе полной программой и полностью независима и отделена от программы, в которой она используется. Пре дусматривается возврат в основную программу с помощью оператора RETURN.
Пример. Подпрограмма типа FUNCTION вычисления суммы квадратов эле ментов одномерного массива в размерности 300 имеет вид:
FUNCTION SUM К (В, N) DIMENSION В (300)
S U M K = В (1) * В (1)
DO 20 / = |
2, N |
20 SUMK = |
SUM К В (I) * В (!) |
RETURN END
Обращение к подпрограмме типа FUNCTION из основной программы (MAIN PROGRAM) производится по ее наименованию.
Например, для вычисления квадратного корня из суммы квадратов элементов массива А размерностью LONG достаточно записать
SUSQR = SQRTF (SUMK (A, LONG))
Здесь вызывается подпрограмма SU MK, причем фиктивные аргументы В и N замещаются фактическими аргументами А и LONG соответственно.
Подпрограмма SUBROUTINE отличается от FUNCTION тем, что в качестве результатов может иметь массивы чисел (а не одну или несколько отдельных вели чин, как FUNCTION), и для вызова SUBROUTINE надо использовать инструк цию CALL.
Например, подпрограмма перезаписи группы чисел из одного массива в другой имеет вид:
SUBROUTINE SEND (X , Y, М) DIMENSION X (500), Y (500)
DO 10 J = 1, M Y (J) = A (J)
10CONTINUE RETURN END
Обращение к этой подпрограмме:
CALL, SEND (A, B, N)
STOP — инструкция останова. Инструкция EQUIVALENCE имеет вспомога
тельный характер и предназначена для экономии памяти, так как в ней различные переменные привязаны к одним и тем же позициям памяти. Например:
EQUIVALENCE (SEAT, VS4\, А 13)
Здесь переменные SEAT, 1AS41, А 13 последовательно занимают одну и ту же ячей
ку памяти.
Инструкция COMMON обеспечивает размещение на одном и том же месте пере менных, принадлежащих основной программе и подпрограмме.
Например, инструкции
COMMON A NEXT, BIT, К
COMMON CL1ST, VQUE, L
указывают, что переменная AN EXT должна быть размещена там же, где перемен ная CLIST, BIT — на том же месте, где VQUE, К — там же, где L.
Проблемно-ориентированный язык КОБОЛ. Основное отличие — приспособ ленность к алгоритмам с. многократным повторением однотипных операций при обработке информации табличного типа.
На отечественных машинах («Мннск-22», «Минск-32») реализован русский ва риант подмножества КОБОЛ — язык САОД (Система Автоматической Обработки Данных), который и будет рассмотрен.
Каждая конструкция КОБОЛа записывается в определенном для нее виде, или формате.
Литеры КОБОЛа: прописные буквы русского алфавита: арабские цифры; знаки (пробел); + ; —; *;/; = ; .; ,; ’; (;); П (подавление нулей); В (вставка пробела). Литеры используются для образования слов, для пунктуации (* () — .,), в фор мулах (+ сложение, — вычитание, / деление, * умножение, ** возведение в степень, = знак отношения или присваивания значения), при редактировании и в шаблонах. Слово — это последовательность не более 30 литер, начинающихся с буквы. Слово не может ни начинаться, ни заканчиваться дефисом, не может включать в свой
состав пробела (исключение из этого правила составляют литералы и шаблон). Примеры слов: А МЕТОД ВЫЧИСЛИТЬ ТАБ-НОМ-СЛУЖАЩЕГО Зарезервированные слова (136 слов) могут использоваться только в определен
ном смысле и не могут быть введены в программу в качестве слов пользователя. Зарезервированные слова делятся на ключевые (наличие их обязательно) и вспомо гательные (могут быть опущены), которые используются только для удобства чте ния.
Пример:
ДЛЯ исх-дапные ПРЕДНАЗНАЧИТЬ МЛЗ СО СМЕНОЙ КАТУШЕК. ВЫЧИСЛИТЬ итог=итог+сумма ПРИ ПЕРЕПОЛНЕНИИ ВЫПОЛНИТЬ проверка.
Здесь слова ПРЕДНАЗНАЧИТЬ, СМЕНОЙ, ВЫЧИСЛИТЬ, ПЕРЕПОЛНЕНИЕ, ВЫПОЛНИТЬ — ключевые; слова ДЛЯ, СО, КАТУШЕК, ПРИ — вспомогатель ные.
Объектам, которыми оперирует программа, даются названия.
Словами пользователя (идентификаторами или значениями объектов) в форма тах называют наименования данных (и—д), массивов данных (н—м), процедур (н—п), целые константы (ц), а также литералы числовые (ч—л) и нечисловые (н—л).
Эти слова составитель КОБОЛ-программы вписывает в соответствии с алгорит
мом решения задачи. |
|
Литералы (константы) делятся па несколько видов: |
|
литералы числовые (максимальная длина |
12 литер, из них не более 10 цифр), |
например: |
|
—8 759 36421.5 +.0001; |
последовательности не более чем из |
нечисловые литералы — произвольные |
|
127 символов, заключенные в кавычки, например: |
|
’ВЕДОМОСТЬ ЗАРПЛАТЫ’ |
|
’РАСЧЕТНЫЙ — ЛИСТ’; именуемые литералы, которым присваивают наименования и значения в раз
деле данных; фигуральные литералы — постоянные наименования, значения которых хра
нятся транслятором и включаются в программы без описания в разделе данных (НУЛЬ, ПРОБЕЛ и др.).
Запись арифметических выражений в КОБОЛе совпадает с записью на языке ФОРТРАН, например:
(Л + С/Х ** D) * 2. * В + 40.
Исходная КОБОЛ-программа записывается в виде последовательности четырех самостоятельных разделов: идентификации, оборудования, данных и процедур.
Вразделе идентификации указывают наименование программы, фамилию про граммиста, дату написания и другую информацию, необходимую для документации.
Вразделе оборудования содержатся необходимые сведения об используемой для решения задачи ЭВМ, закрепляются наименования за отдельными элементами обо
рудования и ключами, используемыми в программе. Этот раздел состоит из двух секций: конфигурации и ввода-вывода. Секции состоят из параграфов (описания используемых в программе ключей и т. п.).
Вразделе данных содержатся характеристики массивов данных, участвующих
вобработке. При этом в соответствующих секциях и статьях описываются особен ности организации массивов (количество записей в блоке, метод записи и др.), струк
тура записей. Документ толкуется как запись. Состав записей раскрывается в соот ветствующих статьях описания, а число символов в позициях указывается шабло нами. С помощью уровней обеспечивается описание данных составной структуры.
Различают десять методов записи: РМ2ПЛ, ЖМ2ГТЛ, ЖГ6ПЛ, ЖГ6МЛ, ЯВ6ПЛ, ЯВ6МЛ, ЖГ6ПК, ЖГ6ПЧ, ЗГ4ПЛ, ЖВ4МЛ, В названиях методов первая буква указывает на способ подготовки и размещения данных (Ж — в жестком формате, Р — с использованием разделителей, Я — в ячейках памяти согласно внутреннему представлению, 3 — при перфорации «граф-записей»); вторая и третья буквы указывают код представления данных (Гб или Г4 — ГОСТ 10859—64 с 6 или 4 бит ными символами, М2—МТК-2, В6 или В4 — двоичные данные в двоичном виде, а бук венно-цифровые данные или данные для вывода — в коде ГОСТ 10859—64); послед ние две буквы указывают внешний носитель (МЛ — магнитная лента, ПЛ — пер фолента, ПК — перфокарты, П Ч — бумага устройства печати).
Шаблоны данных указывают форматы их значений, т. е. определяют допусти мое расположение символов в значениях. В шаблонах использованы следующие обозначения: 9 — цифра, А — буква или пробел, X — произвольная литера вход ного языка, Т — явное положение десятичной точки, М — неявное положение де сятичной точки, 3 — знак. Для сокращения записи шаблона применяется повто* ритель (К), где К — число повторяющихся символов. Шаблоны обеспечивают ре дактирование значений данных и приведение их к заданным форматам.
В разделе процедур описываются последовательности операций обработки дан ных в соответствии с алгоритмом решения задачи.
Пример КОБОЛ-программы. РАЗДЕЛ ИДЕНТИФИКАЦИИ.
ПРОГРАММА УЛУЧШЕНИЯ КОНСТРУКТИВНЫХ ПОКАЗАТЕЛЕЙ. АВТОР САПРЫКИН ВИКТОР ИВАНОВИЧ.
ДАТА-НАПИСАНИЯ 23 НОЯБРЯ 1972 ГОДА.
РАЗДЕЛ ОБОРУДОВАНИЯ. СЕКЦИЯ КОНФИГУРАЦИИ. РАБОЧАЯ МАШИНА. МИНСК-22. РАЗДЕЛ ПАМЯТИ 1000 СЛОВ. СЕКЦИЯ ВВОДА-ВЫВОДА. УПРАВЛЕНИЕ—МАССИВАМИ.
ДЛЯ ИС ПРЕДНАЗНАЧИТЬ ВК.
ДЛЯ СП1 ПРЕДНАЗНАЧИТЬ МЛ 1 СО СМЕНОЙ КАТУШЕК. ДЛЯ МР ПРЕДНАЗНАЧИТЬ МЛ 2.
УПРАВЛЕНИЕ—ВВОДОМ—ВЫ ВОДОМ. ОБЩАЯ ЗОНА ДЛЯ ИС, СП1.
РАЗДЕЛ ДАННЫХ.
СЕКЦИЯ МАССИВОВ.
СМ ИС МЕТОД ЖГ6ПК В БЛОКЕ 20 ЗАПИСЕЙ МЕТКИ ОПУЩЕНЫ 01 АССОРТИМЕНТ
02 НОМ 1 ШАБЛОН X (10).
02 КОЛ 1 ШАБЛОН 9 (5) ДЛЯ ВЫЧИСЛЕНИЙ.
СЕКЦИЯ РАБОЧЕЙ ПАМЯТИ.
77 ШАБЛОН 9 ДЛЯ ВЫЧИСЛЕНИЙ.
77 РАВ НОМ ШАБЛОН X (10). РАЗДЕЛ ПРОЦЕДУР.
ОТКРЫТЬ ВХОДНОЙ ИС ОТКРЫТЬ ВЫХОДНОЙ МР. ВЫДАТЬ К1 НА ЫШ.
ПП4 з а к р ы т ь c m
ПП2 ЗАКРЫТЬ ИС ЗАКРЫТЬ МР ОСТАНОВИТЬ РАБОТУ. КОНЕЦ ПРОГРАММЫ.
В приведенной программе:
ЫШ — устройство вывода на широкую печать; ВК — устройство ввода с пер фокарты; МЛ — магнитная лента.
6. МАТЕМАТИЧЕСКИЕ МЕТОДЫ И МОДЕЛИ
Математические методы
Проектирование и функционирование АСУП связано с использованием многих математических методов [12], среди которых основными являются:
1)оптимальное программирование (линейное, нелинейное, динамическое, ди скретное);
2)теория массового обслуживания;
3)теория игр и оптимальных решений;
4)теория вероятности и математическая статистика [15];
5)теория графов [67];
6)теория планирования эксперимента [16].
Линейное программирование. Задача линейного программирования представляет собой частный случай общей задачи оптимизации [72], в которой целевая функция и функции ограничений линейны. Обычными условиями при этом являются нера венства в функциональных ограничениях и требование неотрицательности перемен ных.
Влинейном программировании стандартная задача на максимум записывается
ввиде
max j/(*) = 2 |
c/*/j : |
(VII.1) |
|
п |
î = 1 » т » |
(VI 1.2) |
|
/=1 |
|||
|
|
||
ДГ/^0; /== 1, |
п. |
(VII.3) |
Множество наборов (дс,-, хп), удовлетворяющих условиям (VII.2), (VII.3), называется областью определения задачи линейного программирования. Вектор
X = (xt, х2, хп), удовлетворяющий этим условиям, называется планом (или до пустимым решением) задачи. Расширенным планом задачи называют набор X =
= ( f (*)> |
*i> |
X J . |
хп), обращающий в максимум линейную форму (VII. 1), |
План |
л |
= (xj‘, |
называется оптимальным планом (или решением) задачи. Расширенный план X * называется оптимальным расширенным планом, если план X* оптимальный. За дача линейного программирования называется разрешимой, если существует оп
тимальный план (х*, Х п ) .
Часто используют векторно-матричное обозначение при записи стандартной за дачи на максимум:
шах СХ, А Х ^ В ,
где С — и-мерная вектор-строка; В — /n-мерный вектор-столбец; А — матрица порядка т X п.
Иногда целесообразно записывать задачу линейного программирования в кано нической форме:
max СХ, АХ = Ву Х ^ О .
Стандартную задачу легко привести к каноническому виду с помощью новых
неотрицательных |
переменных. |
Обозначим 1 = В — А Х , тогда системы ограни |
чений |
|
|
А Х ^ В и AX + Z = B f Z ^ O |
||
эквивалентны. |
каноническая |
задача имеет я + т переменных. |
Заметим, что |
Оптимум в задаче линейного программирования всегда является глобальным и достигается либо, в одной экстремальной точке, либо на множестве экстремальных точек. В последнем случае все выпуклые комбинации этих экстремальных точек также оптимальны.
Все методы решения задач линейного программирования являются методами поиска. Сначала отыскивают экстремальную точку, оценивают в ней значение целе вой функции, затем рассматривают другую экстремальную точку и т. д. Для реше ния задачи линейного программирования чаще всего используют симплексный ме тод (симплекс-метод) и его модификации.
Примерами задач линейного программирования могут быть: задача о загрузке оборудования, задача о распределении ресурсов, задача о производстве сложного оборудования, транспортная задача.
Рассмотрим использование симплекс-метода для решения задачи линейного программирования. Пусть требуется оптимальным образом распределить нагрузку между двумя группами станков. Обозначим число деталей, выпускаемых станками первой группы через х1у а число изделий, изготавливаемых на станках второй груп пы — через х2. Каждая деталь, выпускаемая станком первой группы дает прибыль 4 руб., а деталь, выпускаемая станком второй группы — 3 руб. Станки имеют огра ниченную производительность, что отражается ограничениями.
Целевая функция
max {f(.v) = 4xJ +3х2\
при ограничениях:
^ 4000;
х2^ 6000;
* 1 + | *2^6000; х ^ О , /= 1 ,2 .
Приводим задачу к каноническому виду, вводя новые переменные *3, *4, *5:
*i + * з = 4000;
*„ + *, = 6000;
*1+ |
2 |
|
*я==6000; |
__ |
|
^ Х2 + |
* ,^ 0 , £ = 1,5. |
||||
В матричной записи |
получаем |
||||
Г 1 |
0 |
|
" |
r * n |
|
0 |
1 |
|
|
4000) |
|
|
|
* 2 |
|||
|
|
|
|
* 3 |
6000 |
|
|
0 |
0 1 |
|
|
■ |
1 |
* 1 |
6000J |
||
|
J |
l* 5 j |
|
Находим базисное (опорное) решение.
Число переменных / 1 = 5 на 2 превышает число уравнений т = 3, следовательно, две переменные можно выбрать в качестве свободных:
xt = 0 ; х2 = 0; *з = 4000; *4 = 6000; *5 = б000.
При этом
/о (лг) = 4х0 + 3х0 = 0:
Вычисляем коэффициенты хц таким образом, чтобы удовлетворялись условия:
5
Pj- Ц ъ г Р ц i = 3
—l |
O 1 |
1 |
0 |
1 |
0 |
, |
2 |
|
L1 |
T J |
O |
/ = ‘.2;
O |
i O |
- * » |
* 3 2 " |
|
|
||
1 |
0 |
*41 |
* j 2 |
O |
|
/ 5 1 |
* 5 2 . |
|
|
(1)(2) (3) (4) (5)
Вданном случае векторы базиса образуют единичную матрицу, поэтому
-*3I |
* 3 2 “I |
rl |
° 1 |
|
|
|
|
|
*■11 |
* 4 2 |
0 |
1 |
|
|
|
|
|
* 5 ! |
* 5 2 _ |
1 |
2 |
|
|
|
|
|
3 - |
|
|
|
|
|
|||
Находим h |
(х), /2 (х) из соотношения //(x )= |
хуС/; / = 1 . 2: |
||||||
|
|
|
pi |
0 -, |
|
1=3 |
||
|
|
|
|
|
|
|||
[М * )/,(*)] = [000] |
0 |
‘ |
- Р «I; |
|
|
|
||
|
|
|
1 |
3"- |
|
|
|
|
определяем значение |
|
|
|
|
|
|||
/х (д:) —С*!= 0 — 4 = —4; |
f2 (*) —С2= 0 —3 = —3. |
|||||||
Выберем Р1? |
для которого |
/у (*) — Су — самая |
отрицательная. Для этого вы |
|||||
числим отношения x-Jxif. |
|
|
|
|
|
|||
* 3 |
|
|
Ч |
|
6000 |
хь |
6000 |
спп. |
* 3 1 = 1^2=4000; |
хп |
|
~ ô - = œ ; |
xf r |
— |
= m o ' |
i 78
Фиксируем индекс i = 3, для которого получено наименьшее значение отноше ния Xi/хф и берем
бо=*з/*31 = 4000.
Определяем новое решение:
х'1= 0 о*= — = 4000; *; = 0; х$=0;
*3 1
х{ = хА- ^ - - х п = 6000 - 4000x0 = 6000;
* 3 1
= *Г) - ü . хъ1 = 6000 - 4000х 1 = 2000.
* 3 1
Подсчитываем значение / (х):
f (*) = 4х 4000 + 3 x 0 = 1 6 000.
Делаем проверку:
/ (*)= /о (*) + 0 (Ci ■- h (*)) = 16 000. Таким образом,
r i |
0 |
1 |
0 |
0 |4000\ |
||
0 |
1 |
0 |
1 |
0 |
0 |
|
0 |
||||||
|
2 |
|
|
|
||
|
|
|
|
6000 |
||
1 |
3 |
0 |
0 1_ 12Ô0 0 J |
Найдем теперь третье решение, для которого величина / (х) принимает более
высокое |
значение. |
Выполняя аналогичные *расчеты, получаем: |
|
*" = |
4000; |
л:Г, = |
3000; *i'=0; |
х ’[ =3000; |
х .'= 0 . |
При этом целевая функция
f(x ) = 4x4000 + 3x3000 + 0x0 + 0x3000 + 0x0 = 25 000.
Продолжая дальнейшие расчеты, находим очередное решение:
* '" = 2000; = 6000; д:'" =2000; д:'" = 0; х '" = 0,
при этом
/(*) = 4x2000 + 3x6000+0x2000 + 0x0 + 0x0 = 26 000.
Дальнейшие расчеты показали, что среди полученных на очередном этапе зна чений /у (х) — Cj нет отрицательных величин, следовательно, величину f (х) нельзя больше увеличить.
Таким образом, максимальная прибыль f (,v) = 26 000 руб. будет получена при изготовлении на станках первой группы л*! — 2000 деталей и на станках второй груп пы х2 = 6000 деталей.
Динамическое программирование. Динамическое программирование — это метод оптимального планирования многоступенчатого процесса, о котором _мы не имеем полной информации. Метод основан на следующем принципе оптимальности, пред ложенном Р. Белманом в середине 50-х годов: «Каковы бы ни были первоначальное состояние и решение в начальный момент, последующие решения должны удовлет ворять оптимальному поведению относительно состояния, получающегося в резуль тате первого решения». Принцип оптимальности позволяет проводить последова тельные оценки решений при переходе от n-то к (л — 1)-му шагу и проверять ка чество решения на предыдущем шаге. Этот процесс описывается с помощью рекур рентных соотношений. Принимается допущение об аддитивности целевой функции:
п—1
Ф { и а, U t...... и п. г ) = 2
1 = 0
где Ф — целевая функция, определяющая, например, общин объем производства (прибыль, длину пути и т. п.) за п периодов (от 0 до п — 1); Ui — затраты на раз витие производства в i-й период; / (Ui) — объем производства в /-м периоде.
Обычно задаются начальное и конечное состояния системы и требуется опреде лить оптимальный путь для перевода системы из начального состояния в конечное.
Управление движением системы осуществляется с помощью воздействий X/, выбираемых для каждого периода из множества допустимых в этом периоде воздей ствий. Задача динамического программирования математически формулируется
следующим образом: из множества допустимых управлений КД011 найти такое уп равление Vy которое переводит физическую систему из начального состояниями œ œ Ло д о п в конечное xK0„ œ ,Vko„ Д011, такое, чтобы некоторый критерий Ф (V) об ращался в максимум, т. е. Oopt = !у Х{ Ф (К)}. При этом система должна нахо
диться в допустимой области.
Рассмотрим использование метода динамического программирования для опти мизации сроков выполнения работ по минимуму их себестоимости. Вначале пока жем, что стоимость работ есть функция времени их выполнения. Пусть, например, при строительстве промышленного объекта нужно выполнить определенный объем земляных работ. Общую стоимость работ можно определить по формуле
S = Siti -j- S2A/P H”*So^p == 5д_Л/р/р“I- S2.4/p А"*^з^р*
где SL — расходы по доставке, монтажу и демонтажу одной землеройной машины; S2 — стоимость одного дня работы машины; 53 — расходы по содержанию строи тельной площадки и накладные расходы; А — объем земляных работ; р — произ водительность одной машины; /р = А / р п — время выполнения требуемого объема работ; п — потребное число замлеройных машин.
Таким образом, стоимость 5 выполнения работ есть дискретная функция вре мени выполнения работ. Учитывая это обстоятельство, рассмотрим следующую задачу. Известно, что работа по монтажу производственного комплекса выполня ется в несколько этапов, для каждого из которых заданы себестоимости производства работ в зависимости от срока их выполнения. Требуется указать такую продол жительность каждого этапа, при которой суммарная себестоимость всей работы бу дет минимальна при заданном сроке выполнения работ. Это комбинаторная задача [18]. Число возможных вариантов очень велико и простой перебор их занял бы много времени. Использование динамического программирования обеспечивает целена правленный перебор и резко сокращает требуемый объем вычислений.
Пусть имеются следующие исходные данные (табл. VII.7), а также ограничение /р ^ 10 дней. Анализируя табл. VII.7, делаем вывод, что на первый и второй этапы » должно быть зарезервировано не менее трех дней, поэтому на третий и четвертый этапы может быть выделено 4, 5, 6 или 7 дней. Если на третий и четвертый этапы
отвести четыре дня, то стоимость выполнения их будет равна 500 руб. + |
300 руб. = |
|||||||||||||
= |
800 руб. Если же на эти этапы выделить 5 дней, то получим два |
равноценных |
||||||||||||
варианта: |
|
|
день, |
этап |
№ 4 — 4 дня, |
стоимость 500 |
руб. + |
240 |
руб. = |
|||||
= |
I. Этап № 3 — 1 |
|||||||||||||
740 |
руб. |
№ 3 — 2 |
дня, |
этап |
№ 4 — 3 дня, |
стоимость 440 |
руб. + |
300 |
руб. == |
|||||
= |
II. |
Этап |
||||||||||||
740 |
руб. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Различные варианты выполнения работ представлены в табл. VII. 8. |
|
||||||||||||
|
Из |
табл. V II.8 видно, что минимальная |
стоимость выполнения всей работы за |
|||||||||||
висит |
от общей |
продолжительности |
работ |
следующим образом: |
|
|
||||||||
|
7 дней — 2300 руб. |
|
|
|
|
|
|
|
|
|
||||
|
8 дней — 2100 |
руб. |
|
|
|
|
|
|
|
|
|
|||
|
9 дней — 2000 руб. |
|
|
|
|
|
|
|
|
|
||||
|
10 |
дней — 1900 руб. |
|
|
|
|
|
|
|
|
|
|||
не |
При решении задачи методом динамического программирования перебирались |
|||||||||||||
все |
возможные сочетания, а |
стоимость |
предыдущего этапа |
комбинировалась |
||||||||||
с минимальной стоимостью последующих. |
|
|
|
10 днями, |
то ми |
|||||||||
|
Следовательно, если срок выполнения работ ограничен 7, 8, 9, |
|||||||||||||
нимальная |
стоимость |
получается при |
выполнении этапов в сроки, |
приведенные |
в табл. VII.9.