配布プリント

計算機数学演習 A 2014.4.18. Risa/Asir のプログラミング (変数, 繰り返し, 条件分岐)
この講義の資料は, http://www.sm.u-tokai.ac.jp/~nakayama/ より入手することができる.
1. ファイルに書いたプログラムの読み込み
エディタ (メモ帳, wordpad など) で次のようなファイルを作成する.
test.rr
1+1;
end$
上のファイルは Asir で 1 + 1 を実行するプログラムである. 最後の行の end$ はファイルに Asir のプログラムを
書いた際, プログラムの終わりを表す命令である. このファイルを読み込んでプログラムを実行するには, Asir の
メニューバーから, ファイル → 開くを選択し, 先ほど作成したファイルを選べばよい. すると, 1+1; という命令が
実行され画面上に 2 と出力されるはずである.
上のように, GUI (Graphical User Interface) を使ってファイルを読み込むことができるが, コマンド load でも
ファイルを読み込むことができる. 以下はその例である. ただし, 作成したファイル test.rr はディレクトリ
C:\Users\naka\Desktop にあるとしておく. (ファイルの存在するディレクトリがどこになるかは, ファイルを右
クリックし, プロパティ → 全般 → 場所, より確認できる.)
コマンドを用いたファイルの読み込み (Asir 上)
[113] load("C:/Users/naka/Desktop/test.rr");
2
[115]
Windows ではディレクトリの区切りは円記号であるが, Asir の場合は / でディレクトリを区切る (Unix 風) こと
になっていることに注意.
2. 変数
Asir では変数名は, アルファベットの大文字から始まる. 例えば, A, B, I, J, K, Variable, Weight などである. 変
数は宣言しなくてもいきなり使える. また変数に型はなく, さまざまなデータを代入することができる. 変数の中
身を出力するには, 変数名; もしくは print(変数名); で変数の中身を出力できる.
[115] A=1+1;
2
[116] A;
2
[117] print(A);
2
0
[118] A=x^3+1;
x^3+1
[119] A;
x^3+1
[121] A^2;
x^6+2*x^3+1
[123] B=y+1;
y+1
[124] A+B;
x^3+y+2
Asir での変数の取り扱い
<-- 変数を定義しなくてもいきなり使うことができる
<-- 変数の中身の表示
<-- print を用いた変数の中身の表示
<-- 先ほど変数 A には 2 を代入したが, 多項式を新たに代入 (型はない)
3. 繰り返し (for 文, while 文)
Asir には, 繰り返しのための文として, for, while 文が用意されている. 書き方は, C 言語と同様である. 次は, 1
から 10 を表示するプログラムである.
1
fortest.rr
<-- for (初期条件; 継続条件; 各繰り返しごとに実行される命令) {命令}
for (K = 1; K <= 10; K++) {
print(K);
}
end$
whiletest.rr
K = 1;
while (K <= 10) {
print(K);
K++;
}
end$
<-- while (継続条件) {命令}
C 言語と同様に, インクリメント命令 ++, デクリメント命令 -- も使える. (すなわち, K++ は K = K + 1 の省略形)
参考 (C 言語での 1 から 10 を表示するプログラム)
fortest.c
#include <stdio.h>
main()
{
int k;
for (k = 0; k <= 10; k++) {
printf("%d\n", k);
}
}
<-- ヘッダーファイル stdio.h の読み込み
<-- プログラムの実行は main 関数から始まる
<-- 変数定義が必要
<-- format 付き文字列表示関数 printf
4. 条件分岐 (if 文)
Asir には, 条件分岐の文として, if, if-else 文が用意されている. やはり書き方は, C 言語と同様である. 次は,
変数 A が整数であると仮定して, 偶数かどうかを判定するプログラムである.
ifelsetest.rr
if (A % 2 == 0) {
print("even");
} else {
print("not even");
}
end$
<-- A % 2 は A を 2 で割った余り
<-- 文字列 "even" を表示
<-- 文字列 "not even" を表示
ifelsetest2.rr
if (A % 3 == 0) {
print("A = 0 mod
} else if (A % 3 == 1)
print("A = 1 mod
} else {
print("A = 2 mod
}
end$
<-- A % 3 は A を 3 で割った余り
3"); <-- 文字列 "A = 0 mod 3" を表示
{
3"); <-- 文字列 "A = 1 mod 3" を表示
3"); <-- 文字列 "A = 2 mod 3" を表示
条件に用いる関係式も C 言語と表記は同じである.
記号
==
!=
!
&&
||
意味
等しい
等しくない
否定 (not)
かつ
または
例
A == 1
A != 1
!(A == 1)
(A >= 1) && (A <= 3)
(A < 1) || (A > 3)
2
A が 1 に等しい
A が 1 に等しくない
A が 1 に等しくない
A が 1 以上 かつ 3 以下
A が 1 未満または 3 より大きい