|
|
|
Ибрагим |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 27.5.2006 Репутация: нет Всего: нет |
COMPLEX X(2,2), Z(2,2)
SUBROUTINE ASSIGN (M,N,A,B) COMPLEX A(M,N), B(M,N) DO 10 J=1,N DO 10 I=1,M 10 B(I,J)=A(I,J) RETURN END вызывается вот так: CALL ASSIGN(2,2,Z,X) -это понятно, матрица Z копируется в X. но есть и такой вызов DO 10 K=1,N 10 CALL ASSIGN(2, 1, Z(1,K), X(1,K) ) как понять, ведь нужно двумерные массивы передать, а Z(1,K), X(1,K) - это числа. если уж на то пошло, то тогда зачем через параметр M передается двойка ??? и так постоянно: допустим, в формальных параметрах подпрограммы умножения двух матриц указаны: матрица раз, матрица два, кол. строк, кол. столбцов, а в главной программе передается что левая пятка скажет, то число, то матрица, то вообще трехмерный - это-то как, там вообще же только два цикла по J и по I. |
|||
|
||||
Cr@$h |
|
|||
Исследователь Профиль Группа: Участник Клуба Сообщений: 1693 Регистрация: 3.4.2005 Где: Санкт-Петербург, Россия Репутация: 1 Всего: 41 |
Похоже, что, передавая Z(1, K) и указывая M = 2, мы разрешаем подпрограмме ходить по массиву Z(1:2, K), т.е. заходить и на вторую строчку массива. Может, тогда ещё нельзя было передавать сечения массива, типа Z(1:2, K)... и здесь передается указатель на первый элемент нужного массива, а дальнейшие ограничения задаются в подпрограмме через M и N. Хотя, меня смущает вообще такая форма вызова -- при указанных размерах можно было просто передавать Z и X целиком. Приведённый вызов эквивалентен CALL ASSIGN(2, 2, Z, X ), или даже CALL ASSIGN(2, 2, Z(1, 1), X(1, 1) ). Исходный код зачем-то копирует массивы по столбцам? Возможно это необдуманная или принудительная оптимизация по столбцам... Проверял всё на следующей проге:
На это лучше посмотреть в контексте. Это сообщение отредактировал(а) Cr@$h - 29.5.2006, 15:04 |
|||
|
||||
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Fortran | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |