プログラミング


電卓でプログラムを書くというのはどういうことでしょうか?
これは一連の計算手順(キー操作)を電卓に記憶させておくことで、同じ計算を効率的に繰り返せるというものです。

またまた簡単な例です。直径が変わると円の面積がどう変わるかを計算します。円の面積は「半径×半径×π」でした。

直径を 5とすると、「(5÷2)2 × π」ですね。計算手順を確認するために、まずHP電卓で計算します。なおキー操作は32SUのものです。お使いのHP電卓に合わせて読み替えてください。

keykeykeykeykeykeykeykey・・・【式1】

あるいは

keykeykeykeykeykeykeykeykey・・・【式2】

HP電卓では多くの場合、計算手順はひとつではありません。【式2】はスタックを意識した操作で、"5"を"2"で割った次の key で、Xスタックの内容が Yスタックにコピーされます。次の key でX、Yスタックを掛けて2乗をとっています。どちらでも同じ結果が得られます。

直径の値がいろいろ変わったときに、上記の計算を繰り返すのも面倒です。同じ手順で引数だけが違うわけですから、プログラムを組んでしまいましょう。

HP電卓の魅力のひとつは「プログラムが簡単に書けること」です。なにしろ普通に計算するそのままにキーを押していけばいいのですから。

【式1】で、直径 5がいろいろ変わるわけですから、"5"を入力したあとの計算手順をプログラムして(記憶させて)おきます。
ちなみにこの手順を "日本語で" 書くと「(半径を)2で割って、2乗して、π を掛ける」となります。

キーイン内 容
1.key keyプログラム入力モードに入る
2.key key key このプログラムに"A"という名前(ラベル)をつけます
3.key

以下は手動計算の手順をそのままキーインします。ただしふたつの数値を区切る必要がないので、ENTERは不要です。先ほどの "日本語の" 計算手順そのままにキーを押せばよいのです。

「(半径を)2で割って、2乗して、π を掛ける」

4.key
5.key key
6.key key
7.key
8.key keyプログラムの終わり
9.keyプログラム入力モードを抜ける

「プログラムにラベルをつける」、「プログラム終わり」以外の手順は、実際の手計算と同じなのがおわかりだと思います。実際の計算手順(しかも日本語で思考した)をそのまま電卓に覚えさせておく。この容易さがHP電卓の魅力でもあります。

では実際にこのプログラムを実行させてみましょう。このプログラムを実行するには、引数である半径をキーインしてから実行(EXECUTE)キーkeyを押し、プログラムのラベル "A"を指定します。

つまり直径が"3"だとすると、key key key とキーインすれば結果が表示されます。key は直径、key key は「プログラム"A"を実行せよ」ということです。

直径が"8"なら key key key です。この要領で直径とプログラム名をキーインすれば、何度でも繰り返し計算ができます。

プログラムは独立したものをいくつも定義しておくことができますし、プログラムから他のプログラムを呼び出す(サブルーチン)ことも、条件分岐やいわゆるインデックス・レジスタを使った処理もできます。
またプログラムの途中で一時停止させたり、入力を促したりする処理もできます(後述の『対話型プログラム』で説明します)。もちろん編集や変更も簡単です。

form という計算は、オーディオ回路の設計では頻繁に使います。これもプログラムしておけば、CとRの値を入力して実行させるだけで、何度でも数値を換えて計算できます。

プログラムは、

1.key keyプログラム入力モード
2.key key key プログラム名は"B"としました
3.keyふたつの引き数をまず掛けて・・・
4.key「2」を
5.key掛けて
6.key key「π」を
7.key掛けて
8.key逆数をとって
9.key keyオシマイ
10.keyプログラム入力モードを抜ける

です。

実行するのも簡単で、ふたつの引き数を入力してスタックに積んでから、プログラム名を指定します。

R=10kΩ、C=100pFだとすると、

1. key key
2. key--------指数入力キー
3. key--------E3で103、つまり10×103 = 10kΩ
4. key
5. key key key
6. key
7. key key
8. key--------指数部の符号を反転します。つまり10-12(=100pF)
とふたつの引き数をキーインしてから
9. key key

と押して実行します。

これは私が日常的に使っているプログラムのひとつでもあります。


対話型プログラム

32SIIでは"A"から"Z"までの変数名が使えます。これを使うとインタラクティブ(?)なプログラムを組むことができます。
先程のプログラムは、以下のようにも書けます。『R』は抵抗値、『C』は容量値です。

1.key keyプログラム入力モード
2.key key key プログラム名は"E"としました
3.key key key『R』の値を変数"R"に格納します。
4.key key key『C』の値を変数"C"に格納します。
5.key key『C』の値はスタックにあるので、
変数"R"を呼び出して『R』の値をスタックに積みます。
6.keyふたつの引き数を掛けて
7.key「2」を
8.key掛けて
9.key key「π」を
10.key掛けて
11.key逆数をとって
12.key keyオシマイ
13.keyプログラム入力モードを抜ける

このプログラムを実行するには、先程と違ってふたつの引数を入力しないで key key とキー・インします。すると32SIIは『INPUT R? [現在の"R"の値] 』を表示して、『R』の値が入力されるまで停止します。ここで抵抗値・容量値が先程と同じだとすると

key key key key (10kΩ)と『R』の値を入力して、key でプログラムを再開すると、続けて『INPUT C? [現在の"C"の値]』と表示されて『C』の値を聞いてきます。

key key key key key key key (100pF)と『C』値を入力して key を押すと、その先の計算を再開して結果を表示します。

プログラムのステップ・サイズは増えますが、このように入力する値を連想するような変数名を使うことで、実行する時にわかりやすいプログラムが書けます。

TIPS-1
上記のステップ5でわかるように、INPUT命令では入力された値を X スタックにも保存しています。直後であればリコールする必要はありません。

TIPS-2
もっと長い、複雑なプログラムで多くの変数を使うときは、プログラムの最初のほうですべての変数に値を入力するようにします。INPUTで入力待ちになっている時は、key でプログラムを再開するまでは任意の手計算ができます。ということはその場合はスタックの値が変わってしまうわけです。ですからINPUTの前後でスタックの値が変わらないことを想定したプログラムは、おかしな結果になります。ということで、変数値は始めのほうですべて入力を済ませてしまって、必要なときに key で呼び出すほうが安全です。

TIPS-3
プログラム実行中に変数の値を確認したいときは、プログラムにVIEW[変数名]を埋めこんでおきます。この場合は表示だけでXスタックに値はコピーされません。

TIPS-4
ちなみに、変数名とプログラムのラベル名は全く別のものです。同じ名前でも問題はありません。上記の例では『C』値、変数"C"と混同しないように"E"というラベルを付けました。


このページのトップへ 扉へ その他、ソノホカ・・・