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

2019年05月16日

HP-42S: プログラマブルメニュー (続き)

HP-42S: プログラマブルメニュー の続き.

サンプルプログラムが何とか理解できたのでまとめておく.

以前にも書いたが, プログラマブルメニューのサンプルプログラムの仕様をもう一度示す.
・ プログラムは 12 個のメニュー項目から構成される. それぞれのメニュー項目は一年の 12 の月, 1 月, 2 月,..., 12 月に対応している. 各月の略称と正式名は次のとおりである: JAN (January), FEB (February), MAR (March), APR (April), MAY (May), JUN (June), JUL (July), AUG (August), SEP (September), OCT (October), NOV (November), DEC (December).
・ メニューは 2 つのメニュー画面から構成される. つまり, 6 個のメニュー項目を持つメニュー画面が二列列存在する. 一列目は 1 月から 6 月に対応し, 二列目は 7 月から 12 月に対応する.
・ メニューキーを押すと, プログラムはそのメニューキーに対応する月の省略しない名前と月の日数をディスプレイに表示する.
この最後の機能のリストはマニュアルには載っていない.

サンプルプログラムの完全なリスト


プログラムは大きくわけると 3 つの部分から構成される.
● メニュー A の定義
これはメニューの 1 ページ目で, 1 月から 6 月に対応している. また, $[\blacktriangle]$ キーあるいは $[\blacktriangledown]$ キーによってもう一つのメニュー B に移るための処理と $[\mathtt{EXIT}]$ キーによるメニューの終了処理を含んでいる.

● メニュー B の定義
これはメニューの 2 ページ目で, 7 月から 12 月に対応している. $[\blacktriangle]$ キーあるいは $[\blacktriangledown]$ キーによってもう一つのメニュー A に移るための処理と $[\mathtt{EXIT}]$ キーによるメニューの終了処理を含んでいる.

● サブルーチンの定義
終了処理のサブルーチンはメニューを終了してプログラムを終了する (※). 01 〜 12 それぞれのサブルーチンは以下の文字列をディスプレイに表示する.

サブルーチン 01: "January:31"
サブルーチン 02: "February:28"
サブルーチン 03: "March:31"
サブルーチン 04: "April:30"
サブルーチン 05: "May:31"
サブルーチン 06: "June:30"
サブルーチン 07: "July:31"
サブルーチン 08: "August:31"
サブルーチン 09: "September:30"
サブルーチン 10: "October:31"
サブルーチン 11: "November:30"
サブルーチン 12: "December:31"

※: 実際には終了処理の最後では呼び出し元に戻る $\mathrm{RTN}$ 命令を使用している. このサンプルプログラムではトップレベルで終了処理が実行されるために, 結果としてプログラム自体が終了する.

プログラムの構造をこのような, いくつかの意味的・処理的にまとまった部分の集まりとして捉えることができたことは大きい. このような思考や捉え方がずっとできなかったからだ.

メニュー A の定義


