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

1.Subブロック
【問題】
2つの引数を受け取りその2つの和を表示するサブルーチンを作り、実際にユーザーに2つの数字を入力してもらい、その2数の和を表示するプログラムを作ってみよう。
【解答例】
#console
Dim a As Long
Dim b As Long
Input "数字を2つ、コンマで区切って入力してください。", a, b
Add(a, b)
Sleep(3000)
End

Sub Add (ByVal a As Long, ByVal b As Long)
Print a+b
End Sub
【解説】
 大事なのは何よりもまずSubブロックの作り方と呼び出し方です。 これさえマスターすればあとは簡単にプログラムを組むことができます。 頑張ってマスターしましょう。

2.Functionブロック
【問題】
ユーザーに2つの数字を入力してもらい(以下順にa,bと表記)、aをbで割ったときの商と余りを、そういう機能を持つ関数を作った上で求めるプログラムを作ってみよう。 ただし、関数の戻り値は商の方で、a,bはグローバル変数の方を使って計算し、割り算はForループを使って行い、そしてbが0または負の数のときは戻り値として「-1」を返すようにしてください。
【解答例】
#console
Dim a As Long
Dim b As Long
Dim sho As Long
Dim amari As Long
Input "数字を2つ、コンマで区切って入力してください。", a, b
sho = ShoAmari(amari)
Print a; "÷"; b; "="; sho; "..."; amari
Sleep(3000)
End

Function ShoAmari (ByRef amari As Long) As Long
Dim i As Long
If b <= 0 Then
ShoAmari = -1
Exit Function
End If
amari = a
For i = 1 To (a / b)
amari = amari - b
Next
ShoAmari = i - 1
End Function
【解説】
 まずFunctionブロックの使い方をマスターしましょう。 分からなければ講座を読み返したり掲示板で質問したりしてみましょう。 そして次に重要なのは「グローバル変数」と「ローカル変数」、「参照型」と「値型」の区別がしっかりできるようになることです。 今回の問題は少し難しかったですが、問題文を読んで少しずつ確実にプログラムを組んでいけばいいです。 割り算にForループというのは、Forループを使って1つずつ割られる数から割る数を引いて割り算を行うという意味です。 これは計算効率がすごく悪い原始的な方法ですが、これで余りと商がいっきに求められます。 但し、Forループはiに1を足してから"a/b < i"の判定をするので、商を出すときに1を引くことを忘れないようにしてください。

3.算術関数
【問題】
ユーザーに3桁の数字を入力してもらい、各桁の合計を求めて表示するプログラムを作ってみましょう。 ただしユーザーが負の3桁の数字を入力した場合は、それの絶対値を使い各桁の合計を求め、それ以外の場合は「エラー」と表示するようにしてください。
【解答例】
#console
Dim a As Long
Input "3桁の数字を入力してください。", a
a = Abs(a)
If a < 100 Or a > 999 Then
Print "エラー"
Else
a = Fix(a / 100) + (Fix(a / 10) Mod 10) + (a Mod 10)
Print "各桁の合計は"; a; "です。"
End If
Sleep(3000)
End
【解説】
 今回は前回に比べればはるかに簡単だと思いますがどうでしょうか? 初めて出てきた算術関数をどれだけ使いこなせるようになるかがポイントです。 今回のポイントは数字を各桁ごとに分けることですが、ポイントは"Mod 10"です。 100や10で割ることで求める桁を1の位に持ってくるのですが、そのままだとその桁より上の桁が残っているので"Mod 10"(10で割った余り)を使ってやるのです。 ここさえ分かればあとは簡単だと思います。

4.文字列関数
【問題】
ユーザに数字を入力してもらい、その数字が左右対称(例えば「12321」など)か調べ、左右対称なら"○○は左右対称です。"、そうでないなら"○○は左右対称ではありません。"と表示するプログラムを作ってみましょう。 但しユーザが入力したのを受ける変数はDWord型を使ってください。
【ヒント】左右対称ということはその数字を逆から並べても元の数字と同じになります。
【解答例】
#console
Dim a As DWord
Dim b As String
Dim c As String
Dim i As Long
Input "数字を入力してください。", a
b = Str$(a)
For i = 0 To Len(b) - 1
c = c + Mid$(b, Len(b) - i, 1)
Next
If b = c Then
Print b + "は左右対称です。"
Else
Print b + "は左右対称ではありません。"
End If
Sleep(3000)
End
【解説】
 今回はいかにString型を操作できるかがポイントです。 特に入力された数字をどうやって逆に並び替えるかが重要ですが、これは入力された数字を逆から1文字ずつ取り出して順番に連結していくのが一番簡単で確実な方法です。 数字は半角数字、つまり1バイトなのでMid$の指定は1バイトずつになっています。 あと逆から取り出すとき文字列の長さを取得するLen関数をうまく利用しましょう。 あとは文字列変換にはStr$を使うことも重要なのでしっかり覚えておきましょう。


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

前に戻る - 次に進む

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