当サイトで紹介して、私が日本語化したアンドロイドアプリBASIC!のマニュアルの日本語版です。今回はプログラム制御命令についてです。尚、原文をそのまま訳すのでは無く、分かりやすく変更したり、実例の追加などをしていきます。
BASIC!MLの詳しい導入手順と初めての使い方はこちらの記事を参照してください。英語版のマニュアルはこちらにあります。
当記事は条件処理の説明です。
前回の宿題の解答例
問題
前回の宿題の記事はこちらになります。
①プログラムを実行したときの、コンソールの一番上のメッセージを『京都観光アンケート』にしてください。
②次の5箇所の京都の有名観光地から、どこに一番行きたいか質問してください。メッセージウインドウのタイトルは『京都で行きたい場所は?』としてください。
嵐山、清水寺、金閣寺、二条城、祇園
③選ばれた観光地をプリントしてください。
④次の3つのボタン名で、観光地の再確認をしてください。メッセージウインドウのタイトルは『観光地再確認』、質問は『本当に○○で良いですか?』としてください。○○は②で選ばれた観光地名です。
はい、いいえ、キャンセル
⑤押されたボタンに応じて、以下のメッセージをプリントしてください。
はい:観光地は○○に決定
いいえ:選択し直します
キャンセル:観光地選択キャンセル
戻る:戻るボタンがタップされました。
⑥自由に観光地を入力してもらう質問をしてください。メッセージウインドウのタイトルは『京都で観光したいお寺は?』として下さい。デフォルトは『大覚寺』にしてください。
⑦入力された観光地をプリントしてください。
解答例 実行結果①まず、最初のウインドウが開きます
②『清水寺』をタップすると以下のように、確認のウインドウが開きます。
③『はい』をタップすると、以下のように行きたい場所を入力するウインドウが開きます。鞍馬寺と入力してOKをクリックします。
④最後に印刷結果が分かります。ウインドウのタイトルも『京都観光アンケート』になっています。
BASIC!のマニュアル プログラム制御命令(条件処理、繰り返し処理など)
プログラム制御命令は、条件によって処理の流れを変える仕組みです。
If / Then / Else / Elseif / Endif前の記事で、一番簡単なIF文を紹介しましたが、IF文では複数の条件によってもプログラム処理を変えることができます。IfからEndifまでが1連の処理です。以下は命令とその説明をフローチャートで示したものです。thenは省略可能ですが、分かりやすいので記述しておいても良いと思います。Elseif、Elseも同じく不要な場合は省略可能です。
以下のサンプルプログラムは、Cls命令を説明した際のサンプルプログラムです。メッセージウインドウを表示して『はい』の場合は画面をクリアーします。『いいえ』と『キャンセル』の場合は画面クリアーしません。
プログラムを入力して実行をタップ:
実行結果:
①以下のようなメッセージウインドウが表示されます。コンソールの上のほうに薄くなっていますが、メッセージ1,2,3と印刷されています。Cls命令でこのメッセージがクリアーされます。
②はいボタンをタップするとコンソールがクリアーされ、『はいが選択されました』と印刷されます。プログラムはここで終わってしまいますので、エディターに戻って再度『実行』をタップしてください。
③いいえボタンをタップすると、画面は元のままで『いいえが選択されました』と印刷されます。プログラムはここで終わってしまいますので、エディターに戻って再度『実行』をタップしてください。
④キャンセルボタンをタップすると、画面は元のままで『キャンセルが選択されました』と印刷されます。プログラムはここで終わってしまいますので、エディターに戻って再度『実行』をタップしてください。
④タブレットの戻るをタップすると、画面は元のままで『戻るがタップされました』と印刷されます。
以前からのBASICで使われており、近年ではプログラムが分かりにくくなるので、使わないほうが良いと言われています。特にGotoは使わない方が良いです。Gotoはラベルの所へ飛んで処理が実行されますので、プログラムの流れを追いかけるのが大変になります。また、If文のなかで条件によってgotoで別の処理にいってしまうと、メモリーエラーなどになってしまいます。Gosubは、『サブルーチン』に行くという意味で、プログラムの中に同じような処理が複数ある場合に、複数ある処理をサブルーチンとして1回だけ記述して、それを呼び出す形にすることでプログラムを簡略化できます。Cなどの言語で関数に似た動きです。サンプルはGosubの例です。数字を入力するとサブルーチンで計算、印刷します。
プログラムを入力して実行をタップ:
実行結果:数字を入力するメッセージに数字を入力すると、計算して結果が印刷されます。それが2回繰り返されます。
条件が真の間、Repeatまでの処理を行います。条件が偽になるとRepeatの次から処理されます。
以下の例は、nが5以下ならnをプリントして5より大きい場合は終了をプリントしてプログラムが終わります。
プログラムを入力して実行をタップ:
実行結果:
Doの処理を行います。条件が真の場合はDoの処理を行い、条件が偽になるとUntilの次から処理されます。WhileとDoの違いは、Whileは最初に条件の真偽を確認しますので、最初に条件が偽なら何も処理されませんが、Doは処理が行われてから条件の真偽を確認しますので、条件が偽でも1回は処理がされるという事です。
以下の例は、先程のWhileのサンプルをDoに変更したものです。
プログラムを入力して実行をタップ:
実行結果:
変数nの値をxからyまでzを足しながら、nがyを超えるまでNextまでの処理を行います。処理されてからzが足され比較されます。While、Doループと異なるのは、ループ終了のための変数処理(前のサンプルのn=n+1とn>6)が不要な点です。
以下の例は、先程のWhileのサンプルをForに変更したものです。
プログラムを入力して実行をタップ:
実行結果:
繰り返し処理の途中で、処理をやめたりとかの説明は今回省いています。まずは、基本の使い方に慣れて頂いてから、今後の記事の中で補足していきます。
Time Year$, Month$, Day$, Hour$, Minute$, Second$, WeekDay, isDSTプログラム制御命令ではありませんが、次のやってみようで必要なのでTime命令を紹介します。この命令は現在の日時を知るために必要です。例えば、Time ,,,H$を実行すると、H$には現在の時間が文字列として入ります。
やってみよう
2018/6/14追記:if の条件が2つの時が今迄の記事で説明していませんでした。すみません。ここで補足します。2つの条件を満たす時は&を使います。例えば、jikanが5時台~9時台かどうかは if jikan >= 5 & jikan < 10 then です。
①If then elseif else endif を使って、現在の時刻を使って以下のプログラムを作ってみてください。
5時台~ 9時台:『おはよう』とプリント
10時台~17時台:『こんにちは』とプリント
18時台~1123時台:『こんばんは』とプリント
それ以外 :『早く寝ましょう』とプリント
ヒント:Time命令はプログラム完成後に使うと良いです。それまでは、プログラムの最初に変数で時間を指定してプログラムの動きを確認しながら作っていきます。例えば、H=5として、『おはよう』が正しく印刷できるようにします。全ての時間で上手くプリント出来たら、最後にH=xxをTime ,,,H$に置き換えてH=Val(H$)でH$を数字に変換します。
②どの繰り返し命令を使っても良いので、配列を使って以下のような結果になるプログラムを作って下さい。
1.日時
2.場所
3.議題
4.参加者
解答例は次の記事で紹介します。
コメントを書く