Другие языки программирования и технологии

Помогите разобраться в старом коде Фортрана...

есть код программы: REAL*8 G(150,12)/1800*0D0/, REAL*8 E(200), f, sx,sy,x0,y0,aa,trace,mv(400),nv(400) REAL*8 b,bb, nmv(150,12) CHARACTER ZAG*1(80) COMMON /X/X,PI /D/D1,D2,D /M/M /Q/Q,I,K /W/W,SV EQUIVALENCE (v( 1, 1),nmv(1,1)) c EQUIVALENCE (Q( 1),Q1(1)), (V(1),MX(1)),(V(301),VS(1)), c OPEN (UNIT=5,BLANK='ZERO') OPEN ( UNIT=5,file='input',ACCESS='sequential',recl=80 * ,status='old', form='formatted',blank='zero') OPEN ( UNIT=6,file='output',ACCESS='sequential',recl=80 * ,status='old', form='formatted',blank='zero') PI=6.28318530717958D0 READ (5,1111) ZAG 1111 FORMAT (80A1) непонятно следующее: 1. REAL*8 G(150,12)/1800*0D0/, REAL*8-я так понял что это более точные значения выдает, в скобках матрица, а что такое 0D0????2. и интересно что значит "ZAG*1" ???я так понял создается одмерный массив символьного типа данных, что значит *1 непонятно... 3. что значит CHARACTER*10? 4 EQUIVALENCE (v( 1, 1),nmv(1,1)) и COMMON /X/X,PI /D/D1,D2,D /M/M /Q/Q,I,K /W/W,SV ?? заранее спасибо за ответ
Что-то никто не отвечает. Ладно, напишу всё, что мне удалось выяснить, вычитать и выпытать у ветеранов) )
1. REAL*8 G(150,12)/1800*0D0/ - описывается массив (150x12) вещественных чисел двойной точности (в современных языках - это double), каждый элемент размером 8 байт. "D" - в Фортране это разделитель мантиссы и порядка у чисел двойной точности. 0D0 - это эквивалентно записи 0e0 в С или Паскале. Т. е. Вся строка описывает вещественный массив чисел двойной точности, все 1800 элементов которого инициализируются значением 0.0*10^0 (проще говоря, обнуляются) .
2. CHARACTER ZAG*1(80) - массив из 80 символов, каждый из которых размером в 1 байт (обыкновенная строка длиной 80 символов) .
3. CHARACTER*10 — строка длиной 10 символов.
4. EQUIVALENCE (v( 1, 1),nmv(1,1)) - указывает, что первые элементы массивов v и nmv физически находятся по одному и тому же адресу в памяти. Жаль, никто не помнит: только указанные элементы или целиком массивы располагаются в одном и том же месте. Но логически рассуждая (массивы - непрерывные структуры данных в памяти) , выходит, что целиком массивы. Это некий аналог современных указателей, когда с помощью разных указателей можно обращаться к одному объекту. Т. е. при обращении к массиву v, фактически получается доступ к массиву nmv и наоборот.
5. COMMON /X/X,PI /D/D1,D2,D /M/M /Q/Q,I,K /W/W,SV - описываются списки глобальных переменных: COMMON /имя_списка/список_переменных_через_запятую
Например, /D/D1,D2,D - список D из переменных D1, D2, D из главного модуля программы. Допустим, где-то в программе есть подпрограмма с оператором COMMON /D/A1,A2,A3. Тогда при обращении к переменным A1,A2,A3 внутри подпрограммы, на самом деле обращение будет идти к глобальным переменным D1,D2,D соответственно.
Артём Щербинин
Артём Щербинин
51 590
Лучший ответ