▲ 005_行列計算(変数と領域指定)

● 代入

 mcでは状況に合わせてメモリーを確保するので事前に変数使用の宣言は不要です。そのため複数の要素を持った行列に1行1列のデータを代入すると、その変数の大きさは代入する1行1列のデータの大きさに変化してしまいます。

a = |1,2,3|;

a;

1.0000 2.0000 3.0000

.OK.

a = 1;

a;

1.0000

.OK.

 もし、すでにある行列の全ての要素を一つの同じ数値にしたい場合には次のようにします。

a = |1,2,3,4,5|

|4,3,2,1,0|;

a;

1.0000 2.0000 3.0000 4.0000 5.0000

4.0000 3.0000 2.0000 1.0000 0.0000

.OK.

a[#,#]=1;

a;

1.0000 1.0000 1.0000 1.0000 1.0000

1.0000 1.0000 1.0000 1.0000 1.0000

.OK.

a[#,3]=3;

a;

1.0000 1.0000 3.0000 1.0000 1.0000

1.0000 1.0000 3.0000 1.0000 1.0000

.OK.

a[2,#]=10;

a;

1.0000 1.0000 3.0000 1.0000 1.0000

10.0000 10.0000 10.0000 10.0000 10.0000

.OK.

● a と a[#,#]

 a と a[#,#]は代入文で意味が異なります。 a だけの場合は新たに変数 a が定義されます。 a[#,#] と記述した場合には、既存の変数 a の全ての領域に代入されます。

■ 変数内部の領域指定

 変数に複数のデータを代入したとき、その一部だけが必要になることがあります。この様な場合、mcでは数値変数を次の書式でデータを指定することができます。

変数名[行の始め|行の終り,列の始め|列の終り]

● 変数

 mcでは代入文で変数に数値を代入することができます。変数使用の宣言は不要です。

a = 1+2+3;

.OK.

 この命令を実行しても単に.OK.が表示されるだけで、計算結果が表示されません。mcでは計算結果の行き場所がな場合だけ表示されます。代入文では結果を変数に格納しますから表示されない訳です。

 それでは計算結果(変数 a)はどのようにして表示するのでしょうか。簡単ですね、行き場所が無い命令を実行することです。

a;

6.0000

.OK.

変数名に漢字を使うことができます。

リンゴの値段 = 150;

リンゴの個数 = 17;

総額 = リンゴの値段*リンゴの個数;

総額;

2550.0000

.OK.

※備考(1)

 このように代入文にならない命令を実行すると変数の内容が表示されます。mcには他のプログラム言語のように表示用の命令はありません。作図結果も PICT 変数への代入文では作図結果が表示されません。

 mcはインタープリタ形式のプログラム言語で、データの処理にスタックを使っています一般にはと呼ばれる方法です。この処理で計算処理の結果としてスタックにデータが残っていればそのデータを表示し、残っていなければ表示しません。上記例の a; だけの命令は、単にデータをスタックに積むだけの処理ですから、実行後にスタックにデータが残っているから表示される訳です。

mcでは BASIC の様な PRINT 文がありません(不要なのです!)。

※備考(2)

 作図結果もスタックに積まれます。 PICT 変数に代入する場合には表示されませんが、代入しないとドキュメントへ挿入(表示)されます。

● 変数の種類

 mcで使うことのできる変数は全部で3種類あります。

(1)数値変数 識別子だけ。

(2)文字列変数 識別子の最後に $ を付ける。

(3)PICT 変数 識別子の最後に # を付ける。

 識別子は 60 Bytes 以内の英数字または漢字でなければなりません。また識別子の先頭が数字ではいけません。全角の英数字および記号は半角に変換されますから注意して下さい。

 変数名に漢字を使うとわかりやすいプログラムが記述できます。教育用には絶大な効果をあげています。ただし漢字変換や全角・半角の切り替えが面倒なので実用的とはいえないようです(これは私の感想)。