OriosのActiveBasic講座(1-2):やってみようの答え(1-2)

1.Ifブロック
【問題】
「1+2+3+4+5+6+7+8+9+10」の答えを入力してもらい、その答えを下の表と照らし合わせて結果を表示するプログラムを作ってみよう。

入力された答え表示するメッセージ
45以上55未満(45は含むが55は含まない)おしい。もう少し上だよ。
55お見事!ひょっとして天才?×
55を超え65以下(55は含まないが65は含む)おしい。もう少し下だよ。
それ以外「よーく考えよー。計算大事だよ。」
【解答例】
#console
Dim a As Long
Input "1+2+3+4+5+6+7+8+9+10=",a '問題の出し方はどのようにしても構いません
'If 45<=a<55 Then
If 45<=a And a<55 Then '2004年3月23日訂正(上の間違えのように複数の演算子によって一括して条件を指定することはできません。下も同じです。)
Beep
Print "おしい。もう少し上だよ。"
ElseIf a=55 Then
Print "お見事!ひょっとして天才?"
'ElseIf 55<a<=65 Then
ElseIf 55<a And a<=65 Then '2004年3月23日訂正
Beep
Print "おしい。もう少し下だよ。"
Else
Beep
Print "よーく考えよー。計算大事だよ。"
EndIf
Sleep(3000)
End
【解説】
 Ifブロックを使うときに大事なのことは、 「場合分けに必要な条件とそのときに行う動作をきちんと把握しておく」ことです。 今回の場合は、まず入力された値をきちんと場合分けできるか(条件式はきちんと作れましたか?)、 そしてそれぞれの条件に合った適切な文字を表示させれるかが重要なポイントになっています。 特に「それ以外」というところは、最後にElseを使うことに注意してください。

2.Whileループ
【問題】
数字を2つ入力してもらい、その和の数だけ「*」を表示させるプログラムを作ってみよう。 但し2つの数字の和が100を超えていたら「*」を100個表示した後に、 「これ以上は表示できません。」と表示するようにしましょう。
【解答例】
#console
Dim a As Long
Dim b As Long
Dim i As Integer
Input "数字を2つ、コンマで区切って入力してください。",a,b
While i<100 and i<a+b '始めにi=1を代入しておいてi<=100,i<=a+bにするのも可
Print "*"; '横に「*」並べるのなら最後に「;」をつけましょう
i=i+1
WEnd
If a+b>100 Then
Print "これ以上は表示できません。"
EndIf
Sleep(3000)
End
【解説】
 「Whileループ」のポイントは「いつループを抜けるか」ということです。 この場合「*」を表示させるためにWhileを使っていますが、 抜けるタイミングは「ループを100回繰り返した(101回目をやろうとしている)」ときか、 「ループを2つの数の和のぶん繰り返した」ときかのどちらかです。 そのタイミングを判断するために「変数i」を使っていますが、 重要なのは「i=i+1」を忘れないことです。 これを忘れるといつまで経ってもプログラムが終わりません。 あと和が100以上のときのメッセージもお忘れなく。

3.Doループ
【問題】
 ユーザーに、「0」を打つまで数字を何回も入力してもらい、 ユーザーが「0」を入力したら、今まで打ってきた数字の総計を表示するプログラムを作ってみよう。
【解答例】
#console
Dim a As Long
Dim b As Long
Print "数字を入力してください。但し0を入力すれば終わります。"
Do
Input a
b=b+a
Loop Until a=0
Print b
Sleep(3000)
End
【解説】
 DoループもWhileループと同じように「いつループを抜けるか」がポイントになります。 しかしDoループにはWhileループの注意点に加え、Untilを使うかWhileを使うかを判断するというところもポイントです。 今回は「入力された数が0になるまで」なのでUntilを使います。 もし「入力された数が0である」ならば、Whileを使います。

4.Forループ
【問題】
 100までの数の中で、2の倍数でも3の倍数でもない数のみ表示するプログラムを作ってみよう。 ただし、Continueを使ってください。
【解答例】
#console
Dim i As Long
For i=1 To 100 '"Step 1"を書いてもOK
If (i Mod 2=0) Or (i Mod 3=0) Then
Continue
EndIf
Print i
Next
Sleep(3000)
End
【解説】
 ポイントは「Forループを正しく使えるか」「Continueを正しい位置に使えるか」の2つです。 Forループはとにかく形を覚えることです。これさえできればあとはWhileループなどよりも簡単に使えるようになります。 問題はContinueのほうで結構難しいかと思います。 原則はとにかく「もっとも内側のループの残りをすっ飛ばしてそのループの始めに戻る」です。 もし今何を言っていたのか不安な人はもう一回lesson1-2-4[2]を見て確認してください。 それでも分からないときは気軽に掲示板で質問してください。

5.SelectCaseブロック
【問題】
「1+1」という問題を出し、「2」と答えたら「正解」、「1」もしくは「3」と答えた場合は「おしい」、 その他を答えた場合は「残念」と表示するプログラムを作ってみよう。 ただし結果は入力された場所から2行下(=1行間を空けて)表示するようにしてください。
【解答例】
#console
Dim a As Long
Input "1+1=",a
Locate 0,2
SelectCase a
Case 2
Print "正解"
Case 1
Print "おしい"
Case 3
Print "おしい"
Case Else
Print "残念"
EndSelect
Sleep(3000)
End
【解説】
 SelectCaseで注意することはIfブロックとほぼ同じです。 つまり「場合分けに必要な値とそのときに行う動作をきちんと把握しておく」です。 この場合は「入力された値をどのように場合分けするか」「それぞれの場合にどのメッセージを表示するか」の2点です。 またSelectCaseブロックではElseが特殊なのできちんと理解しておきましょう。


ご質問・ご意見・ご感想・苦情等はメールまたはメイン掲示板のActiveBasic板などでお気軽にどうぞ。

前に戻る - 次に進む

ホーム > OriosのActiveBasic講座(トップページ) >