§2 トレース(1)1 | プログラミング実習 |
プログラムが実行される順を追跡したり、実行されていく過程で、変数の値の変化を調べることをトレースという。ここでは、トレースの方法について学習する。また、同じ処理を繰り返す制御文である「For〜Next」についても学習する。
利用するオブジェクト等 |
ラベル(Label) |
【1】 人間がトレースする方法
トレースのサンプルとして、フォームにボタン(Button1)とラベル(Label1)オブジェクトを1つずつ重ならないように配置し、次のプログラムを入力したとする。
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click
Dim n As Integer, goukei As Integer
'#0
For n = 1 To 5
'#1
goukei = goukei + n
'#2
Next
'#3
Label1.Text = "結果は、" & goukei
& " です。" '#4
End Sub
文字列1 & 文字列2 文字列1 と文字列2 を連結する演算子である。
#4の行で、今、変数goukeiの値が15のとき、"結果は、" と 15 と " です。"の3つの文字が連結されて、"結果は、15 です。"という1つの文字になり、Label1.Textに格納される。
○ 繰り返し
For 変数 = 始値 To 終値 [Step 増分] 〜 Next ForとNextの間を繰り返す制御文である。変数 は制御変数と呼ばれ繰り返し回数を監視する。この変数 が始値 から終値 になるまで繰り返す。繰り返すごとに変数 は1ずつ増加する。
[ ]内のStep 増分 は繰り返すごとに変数 を増加させる値であるが、省略することができる。省略した場合の増分 は1となる。
#1と#3の行の「For n = 1 To 5 〜 Next」は"Step 増分"を省略した書き方である。したがって、増分は1となる。繰り返すごとに変数nの値が1,2,3,4,5と変化するので5回繰り返すことになる。
For文の書き方(繰り返しの回数は、すべて5回である。)
@ xは、1,2,3,4,5 と変化する。
For x = 1 To 5
処理
NextA xは、10,11,12,13,14 と変化する。
For x = 10 To 14
処理
NextB xは、0,2,4,6,8 と変化する。
For x = 0 To 8 Step 2
処理
NextC xは、5,4,3,2,1 と変化する。
For x = 5 To 1 Step -1
処理
Next5回の繰り返しが終わったあと、xは増分だけ加算された値となる。
最終的に、@はx = 6、Aはx = 15、Bはx = 10、Cはx = 0となる。
○ トレース
前のプログラムを見ながらトレースをする。各行に#0〜#4の通し番号を付け、どの行を実行しているかわかるようにしている。#0行は変数の宣言だけで数値型の変数は0で初期化される。
次の表は、実行される順を追いながら、各行が実行されたあとの変数の値を記録したものである。空欄を埋めよ。
変数 #0 #1 #2 #3 #1 #2 #3 #1 #2 #3 #1 #2 #3 #1 #2 #3 #1 #4 n 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 goukei 0 0 1 1 1 3 3 3 6 6 6 10 10 10 15 15 15 15
トレースによって最終的に変数goukeiの値は15になり、ラベル(Label1)に表示されることがわかる。また、このプログラムは「1から5までの和を計算する」ものであることもわかる。
ただし、この方法では限界がある。例えば、"For n = 1 To 1000"の場合、変数の値の変化を記録していくことは難しい。しかし、ある程度トレースしていけば何をするプログラムかわかってくることもある。
【2】 トレースのための命令を追加する方法
トレースする過程で知りたい情報は多くの場合、変数の値である。変数の値を表示する命令があれば、その命令を使って表示させる。ただし、トレースが完了した後には削除する必要がある。
トレース専用の命令ではないが、VBにはメッセージを表示するためにMsgBoxという命令がある。
MsgBox(値 ) Microsoft.VisualBasic.MsgBox() MessageBox.Show(値 ) ダイアログ(別のウィンドウ)を開き、値 をメッセージとして表示する。
他にもいろいろな動作をさせることができる。詳しくはヘルプを参照のこと。
プログラムの実行順はわかるが、実行中の変数の値をトレースしたいときなどに利用できる。
同じ「1から5までの和を計算する」プログラムを使ってトレースする。調べる変数はnとgoukeiとし、メッセージ(変数の値)を表示する命令を合計計算の後に追加する。
操作 1 新しいプロジェクトを「実習2トレース」という名前で作成する。フォーム(Form1)のプロパティを次のように設定する。
Text 実習2トレース
操作 2 フォームにボタン(Button1)とラベル(Label1)オブジェクトを1つずつ重ならないように配置する。配置場所、大きさは適当でよい。
操作 3 [Button1]ボタンのクリックイベントに対応するメソッドを次のように作成する。
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click
Dim n As Integer, goukei As Integer
For n = 1 To 5
goukei = goukei + n
MsgBox("n=" & n & "△△goukei=" & goukei) '△は半角空白
Next
Label1.text = "結果は、" & goukei
& "△です。"
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim n As Integer, goukei As Integer
For n = 1 To 5
goukei = goukei + n
MessageBox.Show("n=" & n & "△△goukei=" & goukei) '△は半角空白
Next
Label1.text = "結果は、" & goukei & "△です。"
End Sub
実行して[Button1]ボタンをクリックすると、実行中の変数の値がメッセージボックスに表示される。[OK]ボタンをクリックすると順に表示される。(図参照)
操作 4 トレースが完了したので、プログラムの下線部を削除する。
プログラムは、繰り返し回数が5回であるので、メッセージが表示されるたびに[OK]ボタンをクリックしてもそれほど手間ではない。しかし、1から1000までの和を計算するプログラムで、800回目(n=800)の変数goukeiの値を調べたいとき、800回もクリックすることは困難である。このようなときは、If文とあわせて使用すると良い(If文は次回に説明する)。
参考 繰り返し回数が800回目の変数nとgoukeiの値を表示する。
For n = 1 To 1000
goukei = goukei + n
If n = 800 Then ↓n=800のときだけ実行される。
MsgBox("n=" & n & " goukei=" & goukei)
End If
Next
○ デバッグ用の命令
プログラムの間違いをバグといい、このバグを取り除くことをデバッグという。VBには、デバッグをするための命令が用意されている。
Debug.Print(値 ) |
値 をイミディエイト ウィンドウに表示する。 |
操作 5 MsgBox命令をDebug.Printに書き換える。
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click
Dim n As Integer, goukei As Integer
For n = 1 To 5
goukei = goukei + n
Debug.Print("n=" & n & "△△goukei=" & goukei) '△は半角空白
Next
label1.text = "結果は、" & goukei
& "△です。"
End Sub
実行して[Button1]ボタンをクリックすると、実行中の変数の値が右のように、イミディエイト ウィンドウに表示される。
イミディエイト ウィンドウは、VBウィンドウの下部に表示される。
n=1 goukei=1 n=2 goukei=3 n=3 goukei=6 n=4 goukei=10 n=5 goukei=15 |
§2 トレース(1)1 | Copyright©2008,2009 Hiroshi Masuda |