\begin{alignat*}{2}
\newcommand{\Ar}[1]{\mathrm{Ar}(#1)}
\newcommand{\Arr}[1]{\mathrm{Arr}(#1)}
\newcommand{\Card}{\text{card}}
\newcommand{\Cdot}{\,\cdot^{\mathrm{op}}}
\newcommand{\Cocone}{\mathrm{Cocone}}
\newcommand{\Colim}{\mathrm{colim}\,}
\newcommand{\CommaCat}[2]{(#1/#2)}
\newcommand{\Cone}{\mathrm{Cone}}
\newcommand{\Eqclass}[4]{{#1#2#3}_{#4}}
\newcommand{\EqCls}[2]{{\left[#1\right]}_{#2}}
\newcommand{\Eqcls}[1]{\left[#1\right]}
\newcommand{\FnRest}[2]{{#1}|{#2}}
\newcommand{\Func}[2]{\mathrm{Func}(#1,#2)}
\newcommand{\g}{\varg}
\newcommand{\Hom}{\mathrm{Hom}}
\newcommand{\Id}[1]{\mathrm{id}_{#1}}
\newcommand{\In}{\mathrm{incl}}
\newcommand{\Inc}[2]{\mathrm{incl}\left(#1,#2\right)}
\newcommand{\Incl}[2]{\mathrm{incl}_{#1}^{#2}}
\newcommand{\Mb}[1]{\mathbf{#1}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\newcommand{\Ms}[1]{\mathscr{#1}}
\newcommand{\Mt}[1]{\mathtt{#1}}
\newcommand{\Nat}{\mathrm{Nat}}
\newcommand{\Ob}[1]{\mathrm{Ob}(#1)}
\newcommand{\Opp}[1]{{#1}^{\mathrm{op}}}
\newcommand{\Prj}[2]{\mathrm{proj}\left(#1,#2\right)}
\newcommand{\Proj}[2]{\mathrm{proj}^{#1}_{#2})}
\newcommand{\q}{\hspace{1em}}
\newcommand{\qq}{\hspace{0.5em}}
\newcommand{\Rel}[1]{\langle{#1}\rangle}
\newcommand{\Rest}[2]{{#1}|{#2}}
\newcommand{\SkelCat}[1]{\mathrm{sk}(#1)}
\newcommand{\Slash}[1]{{\ooalign{\hfil/\hfil\crcr$#1$}}}
\newcommand{\SliCat}[2]{{#1}\,\big/\,{#2}}
\newcommand{\Src}{d^{0,\mathrm{op}}}
\newcommand{\Sub}{\mathrm{Sub}}
\newcommand{\ssqrt}[1]{\sqrt{\smash[b]{\mathstrut #1}}}
\newcommand{\Tgt}{d^{1,\mathrm{op}}}
\newcommand{\TwArCat}[1]{\mathrm{Tw}(#1)}
\newcommand{\VectCat}[1]{#1 \mathchar`- \mathbf{Vect}}
\newcommand{\Grp}{\mathbf{Grp}}
\newcommand{\Mon}{\mathbf{Mon}}
\newcommand{\POs}{\mathbf{Pos}}
\newcommand{\Psh}{\mathbf{Psh}}
\newcommand{\Set}{\mathbf{Set}}
\newcommand{\Sh}{\mathbf{Sh}}
\newcommand{\Top}{\mathbf{Top}}
\newcommand{\A}{\mathscr{A}}
\newcommand{\B}{\mathscr{B}}
\newcommand{\C}{\mathscr{C}}
\newcommand{\D}{\mathscr{D}}
\newcommand{\E}{\mathscr{E}}
\newcommand{\F}{\mathscr{F}}
\newcommand{\sH}{\mathscr{H}}
\newcommand{\I}{\mathscr{I}}
\newcommand{\J}{\mathscr{J}}
\newcommand{\K}{\mathscr{K}}
\newcommand{\sL}{\mathscr{L}}
\newcommand{\M}{\mathscr{M}}
\newcommand{\N}{\mathscr{N}}
\newcommand{\sO}{\mathscr{O}}
\newcommand{\sP}{\mathscr{P}}
\newcommand{\R}{\mathscr{R}}
\newcommand{\sS}{\mathscr{S}}
\newcommand{\T}{\mathscr{T}}
\newcommand{\U}{\mathscr{U}}
\newcommand{\V}{\mathscr{V}}
\newcommand{\W}{\mathscr{W}}
\newcommand{\X}{\mathscr{X}}
\newcommand{\Y}{\mathscr{Y}}
\newcommand{\Z}{\mathscr{Z}}
\newcommand{\Pw}{\mathbf{P}}
\newcommand{\Rn}[1]{\Real^{#1}}
\newcommand{\Pw}{\mathbf{P}}
\newcommand{\Rn}[1]{\Real^{#1}}
\phantom{02} & \phantom{\qq\Mr{KEY}\qq 9 \qq\Mr{GTO}\qq 99} & \hspace{4em} & \phantom{; \text{メニュー A の定義: 1 月 〜 6 月・メニュー切り替え・終了処理.}} \\
01 & \qq\Mr{LBL}\qq\Mr{''YEAR''} & \hspace{4em} & ; \text{プログラム ``YEAR''.} \\
02 & \qq\Mr{LBL}\qq\Mr{A} & ~ & ; \text{メニュー A の定義: 1 月 〜 6 月・メニュー切り替え・終了処理.} \\
03 & \qq\Mr{''JAN''} & ~ & ; \text{メニュー ``JAN'': 1 月.} \\
04 & \qq\Mr{KEY}\qq 1 \qq\Mr{XEQ}\qq 01 & ~ & ; \text{キー 1: $[\Sigma +]$ でサブルーチン 01 を呼び出す.} \\
05 & \qq\Mr{''FEB''} & ~ & ; \text{メニュー ``FEB'': 2 月.} \\
06 & \qq\Mr{KEY}\qq 2 \qq\Mr{XEQ}\qq 02 & ~ & ; \text{キー 2: $[1/x]$ でサブルーチン 02 を呼び出す.} \\
07 & \qq\Mr{''MAR''} & ~ & ; \text{メニュー ``MAR'': 3 月.} \\
08 & \qq\Mr{KEY}\qq 3 \qq\Mr{XEQ}\qq 03 & ~ & ; \text{キー 3: $[\sqrt{x}]$ でサブルーチン 03 を呼び出す.} \\
09 & \qq\Mr{''APR''} & ~ & ; \text{メニュー ``APR'': 4 月.} \\
10 & \qq\Mr{KEY}\qq 4 \qq\Mr{XEQ}\qq 04 & ~ & ; \text{キー 4: [LOG] でサブルーチン 04 を呼び出す.} \\
11 & \qq\Mr{''MAY''} & ~ & ; \text{メニュー ``MAY'': 5 月.} \\
12 & \qq\Mr{KEY}\qq 5 \qq\Mr{XEQ}\qq 05 & ~ & ; \text{キー 5: [LN] でサブルーチン 05 を呼び出す.} \\
13 & \qq\Mr{''JUN''} & ~ & ; \text{メニュー ``JUN'': 6 月.} \\
14 & \qq\Mr{KEY}\qq 6 \qq\Mr{XEQ}\qq 06 & ~ & ; \text{キー 6: [XEQ] でサブルーチン 06 を呼び出す.} \\
15 & \qq\Mr{KEY}\qq 7 \qq\Mr{GTO}\qq \Mr{B} & ~ & ; \text{キー 7: $[\blacktriangle]$ およびキー 8: $[\blacktriangledown]$ でメニュー B に切り換わる.} \\
16 & \qq\Mr{KEY}\qq 8 \qq\Mr{GTO}\qq \Mr{B} & ~ & \\
17 & \qq\Mr{KEY}\qq 9 \qq\Mr{GTO}\qq 99 & ~ & ; \text{キー 9: [EXIT] でメニューの終了処理 99 に飛ぶ.} \\
~ & ~ & ~ & ; \text{これによりプログラム自体も終了する.} \\
18 & \qq\Mr{MENU} & ~ & ; \text{定義されたメニューの開始. メニュー A が開始される.} \\
19 & \qq\Mr{LBL}\qq 20 & ~ & ; \text{サブルーチン 20: メニュー A を表示してキー入力待ちを行う.} \\
20 & \qq\Mr{STOP} & ~ & ; \text{プログラムを一時停止する.} \\
~ & ~ & ~ & ; \text{何れかのキー入力で再開して対応する処理を起動する.} \\
21 & \qq\Mr{GTO}\qq 20 & ~ & ; \text{キー入力処理の終了後にこの行に戻る.} \\
~ & ~ & ~ & ; \text{自分自身を呼び出して再びキー入力待ちの無限ループに入る.} \\
\end{alignat*}

メニュー B の定義


\begin{alignat*}{2}
\phantom{02} & \phantom{\qq\Mr{KEY}\qq 9 \qq\Mr{GTO}\qq 99} & \hspace{4em} & \phantom{; \text{メニュー A の定義: 1 月 〜 6 月・メニュー切り替え・終了処理.}} \\
22 & \qq\Mr{LBL}\qq\Mr{B} & ~ & ; \text{メニュー B の定義: 7 月 〜 12 月・メニュー切り替え・終了処理.} \\
23 & \qq\Mr{''JUL''} & ~ & ; \text{メニュー ``JUL'': 7 月.} \\
24 & \qq\Mr{KEY}\qq 1 \qq\Mr{XEQ}\qq 07 & ~ & ; \text{キー 1: $[\Sigma +]$ でサブルーチン 07 を呼び出す.} \\
25 & \qq\Mr{''AUG''} & ~ & ; \text{メニュー ``AUG'': 8 月.} \\
26 & \qq\Mr{KEY}\qq 2 \qq\Mr{XEQ}\qq 08 & ~ & ; \text{キー 2: $[1/x]$ でサブルーチン 08 を呼び出す.} \\
27 & \qq\Mr{''SEP''} & ~ & ; \text{メニュー ``SEP'': 9 月.} \\
28 & \qq\Mr{KEY}\qq 3 \qq\Mr{XEQ}\qq 09 & ~ & ; \text{キー 3: $[\sqrt{x}]$ でサブルーチン 09 を呼び出す.} \\
29 & \qq\Mr{''OCT''} & ~ & ; \text{メニュー ``OCT'': 10 月.} \\
30 & \qq\Mr{KEY}\qq 4 \qq\Mr{XEQ}\qq 10 & ~ & ; \text{キー 4: [LOG] でサブルーチン 10 を呼び出す.} \\
31 & \qq\Mr{''NOV''} & ~ & ; \text{メニュー ``NOV'': 11 月.} \\
32 & \qq\Mr{KEY}\qq 5 \qq\Mr{XEQ}\qq 11 & ~ & ; \text{キー 5: [LN] でサブルーチン 11 を呼び出す.} \\
33 & \qq\Mr{''DEC''} & ~ & ; \text{メニュー ``DEC'': 12 月.} \\
34 & \qq\Mr{KEY}\qq 6 \qq\Mr{XEQ}\qq 12 & ~ & ; \text{キー 6: [XEQ] でサブルーチン 12 を呼び出す.} \\
35 & \qq\Mr{KEY}\qq 7 \qq\Mr{GTO}\qq \Mr{A} & ~ & ; \text{キー 7: $[\blacktriangle]$ およびキー 8: $[\blacktriangledown]$ でメニュー A に切り換わる.} \\
36 & \qq\Mr{KEY}\qq 8 \qq\Mr{GTO}\qq \Mr{A} & ~ & ; \\
37 & \qq\Mr{KEY}\qq 9 \qq\Mr{GTO}\qq 99 & ~ & ; \text{キー 9: [EXIT] でメニューの終了処理 99 に飛ぶ.} \\
~ & ~ & ~ & ; \text{これによりプログラム自体も終了する.} \\
38 & \qq\Mr{MENU} & ~ & ; \text{定義されたメニューの開始. メニュー B が開始される.} \\
39 & \qq\Mr{LBL}\qq 21 & ~ & ; \text{サブルーチン 21: メニュー B を表示してキー入力待ちを行う.} \\
40 & \qq\Mr{STOP} & ~ & ; \text{プログラムを一時停止する.} \\
41 & \qq\Mr{GTO}\qq 21 & ~ & ; \text{何れかのキー入力で再開して対応する処理を起動する.}
\end{alignat*}

サブルーチンの定義



終了処理のサブルーチン
\begin{alignat*}{2}
\phantom{02} & \phantom{\qq\Mr{KEY}\qq 9 \qq\Mr{GTO}\qq 99} & \hspace{4em} & \phantom{; \text{メニュー A の定義: 1 月 〜 6 月・メニュー切り替え・終了処理.}} \\
42 & \qq\Mr{LBL}\qq 99 & ~ & ; \text{終了処理の開始.} \\
43 & \qq\Mr{CLMENU} & ~ & ; \text{メニューをクリアーする.} \\
44 & \qq\Mr{EXITALL} & ~ & ; \text{全メニューを終了する.} \\
45 & \qq\Mr{RTN} & ~ & ; \text{$\Mr{END}$ 命令ではなく $\Mr{RTN}$ 命令でサブルーチンを終了する.} \\
~ & ~ & ~ & ; \text{このサンプルプログラムがサブルーチンとして別のプログラム} \\
~ & ~ & ~ & ; \text{から呼び出されている場合は, 実行はそのプログラムに戻る.} \\
\end{alignat*}
1 月から 12 月用の各メッセージを表示するサブルーチン
\begin{alignat*}{2}
\phantom{02} & \phantom{\qq\Mr{KEY}\qq 9 \qq\Mr{GTO}\qq 99} & \hspace{4em} & \phantom{; \text{メニュー A の定義: 1 月 〜 6 月・メニュー切り替え・終了処理.}} \\
46 & \qq\Mr{LBL}\qq\Mr{01} & ~ & ; \text{``JAN'' メニュー.} \\
47 & \qq\Mr{''January:31''} & ~ & ; \text{表示するメッセージ.} \\
48 & \qq\Mr{AVIEW} & ~ & ; \text{ALPHA レジスターの内容を表示する.} \\
49 & \qq\Mr{PSE} & ~ & ; \text{約 1 秒間プログラムの実行を停止する.} \\
50 & \qq\Mr{RTN} & ~ & ; \text{呼び出し元に戻る (他の月のサブルーチンも同様).} \\
51 & \qq\Mr{LBL}\qq\Mr{02} & ~ & ; \text{``FEB'' メニュー.} \\
52 & \qq\Mr{''February:28''} & ~ & ; \text{2 月は 28 日とする.} \\
~ & ~ & ~ & ; \text{} \\
53 & \qq\Mr{AVIEW} & ~ & ; \text{} \\
54 & \qq\Mr{PSE} & ~ & ; \text{} \\
55 & \qq\Mr{RTN} & ~ & ; \text{} \\
56 & \qq\Mr{LBL}\qq\Mr{03} & ~ & ; \text{``MAR'' メニュー.} \\
57 & \qq\Mr{''March:31''} & ~ & ; \text{} \\
~ & ~ & ~ & ; \text{} \\
58 & \qq\Mr{AVIEW} & ~ & ; \text{} \\
59 & \qq\Mr{PSE} & ~ & ; \text{} \\
60 & \qq\Mr{RTN} & ~ & ; \text{} \\
61 & \qq\Mr{LBL}\qq\Mr{04} & ~ & ; \text{``APR'' メニュー.} \\
62 & \qq\Mr{''April:30''} & ~ & ; \text{} \\
~ & ~ & ~ & ; \text{} \\
63 & \qq\Mr{AVIEW} & ~ & ; \text{} \\
64 & \qq\Mr{PSE} & ~ & ; \text{} \\
65 & \qq\Mr{RTN} & ~ & ; \text{} \\
66 & \qq\Mr{LBL}\qq\Mr{05} & ~ & ; \text{``MAY'' メニュー.} \\
67 & \qq\Mr{''May:31''} & ~ & ; \text{} \\
~ & ~ & ~ & ; \text{} \\
68 & \qq\Mr{AVIEW} & ~ & ; \text{} \\
69 & \qq\Mr{PSE} & ~ & ; \text{} \\
70 & \qq\Mr{RTN} & ~ & ; \text{} \\
71 & \qq\Mr{LBL}\qq\Mr{06} & ~ & ; \text{``JUN'' メニュー.} \\
72 & \qq\Mr{''June:30''} & ~ & ; \text{} \\
~ & ~ & ~ & ; \text{} \\
73 & \qq\Mr{AVIEW} & ~ & ; \text{} \\
74 & \qq\Mr{PSE} & ~ & ; \text{} \\
75 & \qq\Mr{RTN} & ~ & ; \text{} \\
\end{alignat*}
\begin{alignat*}{2}
\phantom{02} & \phantom{\qq\Mr{KEY}\qq 9 \qq\Mr{GTO}\qq 99} & \hspace{4em} & \phantom{; \text{メニュー A の定義: 1 月 〜 6 月・メニュー切り替え・終了処理.}} \\
76 & \qq\Mr{LBL}\qq\Mr{07} & ~ & ; \text{``JUL'' メニュー.} \\
77 & \qq\Mr{''July:31''} & ~ & ; \text{} \\
~ & ~ & ~ & ; \text{} \\
78 & \qq\Mr{AVIEW} & ~ & ; \text{} \\
79 & \qq\Mr{PSE} & ~ & ; \text{} \\
80 & \qq\Mr{RTN} & ~ & ; \text{} \\
81 & \qq\Mr{LBL}\qq\Mr{08} & ~ & ; \text{``AUG'' メニュー.} \\
82 & \qq\Mr{''August:31''} & ~ & ; \text{} \\
~ & ~ & ~ & ; \text{} \\
83 & \qq\Mr{AVIEW} & ~ & ; \text{} \\
84 & \qq\Mr{PSE} & ~ & ; \text{} \\
85 & \qq\Mr{RTN} & ~ & ; \text{} \\
86 & \qq\Mr{LBL}\qq\Mr{09} & ~ & ; \text{``SEP'' メニュー.} \\
87 & \qq\Mr{''September:30''} & ~ & ; \text{} \\
~ & ~ & ~ & ; \text{} \\
88 & \qq\Mr{AVIEW} & ~ & ; \text{} \\
89 & \qq\Mr{PSE} & ~ & ; \text{} \\
90 & \qq\Mr{RTN} & ~ & ; \text{} \\
91 & \qq\Mr{LBL}\qq\Mr{10} & ~ & ; \text{} \\
92 & \qq\Mr{''October:31''} & ~ & ; \text{``OCT'' メニュー.} \\
~ & ~ & ~ & ; \text{} \\
93 & \qq\Mr{AVIEW} & ~ & ; \text{} \\
94 & \qq\Mr{PSE} & ~ & ; \text{} \\
95 & \qq\Mr{RTN} & ~ & ; \text{} \\
96 & \qq\Mr{LBL}\qq\Mr{11} & ~ & ; \text{} \\
97 & \qq\Mr{''November:30''} & ~ & ; \text{``NOV'' メニュー.} \\
~ & ~ & ~ & ; \text{} \\
98 & \qq\Mr{AVIEW} & ~ & ; \text{} \\
99 & \qq\Mr{PSE} & ~ & ; \text{} \\
100 & \qq\Mr{RTN} & ~ & ; \text{} \\
101 & \qq\Mr{LBL}\qq\Mr{12} & ~ & ; \text{} \\
102 & \qq\Mr{''December:31''} & ~ & ; \text{``DEC'' メニュー.} \\
~ & ~ & ~ & ; \text{} \\
103 & \qq\Mr{AVIEW} & ~ & ; \text{} \\
104 & \qq\Mr{PSE} & ~ & ; \text{} \\
105 & \qq\Mr{RTN} & ~ & ; \text{} \\
106 & \qq\Mr{END} & ~ &
\end{alignat*}
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

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

この記事へのトラックバック
ファン
検索
<< 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)
(1441)
借金(8)
勉強(13)
(13)
数学(97)
運動(8)
日常生活(1403)
(204)
健康(38)
読書(21)
プロフィール

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