9Bの練習問題です。入門者向け。全部で5問です。
9Bの学習はもちろん、慣れている人はちょっとした頭の体操として軽く取り組んでみるのもよいかもしれません。できれば、9Bのプログラミングをやったことない、という人にもチャレンジしてもらいたいなー。
それぞれの問題には、行数に制限を設けています。1行目には REM 944BASIC '〜'、最終行にはKEYWAITを含めた行数です。また、マルチステートメントは無しとします。
ただし、入門者の方は、行数など気にせずに取り組んでください。
なお、実際には行数に少し余裕を持たせているものがほとんどなので、行数をあまり気にしなくても、自然に制限内に収まると思います。行数を超えてしまった場合は、どうやったら減らせるか考えてみるのもよいトレーニングです。
プログラムは各問題ごとに、9BQUIZQ1.BAS、9BQUIZQ2.BAS... のようなファイル名にしてください。これ以外のファイル名では、一部のプログラムがうまく動かない可能性があります。ご注意を。
各問題の下には、ヒントを記しています。マウスでドラッグするなどして、文字を選択した状態にすれば、読めるようになります。なるべくなら、最初はノー・ヒントで。
Q1. 1〜944の数字を足した合計値を表示するプログラムを書いてください。ただし、7行以内で。
ヒント 1
1+2+3+...+944 とやってもかまわないのですが、えらく大変です。そこで、繰り返しの処理(ループ)を使います。具体的にはFORというコマンドを使用します。
たとえば、
FOR I=1 TO 9
[処理]
NEXT I
とすると、[処理]を9回繰り返し、変数 I にはその都度、1、2...9 と順に数値が入ります。
ヒント 2
変数の使い方もポイントです。変数とは値を入れる箱のことです。C=3とすると、"C"という箱に"3"という数値が入ったことになります。
また、C=C+1 とすると、さっきまで C に入っていた値に1を足し、その値がCに入ります。
C=3
C=C+1
としたら、C には 4 が入ることになります。
ヒント 3
計算が無事に済んだら、結果を忘れずに表示してください。最後に一度だけ表示すればOKです。
Q2. □、△、○ の3項目のメニューが表示され、項目を選択すると画面の中央あたりに、その図形を描画するプログラムを作ってください。図形の大きさはおまかせします。20行以内。
ヒント 1
メニューの表示には、MENUコマンドを使用します。
ヒント 2
MENU を使うには、データを入れるための器として、配列を宣言する必要があります。DIMコマンドを使います。
配列というのは、共通性のあるデータを管理しやすいように、変数をグループにまとめて番号を付けたものです。
学校で言えば、出席番号を使って生徒の名簿を管理するような具合ですね。生徒数30名の「3年2組」の生徒名を配列で管理するとしましょう。その場合、たとえば DIM SAN2(29) とします。これで、変数SAN2(0)、SAN2(1)...SAN2(29)と、番号付きのSAN2変数が30個用意されたことになります。番号は0から始まるので、30個の変数がいる場合は、DIM SAN2(29) のように、1つ少ない数で宣言することになります。
で、たとえば「出席番号10番」に「田中」を指定する場合、SAN2(9)='田中' とすればよいことになります。
また、変数に文字を入れる場合、文字であることがわかるように ' ' (または" ")でくくる必要があります。ファイル名であれ、表示する文字であれ、文字列にはとにかく ' ' が必要と、心得てください。
ヒント 3
配列には、一度に複数の値を設定することができます。たとえば上の例なら、
DIM SAN2(29)='安部','安藤','池田',・・・・・・・・,'渡部'
としてやれば、SAN2(0)〜SAN2(29)まで一気に値を入れることができます。
ヒント 4
どのメニューを選択したかを知るには、MENUNOというコマンドを使います。たとえば、SLCT=MENUNOとすると、選択したメニューの番号が変数SLCTに入ります。
選択したメニューによって、それぞれ別の処理をさせるには、IFまたはIFBLKを使用します。今回はIFBLKを使用するのが、たぶん楽です。IFBLK には THEN がいらないので、注意してください。
ヒント 5
四角形はBOX、円はCIRCLEで描画できます。三角形は、LINEを使って線を3本描画するとよいでしょう。
Q3. 次のような内容のテキスト・ファイル 9BQUIZ.TXTがあります。このファイルの内容を画面に表示するプログラムを書いてください。10行以内。
なお、9BQUIZ.TXTは下の行を切り貼りして、自前で作成してください。
また、9BQUIZ.TXTの行数がわからなくても、だいじょうぶなようにプログラムを書いていただければ。
[9BQUIZ.TXT]
--ここから--
9B - 5つの練習問題 (入門編)
Q1. 計算、変数、制御構造(条件付きの繰り返し)、文字表示
Q2. 配列、メニュー、図形の描画
Q3. 配列とファイル操作
Q4. 変数、文字表示とキー(パッド)操作、制御構造(無限ループと条件判断)
Q5. 画像ファイルの表示、画面に表示された画像の移動
--ここまで--
ヒント 1
テキスト・ファイルの読み込みは、LOADTEXTというコマンドで行います。
ヒント 2
LOADTEXTを使うには、データを入れるための器として、配列を宣言する必要があります。LOADTEXTを実行すると、テキスト・ファイルが1行ずつ、配列変数の1つ1つに入ります。
今回の場合、ファイルの行数がわかっちゃってるわけですが、行数がわからなくてもだいじょうぶなように、配列の数は多めにしてください。この問題の場合は、画面に表示できる行数程度にしておけばよいでしょう。
ヒント 3
読み込んだテキスト・ファイルが何行だったかを知るには、GETREADCNTというコマンドを使います。たとえば、LOADTEXTを実行した直後に、ALL=GETREADCNT とすると、変数ALLにテキスト・ファイルの行数が入ります。
ヒント 4
配列の値を1つずつ順に表示するには、FOR文を使うとよいでしょう。配列0から、GETREADCNTで得た行数-1まで表示を繰り返すことになりますね。
Q4. 方向キーを押すと、その方向に☆が進んでいくプログラムを書いてください。ただし、上下左右の端を越えたら、反対側の端から☆が出てくるようにしてください。20行以内 (この問題のみ、最終行のKEYWAITは不要です)。
ヒント 1
文字の表示位置の指定は、LOCATE または GCURSOR を使用します。
☆の表示位置が変化するので、変数を使って位置を指定するようにします。
ヒント 2
何かを表示し"続ける"とか、キー入力を待ち"続ける"必要がある場合は、無限ループを使用するのが一つの方法です。無限ループは、たとえば次のようなコードになります。
*LOOP1
LOCATE 10,10
PRINT 'ずっと表示を繰り返す'
GOTO *LOOP1
※ WHILEを使って、より柔軟性を持たせつつ同様のことができますが、現時点ではまだ正式公開とは言えないので略します。
ヒント 3
方向キーの状態を知るには、PADX、PADYを使用します。
この際、ループ内で SYNC というコマンドを使用する必要があります。詳細については、リファレンス・マニュアルを参照してください。
ヒント 4
☆が移動するように見せるには、
1.今の場所の☆を消して
2.次の場所に☆を描く
という処理が必要です。
ヒント 5
端に来たかどうかを判断するには、現在位置が端の位置を上回っている(下回っている)かどうかを判断します。
条件判断には、IFまたはIFBLKを使用します
LOCATEの場合、左端の桁位置が0、右端が39になります。☆は全角文字なので、38桁を超えたら表示位置を0にするとよいでしょう。逆に0より小さくなった場合は、38にします。また、最上行は0、最下行は26になります
Q5.次のような画像(9BQUIZ.JPG、240x320)があります。この画像を画面に表示して、キーを押すと、上にずりずりとスクロールして消えるプログラムを作ってください。ずりずりの速度はおまかせします。10行以内。
9BQUIZ.JPG
ヒント 1
JPEG画像の表示には、JPEGというコマンドを使います。
ヒント 2
画面に表示された画像を動かすには、BOXMOVEコマンドを使います。構文が少しややこしいですが、リファレンス・マニュアルを参考に、試行錯誤してみてください。