要素の総和とかできるでしょうか。1~10までの足し算を試みます。endtakk@deb9:~$こんなんでいけるでしょうか。shapetakk@deb9:~$エラーになりました。スカラー変数への代入はwhere構文内ではできないことを忘れてました。配列代入しかできないということは、総和もできないってことですね。多次元配列Fortranで多次元配列を使ってみます。endtakk@deb9:~$dataを使って、初期化をしていますが、どのような順番で格納されたのでしょうか。60takk@deb9:~$実行結果から、このように格納されているようです。(2,)+----+----+----+二次元配列も配列代入が使えるのでしょうか。33takk@deb9:~$できました。1行の代入文ですべて初期化されました。その2配列代入が中で何をしているか気になって仕方がありません。GDBを使って見ていきます。配列要素が1つで、次元数1つのプログラムで確認してみます。a(1)という整数を定義し、配列代入a=100を実行するプログラムです。arr1x1.f90takk@deb9:~$GDBを起動します。end(gdb)a=100の行にブレイクポイントを設定し実行します。アセンブラを見てみましょう。dump.(gdb)100は、16進で0x64ですので、<+23>の行あたりで、a(1)へ配列代入しているものと思われます。<+35>の行のjmpは、アドレス0x5555555547ddに戻っているので配列のループを作っていますね。同アドレスでチェックしてます。この作りを覚えておいて、次は二次元配列にした場合、どう変わるのか見てみます。endtakk@deb9:~$アセンブラを見てみます。dump.(gdb)前に戻るjmpが2つになったので、次元数と一致します。要素数が1でもそれ以外でも関係なくこの作りになってそうです。ビルドの限界である七次元配列で確認してみます。要素数はそれぞれ2にしておきます。確認に使ったプログラムはこれです。endtakk@deb9:~$アセンブラです。dump.(gdb)予想通り配列処理のループを作っているjmpが7つあります。(jmpqが混ざってますが)配列代入といえども、一つずつ代入していることには変わりありませんね。その3配列の値を表示するのにwriteを使うため、doで繰り返し制御していましたが、簡単な書き方があるようです。今までのdoでwriteを繰り返し実行する方法。5takk@deb9:~$次にdoを使わず、writeに指定する変数に指定する方法。do型反復というらしいです。a(i)の部分を、(a(i),i=1,5)に置き換えます。5takk@deb9:~$タブ区切りで全要素表示されました。これはこれで良いのですが、改行して表示したい場合どうすれば良いでしょう。5takk@deb9:~$formatで指定するだけでした。