%表題   らくらくDCL
%
%履歴
%\Drireki{
%         95/04/13 余田 成男
%        }
%

\begin{center}
\fbox{\parbox{14.75cm}{
\fbox{\parbox{14.5 cm}{
\vspace{1em}
\begin{center}
\parbox{13cm}{

{\bf FORTRANのひけつ 2}

\begin{center}
{\large \bf 多次元配列の記憶順序}
\end{center}

FORTRAN77では多次元(7次元まで)の配列を定義できますが, 実際の記憶装置が
多次元構造を持っているわけではなくて, 1次元的に管理されています. 多次
元配列を1次元的に展開する順序は, FORTRAN77の規格で定めてありますから, 
多次元配列を1次元配列と結合することが可能です.
\vspace{1em}

例えば
\begin{quote}
   {\tt REAL         X(6), Y(2,3)} \\
   {\tt COMPLEX      Z(3)}         \\
   {\tt EQUIVALENCE (X,Y,Z)}
\end{quote}

という場合, 変数 {\tt X}, {\tt Y}, {\tt Z} はどれも長さが6語の配列で,
EQUIVALENCE文により同じ記憶領域を占めます. この時, それぞれの変数の並
び方は

\vspace{1em}  
\begin{center}
\begin{tabular}{|c|c|c|c|c|c|} \hline
{\tt X(1)}     & {\tt X(2)}     & {\tt X(3)}     & 
{\tt X(4)}     & {\tt X(5)}     & {\tt X(6)}     \\ \hline
{\tt Y(1,1)}   & {\tt Y(2,1)}   & {\tt Y(1,2)}   & 
{\tt Y(2,2)}   & {\tt Y(1,3)}   & {\tt Y(2,3)}   \\ \hline
{\tt Re(Z(1))} & {\tt Im(Z(1))} & {\tt Re(Z(2))} & 
{\tt Im(Z(2))} & {\tt Re(Z(3))} & {\tt Im(Z(3))} \\ \hline
\end{tabular}
\end{center}
\vspace{1em}  

という様に, 2次元配列 {\tt Y} は添字の左側の数字から変るように1次元的
に展開されます. また, 複素数データ {\tt Z} は2つの実数が並んだ形で展開
されます. したがって, {\tt X(3)} の数値は, {\tt Y(1,2)}, {\tt
Re(Z(2))} と同じになります.
\vspace{1em}  

この規則は多くのプログラムで積極的に使われており, 多次元配列を1次元配
列として扱ったり, 複素数データを実数データと見なして処理したりすること
が行われています. この規則は, 計算機のハードウェアに近い部分の規則なの
で, 計算機によって異なるように思えるかもしれませんが, FORTRAN77規格で
定められた「標準語」です. 例えば, 「岩波FORTRAN辞典」(西村恕彦/酒井俊
夫・高田正之 著)の「記憶列の結合」を御覧下さい. 

}
\end{center}
\vspace{1em}
}}
}}
\end{center}
