プログラムに正解はありません。結果が良ければ正解と言えますが、どんなに良くできたと思っても改善できるところはあります。四則演算計算機の回答例を4本作成しました、改善案を考えてください。
ここからは見出しレベル2で回答例1から回答例4までがあります。見出しのすぐ下に回答例のプログラムが書いてあり、最後は End命令で終わっています。その下に解説が書いてあります。
//回答例1:計算ボタンが押されると4種類の計算結果を表示します。
input 数値1
input 数値2
button "計算", *計算と結果表示
stop
*計算と結果表示
足し算結果 = 数値1 + 数値2
引き算結果 = 数値1 - 数値2
掛け算結果 = 数値1 * 数値2
割り算結果 = 数値1 / 数値2
dialog 足し算結果 ;足し算計算機と同じ命令
dialog 引き算結果, 1, "引き算結果" ;1は黄信号とOKボタン
dialog 掛け算結果, 2, "掛け算結果" ;2は青信号とはいボタンといいえボタン
dialog 割り算結果, 3, "割り算結果" ;2は黄信号とはいボタンといいえボタン
end
回答例1の解説
先頭行はコメントです。コメントは説明です。コメントは人間語で書きます。プログラムの処理には影響しません。dialog命令の後ろにもコメントがあります。コメントの書き方は3種類あります。
書き方1: //の後ろはコメントです。
書き方2: ;の後ろはコメントです。
書き方3: /* */で挟まれた範囲はコメントです。
2行目からの4行は足し算計算機と同じです。操作方法も同じです。二つの数値を入力して、計算のプッシュボタンが押されると、4種類の計算を実行し、そのあとに4種類の計算結果を表示します。
ゼロで割り算をしたらその場で異常終了します。したがってその場合は計算結果が表示されません。異常終了させない方法は回答例2と回答例3で説明します。
最初のdialog命令は足し算結果の表示です。計算結果が100のときは『のメッセージ 100』と聴こえます。
次のdialog命令は引き算結果の表示です。『引き算結果のメッセージ 100』と聴こえます。
dialog命令は3つのパラメーターがあります。『マルマルのメッセージ 100』と聴こえたときはマルマルが第3パラメーターで、100が第1パラメーターです。
dialog命令の第2パラメーターは省略すると0です。0と1はOKボタンだけを表示します。2と3ははいボタンといいえボタンを表示します。0と2は青信号を表示します。1と3は黄色信号を表示します。簡単なお知らせメッセージは青信号を表示し、警告メッセージは黄色信号を表示します。このプログラムはすべて0の青信号でいいですが、サンプルとして0から3までを使いました。
数値データは整数型と実数型があります。指定しないと整数型になります。二つの数値に1.5を入力して足し算結果を確認してください。実数型にする方法は回答例2で説明します。
//回答例2:四つのプッシュボタンで4種類の計算方式を選択します。
//二つの数値は実数型で定義する。
//割り算ではゼロで割り算しないようにチェックする。
dialog "このプログラムは四則演算計算機です。", 0, "プログラム説明"
dialog "手順1:二つの数値を入力します。", 0, "操作説明"
dialog "手順2:四つのプッシュボタンでスペースキーを押すと計算結果を表示します。", 0, "操作説明"
dialog "手順3:終了のプッシュボタンでスペースキーを押すと終了します。", 0, "操作説明"
数値1=0.0 : input 数値1, 200, 50 ;実数型で定義する。
数値2=0.0 : input 数値2, 200, 50 ;200は入力ボックスの横幅、50は高さ
button "足し算", *足し算結果表示
button "引き算", *引き算結果表示
button "掛け算", *掛け算結果表示
button "割り算", *割り算結果表示
button "終了", *終了
stop
*足し算結果表示
足し算結果 = 数値1 + 数値2
dialog 足し算結果, 0, "足し算結果"
stop
*引き算結果表示
引き算結果 = 数値1 - 数値2
dialog 引き算結果, 0, "引き算結果"
stop
*掛け算結果表示
掛け算結果 = 数値1 * 数値2
dialog 掛け算結果, 0, "掛け算結果"
stop
*割り算結果表示
if 数値2 = 0 {
dialog "ゼロで割り算できません", 1, "割り算結果"
stop
}
else {
割り算結果 = 数値1 / 数値2
dialog 割り算結果, 0, "割り算結果"
stop
}
*終了
end
回答例2の解説
最初の3行はコメントです。アプリを作る人向けに人間語で書きます。
次の4行はdialog命令でプログラムの機能説明と操作説明があります。パソコン語で書いた説明はアプリを使う人向けの説明です。
次は二つの入力ボックスを設置します。数値1と数値2は実数型で定義しました。命令文を「:」でつなぐと一行に二つ以上の命令文を書くことができます。二つの数値に1.5を入力して足し算結果を確認してください。
五つのプッシュボタンを設置します。四つの計算方式と終了ボタンがあります。各計算のプッシュボタンを押したら、dialog命令で計算結果を表示します。次に進むとstop命令で停止し、人の操作を待ちます。終了ボタンを押したら*終了ラベルに飛んでいきend命令で終了します。
割り算では数値2がゼロの時は黄色信号の警告メッセージを表示します。
//回答例3:コンボボックスで4種類の計算方式を選択します。
//実行時のエラーが発生したときは*エラー処理ラベルに飛んで行く。
onerror goto *エラー処理
//タイトルバーの見出し表示。
title "四則演算計算機"
//二つの数値の入力ボックス設置する。
数値1=0.0 : input 数値1, 200, 50 ;実数型で定義する。
数値2=0.0 : input 数値2, 200, 50 ;200は入力ボックスの横幅、50は高さ
//加減乗除の4択コンボボックスを設置する。
combox index,100,"足し算\n引き算\n掛け算\n割り算"
//三つのプッシュボタンを設置する。
button "計算", *計算結果表示
button "説明", *説明表示
button "終了", *終了
stop
*エラー処理
//wparamにエラーコードが設定されている。エラーコード19はゼロで割り算をした。
if wparam = 19 {
dialog "ゼロで割り算できません。入力した数値を確認してください。", 1, "四則演算計算機"
stop
}
else {
メッセージ = "エラーコードは" + str(wparam) + "です。終了します。"
dialog メッセージ, 1, "四則演算計算機"
end
}
*計算結果表示
if index = 0 {
dialog 数値1 + 数値2, 0, "足し算結果"
stop
}
if index = 1 {
dialog 数値1 - 数値2, 0, "引き算結果"
stop
}
if index = 2 {
dialog 数値1 * 数値2, 0, "掛け算結果"
stop
}
if index = 3 {
dialog 数値1 / 数値2, 0, "割り算結果"
stop
}
stop
*説明表示
説明文= "手順1.二つの数字を入力します。"
説明文= 説明文+ "\n手順2.コンボボックスで加減乗除を選択します。"
説明文= 説明文+ "\n手順3.計算のプッシュボタンでスペースキーを押すと計算結果を表示します。"
説明文= 説明文+ "\n\nもう一度聞きますか?"
*説明再表示
//第2パラメーターの2は 青信号で、はいボタンといいえボタン
dialog 説明文, 2, "操作説明・四則演算計算機"
//stat = 6は、はいボタンが押された。stat = 7は、いいえボタンが押された。
if stat = 6 { goto *説明再表示 }
stop
*終了
//第2パラメーターの3は 黄色信号で、はいボタンといいえボタン
dialog "本当に終了しますか?", 3, "修了確認・四則演算計算機"
//stat=6は、はいボタンが押された。stat=7は、いいえボタンが押された。
if stat = 7 { stop }
end
回答例3の解説
プログラムが複雑になってきたのでコメントも増やしました。
コンボボックスで計算方式を選択し、計算ボタンを押したら選択された計算結果を表示します。割り算では事前のゼロチェックをしません。ゼロで割り算をしたらそのことを検知してエラー処理をします。
プッシュボタンは計算、説明、終了があります。回答例2では毎回説明メッセージを表示するが、回答例3では説明ボタンを押したときだけ説明メッセージを表示します。
onerror命令は実行中にエラーを検知したら、*エラー判定ラベルに飛びます。*エラー判定ラベルに飛んで来たらゼロで割り算したかを判定します。
title命令はタイトルバーにタイトルを表示します。実行中にCtrl+Alt+5キーを押したらタイトルバーの内容が読み上げられます。
input命令の200と50は入力ボックスの横幅と高さです。単位はピクセルです。
combox命令はコンボボックスで4種類の計算方式が選択できるように表示します。\nは項目間の区切記号で改行記号でもあります。\nで区切られた項目名が縦に並んで表示されます。
combox命令の第1パラメーターはコンボボックスで選択した項目番号が設定されます。4択の場合は0から3が設定されます。ここでの第1パラメーターはindexです。
計算ボタンを押すと、コンボボックスで選択した計算結果を表示し、stop命令で停止します。割り算の場合はゼロで割り算をしたらonerror命令で指定された*エラー判定ラベルに飛んでいきます。
*エラー判定ラベルに飛んで来たらエラーコードが19とそれ以外でメッセージの表示を変えます。エラーコード19はゼロで割り算したエラーです。
メッセージ = "エラーコードは" + str(wparam) + "です。終了します。" について。
wparamは数値型データです。str(wparam)で文字型データに変換されます。文字型データーの足し算は二つの文字データが前後につながります。strはプログラムです。関数という特別なプログラムです。
例えば『三角形の面積 = sankaku(底辺, 高さ)』の場合、sankakuが関数プログラムの名前で、底辺と高さを入れたら三角形の面積が出てきます。
説明ボタンを押すと、dialog命令で説明文を表示し、もう一度説明文を表示するか確認します。はいボタンが押されたことを調べています。
終了ボタンを押すと、dialog命令で説明文を表示し、本当に終了するか確認します。いいえボタンが押されたことを調べています。
//回答例4:リストボックスで4種類の計算方式を選択します。
//見出し文字を表示するためのモジュール
#include "hsp3util.as"
//キーボードのキーが押されるたびにキー入力判定に飛んで行く。
//Escキーが連続3回押されたら終了。
//リストボックス内で項目を選択しエンターキーが押されたらそれぞれの処理をする。
ESC3=0 ;Escキーが連続して押された回数をカウントする
onkey gosub *キー入力判定
//タイトルバーの見出し表示
Title "四則演算計算機"
//二つの数値の入力ボックス設置する。
statictext "数値1" : 数値1=0.0 : input 数値1
statictext "数値2" : 数値2=0.0 : input 数値2
//リストボックスを設置する。加減乗除と説明、終了の6項目。
statictext "処理選択"
listbox index,100,"足し算\n引き算\n掛け算\n割り算\n説明\n終了"
stop
*キー入力判定
//キーボードのキーが押されるたびに飛んで来る。gosub命令で飛んできた場合はreturn命令で戻る。
//wparamにキーコードが設定されている。13はエンターキー、27はEscキー
//どこにいてもEscキーが連続3回押されたら終了する。
if wparam=27 {ESC3=ESC3+1} else {ESC3=0}
if ESC3=3 { end }
//リストボックス内でエンターキーが押されたら*計算結果表示ラベルに飛んでいく。
objsel -1 ;現在どのオブジェクトにカーソルがあるか調べる
if stat = 5 { ;0番目は数値1の見出し、1番目はその入力ボックス、5番目ならリストボックス
if wparam = 13 {goto *計算結果表示}
}
return
*計算結果表示
//indexはリストボックスで選択した項目番号で0から5。
if index=4 {goto *説明表示}
if index=5 {goto *終了}
dialog "計算結果の表示は省略します。"
stop
*説明表示
dialog "説明文の表示は省略します。"
stop
*終了
end
回答例4の解説
リストボックスで計算方式と説明および終了を選択します。計算や終了のプッシュボタンはありません。リストボックス内で項目を選択してエンターキーを押すとそれぞれの処理を実行します。
input命令の行は1行が3つの命令文に増えました。追加された先頭のstatictext命令は見出し文字を配置します。プログラムの先頭に書いてある #include "hsp3util.as" はそのためのお約束です。実行時にTabキーを数回押して音声ガイドが回答例3までと違うことを確認してください。
onkey命令はキーボードのキーが押されるたびに*キー入力判定ラベルに飛んで行きます。
*キー入力判定ラベルに飛んで来たら、どのキーが押されたかを調べます。どこにいてもEscキーが連続3回押された場合は終了します。リストボックス内でエンターキーが押されたときは*計算結果表示ラベルに飛んで行きます。その他の場合はreturn命令で飛んでくる前に位置に戻ります。
*計算結果表示ラベルに飛んで来たら、リストボックスで選択された項目番号を調べます。6択なので0から5までを調べます。項目番号が0から3までの計算結果表示と、4の説明表示のプログラムは簡略化しました。
この回答例では*計算結果表示ラベル内で説明と終了の判定をしました。ラベル名とやっていることが一致していません。*キー入力判定ラベル内でも説明と終了の判定ができます。プログラムは分かり易く書くことが重要です。
ページの最後です。上矢印キーを押すと、上の行に戻ります。Home キーを押すと、このページの先頭に戻ります。Alt+左矢印キーを押すと、ここに来る前のページに戻ります。
ここでエンターキーを押すか、クリックをするとトップページの目次に戻ります