Под-массив в Фортране

Elina74

Приходится пользоваться некой прогой, написанной аж 1987 году.
В ней определен массив
DIMENSION MAP(20000);
Вызывается функция
TRARA2(MAP(I1+3), А, В)
Где первый аргумент описан как
DIMENSION MAP(1)
Однако, из описания функции становится ясно, что в качестве аргумента хотели передать не один элемент массива, а под-массив, начинающийся с некоторого номера, к примеру там используются выражения типа
L2=MAP1(I2+1)
В результате прога доходя до строки, написанной выше, вылетает с ошибкой - выход индекса массива за границу.
Как попроще создать некий под-массив и передать его в качестве аргумента? В сишном аналоге используются указатели. Здесь они как-нибудь помогут?

ava3443

попробуй вместо DIMENSION MAP(1) использовать DIMENSION MAP(*)

Elina74

Это великое колдунство!
Оно заработало. Может подскажешь, почему?

ava3443

Ну так, * в современных и полусовременных фортранах как раз обозначает произвольный (т.е. заранее не известный) размер. Как я понимаю, в старых компиляторах в этом качестве 1 была, вот все её и использовали.
А вообще, вопрос нетривиальный: чтобы нормально ответить, наверное надо рюхать и сравнивать друг с другом стандарты Fortran IV, Fortran 77 и Fortran 90 :-)

Elina74

Спасибо.
Оставить комментарий
Имя или ник:
Комментарий: