\begin{align*}
\newcommand{\Ar}[1]{\mathrm{Ar}(#1)}
\newcommand{\ar}{\mathrm{ar}}
\newcommand{\arop}{\Opp{\mathrm{ar}}}
\newcommand{\Colim}{\mathrm{colim}}
\newcommand{\CommaCat}[2]{(#1 \downarrow #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{\Nat}{\mathrm{Nat}}
\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}}}
& 01 \q \Mr{LBL} \qq \text{"SAREA"} & \q & \\
& 02 \q \Mr{INPUT} \qq \text{"L"} & & \\
& 03 \q \Mr{INPUT} \qq \text{"H"} & & \\
& 04 \q \Mr{INPUT} \qq \text{"W"} & & \\
& ・ \q ・ \q ・ \q ・ & &
\end{align*}
この場合, ユーザーはプログラム内に記述された $\Mr{L}$, $\Mr{H}$, $\Mr{W}$ の順番で値を入力し, 入力ミスをしたときには, プログラムを再度起動してもう一度値の入力をし直す.
HP-42S では, この他にメニュー変数という機能が用意されている.
これは, プログラムで変数の入力画面を作成して, ユーザーはこの画面を用いて変数の入力を行うというものである. 入力する変数の順番は任意でよいし, 各々の変数に何度でも入力作業を行えるので, 入力ミスにも対応しやすい.
たとえば "$\Mr{SAREA}$" プログラムを以下のように書き換えることによって, メニュー画面を通じての変数の入力が可能になる.
\begin{align*}
& 01 \q \Mr{LBL} \qq \text{"SAREA"} & \q & \\
& 02 \q \Mr{MVAR} \qq \text{"L"} & & ; \text{メニュー変数 L の宣言.} \\
& 03 \q \Mr{MVAR} \qq \text{"H"} & & ; \text{メニュー変数 H の宣言.} \\
& 04 \q \Mr{MVAR} \qq \text{"W"} & & ; \text{メニュー変数 W の宣言.} \\
& 05 \q \Mr{VARMENU} \qq \text{"SAREA"} & & ; \text{変数メニューの作成.} \\
& 06 \q \Mr{STOP} & & ; \text{プログラムの停止と対話モードへの移行.} \\
& 07 \q \Mr{EXITALL} & & ; \text{全メニューの終了.} \\
& 08 \q \Mr{RCL} \qq \text{"W"} & & ; \text{奥行き} \times \text{幅を計算する.} \\
& 09 \q \Mr{RCL\times} \qq \text{"L"} & & \\
& 10 \q \Mr{LASTX} & & ; \text{高さ} \times \text{幅を計算する.} \\
& 11 \q \Mr{RCL\times} \qq \text{"H"} & & \\
& 12 \q \Mr{RCL} \qq \text{"H"} & & ; \text{奥行き} \times \text{高さを計算する.} \\
& 13 \q \Mr{RCL\times} \qq \text{"L"} & & \\
& 14 \q + & & ; \text{それぞれの積の合計を} 2 \text{倍して, 計算結果を} \Mr{X} \text{レジスターに残す.} \\
& 15 \q + & & \\
& 16 \q 2 & & \\
& 17 \q \times & & \\
& 18 \q \Mr{END} & &
\end{align*}
このプログラムによって作成されるメニュー画面は
\begin{align*}
& \Mr{x}: 0 \\
& |\q\Mr{L}\q|\q\Mr{H}\q|\q\Mr{W}\q|\hspace{13mm}|\hspace{13mm}|\hspace{13mm}|
\end{align*}
のようになっている. たとえば, $\Mr{L}$ の値として $2$ を設定するには,
\begin{equation*}
2 \qq \Mr{L}
\end{equation*} とキー入力を行うと,
\begin{align*}
& \Mr{L}=2 \\
& |\q\Mr{L}\q|\q\Mr{H}\q|\q\Mr{W}\q|\hspace{13mm}|\hspace{13mm}|\hspace{13mm}|
\end{align*} のように画面表示が変化し, $\Mr{L}$ に値 $2$ が設定されたことがわかる.
※: $\Mr{L}$ は上記メニュー画面の $\Mr{L}$ の下にあるボタン $\textstyle\sum +$ を押して選択する. 同様に $\Mr{H}$ はメニューの下にあるボタン $1/x$ を, $\Mr{W}$ はメニューの下にあるボタン $\sqrt{x}$ を押すことで選択できる.
変数メニューはプログラムの $02$ 行 〜 $07$ 行で作成され制御される.
この各行の意味がなかなか理解できなかったのだが, 今日やっとわかったので書いておく.
まず, 以下の 3 行で, メニュー変数 $\Mr{L}$, $\Mr{H}$, $\Mr{W}$ を宣言する.
\begin{align*}
& 02 \q \Mr{MVAR} \qq \text{"L"} & & \hspace{17mm} \\
& 03 \q \Mr{MVAR} \qq \text{"H"} & & \\
& 04 \q \Mr{MVAR} \qq \text{"W"} & &
\end{align*}
次に
\begin{align*}
& 05 \q \Mr{VARMENU} \qq \text{"SAREA"} & &
\end{align*} によって, グローバルメニュー $\text{"SAREA"}$ に続く $\Mr{MVAR}$ メニュー変数宣言を使用して変数メニューを作成する.
次の
\begin{align*}
& 06 \q \Mr{STOP} & & \hspace{28mm}
\end{align*} にある $\Mr{STOP}$ 命令によってプログラムを停止する. $05$ 行目で変数メニューが作成された直後に実行されることによって, 変数入力モードに入る. ユーザーは変数メニューを用いて $\Mr{L}$, $\Mr{H}$, $\Mr{W}$ の値を任意に設定できる. どの順序で値の設定を行ってもよいし, 同じ変数に何度でも値を設定できる.
$\Mr{R/S}$ キーを入力することにより各変数の値が決定し, プログラムの実行は再開する. この時点でプログラムが停止した状態での変数メニューによるユーザーとの対話モードは終了する.
最後に
\begin{align*}
& 07 \q \Mr{EXITALL} & & \hspace{21mm}
\end{align*} で記述された $\Mr{EXITALL}$ 命令は, 全メニューを終了する命令である.
変数 $\Mr{L}$, $\Mr{H}$, $\Mr{W}$ に伴う全メニューが終了し, プログラムは $08$ 行目以降の実際に表面積の計算を行う処理を実行する.
使ってみると, $\Mr{INPUT}$ を使用した場合に比べて手っ取り早さは無くなる. しかし入力の順番の任意性と入力ミスの修正が可能という点で, 確かに操作はしやすくなっている.
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
-
no image
-
no image