アフィリエイト広告を利用しています

2018年08月20日

HP-42S: メニュー変数を使ったユーザーインターフェース

先の直方体の表面積を求めるプログラム $\text{"SAREA"}$ では, ユーザー入力を $\mathrm{INPUT}$ 機能を用いて行っていた.


\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}$ を使用した場合に比べて手っ取り早さは無くなる. しかし入力の順番の任意性と入力ミスの修正が可能という点で, 確かに操作はしやすくなっている.
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

この記事へのトラックバックURL
https://fanblogs.jp/tb/8012888

この記事へのトラックバック
ファン
検索
<< 2024年11月 >>
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
最新記事
最新コメント
眼科の定期検査 〜 散歩 by コトタマ (02/15)
眼科の定期検査 by 三文字寄れば文殊のヒフミヨ (09/21)
本を読んで過ごす by 底彦 (12/13)
本を読んで過ごす by ねこ (12/12)
数学の計算をする by 底彦 (12/04)
タグクラウド
カテゴリアーカイブ
仕事(59)
社会復帰(22)
(44)
コンピューター(211)
(1437)
借金(8)
勉強(13)
(13)
数学(97)
運動(8)
日常生活(1398)
(204)
健康(38)
読書(20)
プロフィール

ブログランキング・にほんブログ村へ
にほんブログ村
にほんブログ村 メンタルヘルスブログ うつ病(鬱病)へ
にほんブログ村
にほんブログ村 科学ブログ 数学へ
にほんブログ村
にほんブログ村 IT技術ブログ プログラム・プログラマーへ
にほんブログ村