Другие языки программирования и технологии
Помогите разобраться в старом коде Фортрана...
есть код программы: 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 соответственно.
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 соответственно.
Похожие вопросы
- Пожалуйста помогите разобраться с даним кодом C++. Тема : Односвязание списки
- Помогите разобраться в програмном коде на С++
- Помогите разобраться в коде. Язык Фортран
- Помогите разобраться с кодом. Ошибка в строчке for (int i = 0, i > 100, i++) {
- Прошу помочь разобраться, пояснить некоторые пункты требования ТИПОГРАФИИ.
- Про С++ .Не получается явное преобразование типов. Помогите разобраться. Код внутри.
- Помогите разобраться с эллементарной задачей, нужно чуть-чуть доработать код.
- Помогите разобраться с кодом Delphi
- Помогите разобраться с кодом
- Помогите с составлением html кода