本書のもととなった講義では, 高校数学の教科書で紹介されている BASIC のプログラミング をひととおり勉強したあと, この本の内容にはいっていくことも多かった. BASIC はいろいろ批判もあるが, (1) 行番号, (2) 代入文や命令文, (3) goto 文, をもち, マシン語を勉強しなくても ``計算機とはなにか''というイメージをある 程度持つための訓練には最適の言語の一つであろう. Risa/Asir のユーザ言語は, C に似た文法をもつより抽象化された言語で あるが, それが実際の計算機でどのように実行されるのか 常に想像しながら使用するのと, そうでないのとは, 大きな違いがある. 達人への道を歩もうという人は, 抽象化された 言語で書かれていようが, 実際の計算機でどのように実行されるのか をわかっていないといけない. プログラム実行中のメモリ使用の様子を手にとるように 描写できるようになれば, 計算機の達人への道は間違いなしである. 前節で計算機の仕組みの概略と 2進数について説明したのは つねにこの ``プログラム実行中のメモリ使用の様子を手にとるように 描写できるように'' ということを念頭において計算機のプログラミングをしてほしい からである.
訳のわからない説教で始めてしまったが, この意味はだんだんと 分かるであろう. とにかく Risa/Asir で短いプログラムを書いてみよう.
for (K=1; K<=5; K=K+1) { print(K); };
を実行してみなさい. このプログラムはprint(K) を K の値を1から5まで変えながら5回実行する.
[347] for (K=1; K<=5; K=K+1) { print(K); }; 1 2 3 4 5 [348] 0 [349]
S = 0; for (K=1; K<=100; K++) { S = S+K; } print(S);
または
def main() { S = 0; for (K=1; K<=100; K++) { S = S+K; } print(S); } main();
を実行してみなさい.
これらの内容を書いてあるファイル a.rr を作成して,
load("./a.rr");
でロード実行してもよい (unix の場合).
Windows の場合は, プログラムをファイルから読み込むには
``ファイル 開く'' を用いる.
同じプログラムを BASIC で書くと以下のようになる.
10 S = 0 20 for K=1 to 100 30 S = S+K 40 next K 50 print S
条件分岐をするときには if 文を用いる.
次の例は, ,
に数をセットすると2 次方程式
の解の近似値を求める. なお @i は虚数単位
である.
B = 1.0; C=3.0; D = B^2-4*C; if (D >= 0) { DQ = deval(D^(1/2)); print([ -B/2+DQ/2, -B/2-DQ/2]); }else { DQ = deval((-D)^(1/2)); print([ -B/2+@i*DQ/2, -B/2-@i*DQ/2]); }
|
記号 | 意味 | 例 |
== |
ひとしいか? | X == 1 ( ![]() |
!= |
ひとしくないか? | X != 1 ( ![]() |
! |
でない(否定) | !(X==1) ( ![]() |
&& |
かつ | (X < 1) && (X > -2)
(
![]() |
|| |
または | (X > 1) || (X < -2)
(
![]() |
A | B | A && B |
T | T | T |
T | F | F |
F | T | F |
F | F | F |
A | B | A || B |
T | T | T |
T | F | T |
F | T | T |
F | F | F |
if (1) { print("hello"); }else{ print("bye"); }
は hello を出力する.
条件判断をかっこでくくって合成してもよい. たとえば
(1 || 0) && 1
for (I=0; I<10; I++) { if (((I^2-6) > 0) && ( (I < 3) || ( I > 6))) { print("hello"); } }
Asir 版
S=0; for (N=1; N<=20; N++) { S = S+1/(N*N); } print(S);
|
BASIC 版
10 S = 0 20 for N=1 to 20 30 S = S+1/(N*N) 40 next N 50 print N
|
S = S+1/(N*N)
では
1/(N*N) が CPU で計算されてその結果と S の現在の値