何らかのデータを, ユーザーからの入力によって取得して HP-42S の変数またはレジスターに保存させる際に使用される.
$\mathrm{INPUT}$ 命令が使用されると以下の処理が行われる.
・変数またはレジスターに入っている現在の値が $\mathrm{X}$ レジスターに呼び出される. 指定した名前の変数が存在しない場合には, 自動的にその名前の変数が作成され, 初期値としてゼロが設定される.
・$\mathrm{X}$ レジスターの標準ラベル ($\mathrm{x}: $) が, 入力する変数またはレジスターの名前と疑問符 $?$ に置き換えられる. これが入力を促すプロンプトになる. 例えば $\mathrm{A}$ という新しい名前の変数に対してプログラム内から
\begin{equation*}
\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{INPUT} \qq \text{"A"}
\end{equation*} という命令を実行すると, $\Mr{X}$ レジスターに
\begin{equation*}
\Mr{A}?\,0 \hspace{20mm}
\end{equation*} というプロンプトが表示されて入力を促す.
・プログラムの実行が停止し, $\mathrm{X}$ レジスターに対して値の入力が行えるようになる. 値を入力した後で $\mathrm{R/S}$ ボタンを押すと, $\mathrm{X}$ レジスターの値が自動的に指定した変数またはレジスターに送られて入力操作が終了する.
・プログラムの実行が継続される.
マニュアルに載っている $\Mr{INPUT}$ 命令を使ったサンプルプログラムは次のようなものである. このプログラムはユーザーが奥行き, 高さ, 幅の 3 つの値を入力して, 奥行き $\Mr{L}$, 高さ $\Mr{H}$, 幅 $\Mr{W}$ の直方体の表面積を式
\begin{equation*}
\text{表面積} = 2 \times ((\Mr{L} \times \Mr{H}) + (\Mr{L} \times \Mr{W}) + (\Mr{H} \times \Mr{W}))
\end{equation*} を使って計算する.
\begin{align*}
& 01 \q \Mr{LBL} \qq \text{"SAREA"} & \q & \\
& 02 \q \Mr{INPUT} \qq \text{"L"} & & ; \text{3 つの変数を入力する.} \\
& 03 \q \Mr{INPUT} \qq \text{"H"} & & \\
& 04 \q \Mr{INPUT} \qq \text{"W"} & & \\
& 05 \q \Mr{RCL\times} \qq \text{"L"} & & ; \text{奥行き} \times \text{幅を計算する.} \\
& 06 \q \Mr{LASTX} & & ; \text{高さ} \times \text{幅を計算する.} \\
& 07 \q \Mr{RCL\times} \qq \text{"H"} & & \\
& 08 \q \Mr{RCL} \qq \text{"H"} & & ; \text{奥行き} \times \text{高さを計算する.} \\
& 09 \q \Mr{RCL\times} \qq \text{"L"} & & \\
& 10 \q + & & ; \text{それぞれの積の合計を} 2 \text{倍して, 計算結果を} \Mr{X} \text{レジスターに残す.} \\
& 11 \q + & & \\
& 12 \q 2 & & \\
& 13 \q \times & & \\
& 14 \q \Mr{END} & &
\end{align*}
このプログラムには次の変数とレジスターが使用されている.
・変数: $\Mr{L}$, $\Mr{H}$, $\Mr{W}$
・スタックレジスター: $\Mr{X}$, $\Mr{Y}$, $\Mr{Z}$, $\Mr{T}$
・$\Mr{LAST X}$ レジスター (一つ前の $\Mr{X}$ レジスターの内容を保持するレジスター): $\Mr{LASTX}$
$\Mr{L} = 4$, $\Mr{H} = 3$, $\Mr{W} = 1.5$ を入力する場合の動作を一行づつ書き下してみる.
$\hspace{10mm} 01 \q \Mr{LBL} \qq \text{"SAREA"}$
$\hspace{10mm} 02 \q \Mr{INPUT} \qq \text{"L"}$
\begin{align*}
& \Mr{L}: 4 & \qq & \Mr{T}: & \qq & \\
& & \qq & \Mr{Z}: & \qq & \\
& & \qq & \Mr{Y}: & \qq & \\
& & \qq & \Mr{X}: 4 & \qq & \Mr{LASTX}:
\end{align*}
$\hspace{10mm} 03 \q \Mr{INPUT} \qq \text{"H"}$
\begin{align*}
& \Mr{L}: 4 & \qq & \Mr{T}: & \qq & \\
& \Mr{H}: 3 & \qq & \Mr{Z}: & \qq & \\
& & \qq & \Mr{Y}: 4 & \qq & \\
& & \qq & \Mr{X}: 3 & \qq & \Mr{LASTX}: 4
\end{align*}
$\hspace{10mm} 04 \q \Mr{INPUT} \qq \text{"W"}$
\begin{align*}
& \Mr{L}: 4 & \qq & \Mr{T}: & \qq & \\
& \Mr{H}: 3 & \qq & \Mr{Z}: 4 & \qq & \\
& \Mr{W}: 1.5 & \qq & \Mr{Y}: 3 & \qq & \\
& & \qq & \Mr{X}: 1.5 & \qq & \Mr{LASTX}: 3 \\
\end{align*}
$\hspace{10mm} 05 \q \Mr{RCL\times} \qq \text{"L"}$
\begin{align*}
& \Mr{L}: 4 & \qq & \Mr{T}: & \qq & \\
& \Mr{H}: 3 & \qq & \Mr{Z}: 4 & \qq & \\
& \Mr{W}: 1.5 & \qq & \Mr{Y}: 3 & \qq & \\
& & \qq & \Mr{X}: 6 & \qq & \Mr{LASTX}: 1.5 \\
\end{align*}
$\hspace{10mm} 06 \q \Mr{LASTX}$
\begin{align*}
& \Mr{L}: 4 & \qq & \Mr{T}: 4 & \qq & \\
& \Mr{H}: 3 & \qq & \Mr{Z}: 3 & \qq & \\
& \Mr{W}: 1.5 & \qq & \Mr{Y}: 6 & \qq & \\
& & \qq & \Mr{X}: 1.5 & \qq & \Mr{LASTX}: 1.5
\end{align*}
$\hspace{10mm} 07 \q \Mr{RCL\times} \qq \text{"H"}$
\begin{align*}
& \Mr{L}: 4 & \qq & \Mr{T}: 4 & \qq & \\
& \Mr{H}: 3 & \qq & \Mr{Z}: 3 & \qq & \\
& \Mr{W}: 1.5 & \qq & \Mr{Y}: 6 & \qq & \\
& & \qq & \Mr{X}: 4.5 & \qq & \Mr{LASTX}: 1.5
\end{align*}
$\hspace{10mm} 08 \q \Mr{RCL} \qq \text{"H"}$
\begin{align*}
& \Mr{L}: 4 & \qq & \Mr{T}: 3 & \qq & \\
& \Mr{H}: 3 & \qq & \Mr{Z}: 6 & \qq & \\
& \Mr{W}: 1.5 & \qq & \Mr{Y}: 4.5 & \qq & \\
& & \qq & \Mr{X}: 3 & \qq & \Mr{LASTX}: 1.5
\end{align*}
$\hspace{10mm} 09 \q \Mr{RCL\times} \qq \text{"L"}$
\begin{align*}
& \Mr{L}: 4 & \qq & \Mr{T}: 3 & \qq & \\
& \Mr{H}: 3 & \qq & \Mr{Z}: 6 & \qq & \\
& \Mr{W}: 1.5 & \qq & \Mr{Y}: 4.5 & \qq & \\
& & \qq & \Mr{X}: 12 & \qq & \Mr{LASTX}: 3
\end{align*}
$\hspace{10mm} 10 \q +$
\begin{align*}
& \Mr{L}: 4 & \qq & \Mr{T}: 3 & \qq & \\
& \Mr{H}: 3 & \qq & \Mr{Z}: 3 & \qq & \\
& \Mr{W}: 1.5 & \qq & \Mr{Y}: 6 & \qq & \\
& & \qq & \Mr{X}: 16.5 & \qq & \Mr{LASTX}: 12
\end{align*}
$\hspace{10mm} 11 \q +$
\begin{align*}
& \Mr{L}: 4 & \qq & \Mr{T}: 3 & \qq & \\
& \Mr{H}: 3 & \qq & \Mr{Z}: 3 & \qq & \\
& \Mr{W}: 1.5 & \qq & \Mr{Y}: 3 & \qq & \\
& & \qq & \Mr{X}: 22.5 & \qq & \Mr{LASTX}: 16.5
\end{align*}
$\hspace{10mm} 12 \q 2$
\begin{align*}
& \Mr{L}: 4 & \qq & \Mr{T}: 3 & \qq & \\
& \Mr{H}: 3 & \qq & \Mr{Z}: 3 & \qq & \\
& \Mr{W}: 1.5 & \qq & \Mr{Y}: 22.5 & \qq & \\
& & \qq & \Mr{X}: 2 & \qq & \Mr{LASTX}: 22.5
\end{align*}
$\hspace{10mm} 13 \q \times$
\begin{align*}
& \Mr{L}: 4 & \qq & \Mr{T}: 3 & \qq & \\
& \Mr{H}: 3 & \qq & \Mr{Z}: 3 & \qq & \\
& \Mr{W}: 1.5 & \qq & \Mr{Y}: 3 & \qq & \\
& & \qq & \Mr{X}: 45 & \qq & \Mr{LASTX}: 2
\end{align*}
$\hspace{10mm} 14 \q \Mr{END}$
※: 1 行毎の動きを解析したが, 残念ながらプログラムを理解できたとは言えない. 論理的思考力, 特にアルゴリズム的な思考が困難なのはまだ回復していない. しかし, こういう作業を繰り返していくことがリハビリになっていくといい.
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
-
no image
-
no image