しかし, まとまった計算処理をプログラムとしてメモリー上に保存し実行することによって, HP-42S の機能を最大限に引き出すことができる.
ここでは, マニュアルに最初の例として載っている, 半径 $r$ を与えて円の面積を計算す2るプログラムについてまとめておく.
$r = 10$ のとき, キー操作により半径 $10$ の円の面積を計算するには次のようにする.
\begin{align*}
\newcommand{\Ar}[1]{\mathrm{Ar}(#1)}
\newcommand{\ar}{\mathrm{ar}}
\newcommand{\arop}{\Opp{\mathrm{ar}}}
\newcommand{\Cocone}[2]{\mathrm{Cocone}(#1,#2)}
\newcommand{\Colim}{\mathrm{colim}}
\newcommand{\CommaCat}[2]{(#1 \downarrow #2)}
\newcommand{\Cone}[2]{\mathrm{Cone}(#1,#2)}
\newcommand{\Func}[2]{\mathrm{Func}(#1,#2)}
\newcommand{\Hom}{\mathrm{Hom}}
\newcommand{\Id}[1]{\mathrm{id}_{#1}}
\newcommand{\Mb}[1]{\mathbf{#1}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\newcommand{\Ms}[1]{\mathscr{#1}}
\newcommand{\Mt}[1]{\mathtt{#1}}
\newcommand{\Nat}[2]{\mathrm{Nat}(#1,#2)}
\newcommand{\Ob}[1]{\mathrm{Ob}(#1)}
\newcommand{\Opp}[1]{{#1}^{\mathrm{op}}}
\newcommand{\Pos}{\mathbf{Pos}}
\newcommand{\q}{\hspace{1em}}
\newcommand{\qq}{\hspace{0.5em}}
\newcommand{\Rest}[2]{{#1}|{#2}}
\newcommand{\Sub}{\mathrm{Sub}}
\newcommand{\Src}{d^{0,\mathrm{op}}}
\newcommand{\Tgt}{d^{1,\mathrm{op}}}
& 10 \qq \Mr{ENTER} & \quad & ; \Mr{X}\, \text{レジスターに半径} \,10\, \text{を入力する.} \\
& x^2 & & ; \Mr{X}\, \text{レジスターの内容} \,(10)\, \text{を二乗する.} \,\Rightarrow 100 \\
& \pi & & ; \text{円周率} \,\pi\, \text{を} \,\Mr{X}\, \text{レジスターに入力する.} \,100\, \text{は} \,\Mr{Y}\, \text{レジスターに移動する.} \\
& \times & & ; \Mr{X}\, \text{レジスターの内容と} \,\Mr{Y}\, \text{レジスターの内容の積を計算する.} \,\Rightarrow \Mr{314.1593}
\end{align*} こうして $\Mr{X}$ レジスターに半径 $10$ の円の面積である $314.1593$ が格納される.
これに基いて, あらかじめ $\Mr{X}$ レジスターに円の半径が入っていると仮定して, その半径に対する円の面積を計算するプログラムを作ることを考える.
そのために, 次のような操作を行って, プログラム入力モードに入る.
\begin{align*}
& \Mr{GTO} \qq \bullet \qq \bullet & \quad & ; \text{新規のプログラム空間に移る.} \\
& \Mr{PRGM} & & ; \text{プログラム入力モードを選択する.}
\end{align*} ここで $\Mr{GTO} \bullet \bullet$ による「新規のプログラム空間に移る」という処理については, マニュアルの後のほうで説明されるそうなので, さしあたりそういうものだとしておく.
すると, HP-42S の画面は以下のようなプログラム入力モードに移行する.
\begin{align*}
& 00 \blacktriangleright \left\{\, 0\text{-Byte Prgm} \,\right\} \\
& 01 \q .\Mr{END}.
\end{align*}
$01$ 行にはプログラムのラベル (ここでは $\text{"AREA"}$ とする) を宣言する行を書く.
それ以降の行では, 円の面積を計算する処理を順番に入力していく.
\begin{align*}
& \Mr{PGM.FCN} \qq \Mr{LBL} \qq \Mr{AREA} \qq \Mr{ENTER} & \quad & ; \text{ラベル "AREA" の指定.} \\
& \Mr{X} \uparrow 2 & & ; x^2 \,\text{キーを押して入力.} \\
& \Mr{PI} & & ; \pi \,\text{キーを押して入力.} \\
& \times & & ; \times \,\text{キーを押して入力.} \\
& \Mr{EXIT} & & ; \Mr{EXIT} \,\text{キーを押してプログラム入力を終了する.}
\end{align*} この結果, $\text{"AREA"}$ という名前を持った次のプログラムがメモリー上に保存される.
\begin{align*}
& 01 \q \Mr{LBL} \qq \text{"AREA"} \\
& 02 \q \Mr{X} \uparrow 2 \\
& 03 \q \Mr{PI} \\
& 04 \q \times \\
& 05 \q \Mr{END}
\end{align*} $\Mr{X}$ レジスターにプログラムへの引数である半径 $10$ を格納して, プログラム $\text{"AREA"}$ を呼び出すには, HP-42S の機能またはプログラムを明示的に呼び出して実行する $\Mr{XEQ}$ キーを用いて次のように操作する.
\begin{align*}
& 10 \qq \Mr{XEQ} \qq \Mr{AREA} & \quad & ; \text{計算結果}\, \Mr{314.1593} \,\text{が}\, \Mr{X} \,\text{レジスターに格納される.}
\end{align*}
この節は大切な内容が書いてあるので何度も読み直した.
プログラムが思い通りに動いたときは非常に嬉しい.
残念ながら未だにアルゴリズム的な思考は難しい体調だが, 引数の渡し方とか, この小さなプログラムの意味, プログラムを入力するやり方について, 何とか理解はできたと思う.
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
-
no image
-
no image