第6講 For文以外の繰り返し処理
第5話 While文とDo...Loop While文による2次元ループ
While文による2次元ループ例
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
'変数の宣言
Dim a(4, 4) As Integer, b(4, 4) As Integer, i As Integer, j As Integer,
w As String
'自然行列の発生
i = 0
While i < 5
j = 0
While j < 5
a(i, j) = i * 5 + j + 1
j = j + 1 'これを忘れると永久ループになる
End Loop
i = i + 1
End Loop
'転置行列の発生
i = 0
While i < 5
j = 0
While j < 5
b(j, i) = i * 5 + j + 1
j = j + 1
End Loop
w = w & vbNewLine
i = i + 1
End Loop
'自然行列の表示
w = ""
i = 0
While i < 5
j = 0
While j < 5
If a(i, j) < 10 Then w = w + "0" + a(i, j).ToString
+ " "
If a(i, j) >= 10 Then w = w + a(i, j).ToString + " "
j = j + 1
End Loop
w = w & vbNewLine
i = i + 1
End Loop
Label1.Text = w
'転置行列の表示
w = ""
i = 0
While i < 5
j = 0
While j < 5
If b(i, j) < 10 Then w = w + "0" + b(i, j).ToString
+ " "
If b(i, j) >= 10 Then w = w + b(i, j).ToString + " "
j = j + 1
End Loop
w = w & vbNewLine
i = i + 1
End Loop
Label2.Text = w
'自然行列と転置行列の和表示
w = ""
i = 0
While i < 5
j = 0
While j < 5
If a(i, j) + b(i, j) < 10 Then w = w + "0" + (a(i,
j) + b(i, j)).ToString + " "
If a(i, j) + b(i, j) >= 10 Then w = w + (a(i, j) + b(i, j)).ToString
+ " "
j = j + 1
End Loop
w = w & vbNewLine
i = i + 1
End Loop
Label3.Text = w
End Sub
End Class
Do...Loop While文による2次元ループ例
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
'変数の宣言
Dim a(4, 4) As Integer, b(4, 4) As Integer, i As Integer, j As Integer,
w As String
'自然行列の発生
i = 0
Do
j = 0
Do
a(i, j) = i * 5 + j + 1
j = j + 1 'これを忘れると永久ループになる
Loop While j < 5
i = i + 1
Loop While i < 5
'転置行列の発生
i = 0
Do
j = 0
Do
b(j, i) = i * 5 + j + 1
j = j + 1
Loop While j < 5
w = w & vbNewLine
i = i + 1
Loop While i < 5
'自然行列の表示
w = ""
i = 0
Do
j = 0
Do
If a(i, j) < 10 Then w = w + "0" + a(i, j).ToString
+ " "
If a(i, j) >= 10 Then w = w + a(i, j).ToString + " "
j = j + 1
Loop While j < 5
w = w & vbNewLine
i = i + 1
Loop While i < 5
Label1.Text = w
'転置行列の表示
w = ""
i = 0
Do
j = 0
Do
If b(i, j) < 10 Then w = w + "0" + b(i, j).ToString
+ " "
If b(i, j) >= 10 Then w = w + b(i, j).ToString + " "
j = j + 1
Loop While j < 5
w = w & vbNewLine
i = i + 1
Loop While i < 5
Label2.Text = w
'自然行列と転置行列の和表示
w = ""
i = 0
Do
j = 0
Do
If a(i, j) + b(i, j) < 10 Then w = w + "0" + (a(i,
j) + b(i, j)).ToString + " "
If a(i, j) + b(i, j) >= 10 Then w = w + (a(i, j) + b(i, j)).ToString
+ " "
j = j + 1
Loop While j < 5
w = w & vbNewLine
i = i + 1
Loop While i < 5
Label3.Text = w
End Sub
End Class
(すみません。2017/10/04に西 純一さんから間違いを指摘されて、
2017/10/05に訂正しました。
ピンクは本質的な間違いで、
青はケアレスミスです。
ミスのご指摘に心より感謝致します。)
今回の例では、While文とDo...Loop While文ではまったく差がありませんでした。
結局、問題の種類よっては、どちらでもよいもの、前判定のWhile文と方が向いているもの、Do...Loop While文の方が向いているもの
があることになります。
また、2次元ループはFor文を用いなくても作れることがわかりました。
本質的には、While文とDo...Loop While文はFor文と同じです。
では、今回作ったWhile文とDo...Loop While文の2次元ループをfor文に書き換えてみましょう。
解答例は、30行下。
解答例
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
'変数の宣言
Dim a(4, 4) As Integer, b(4, 4) As Integer, i As Integer, j As Integer,
w As String
'自然行列の発生
For i = 0 To 5
For j = 0 To 5
a(i, j) = i * 5 + j + 1
Next
Next
'転置行列の発生
For i = 0 To 5
For j = 0 To 5
b(j, i) = i * 5 + j + 1
Next
w = w & vbNewLine
Next
'自然行列の表示
w = ""
For i = 0 To 5
For j = 0 To 5
If a(i, j) < 10 Then w = w + "0" + a(i, j).ToString
+ " "
If a(i, j) >= 10 Then w = w + a(i, j).ToString + " "
Next
w = w & vbNewLine
Next
Label1.Text = w
'転置行列の表示
w = ""
For i = 0 To 5
For j = 0 To 5
If b(i, j) < 10 Then w = w + "0" + b(i, j).ToString
+ " "
If b(i, j) >= 10 Then w = w + b(i, j).ToString + " "
Next
w = w & vbNewLine
Next
Label2.Text = w
'自然行列と転置行列の和表示
w = ""
For i = 0 To 5
For j = 0 To 5
If a(i, j) + b(i, j) < 10 Then w = w + "0" + (a(i,
j) + b(i, j)).ToString + " "
If a(i, j) + b(i, j) >= 10 Then w = w + (a(i, j) + b(i, j)).ToString + " "
Next
w = w & vbNewLine
Next
Label3.Text = w
End Sub
End Class
結局、For文、While文、Do...Loop While文は対して違いがないんじゃないの?
それだったら、記述が簡単なFor文オンリーに絞った方がいいじゃないの?
こうした疑問があると思います。
For文・While文・Do...While文の関係について、次話で考えてみたいと思います。
尚、第6講は第6話で終了の予定です。
ですから、次話が終われば卒業までは後4講ということになります。
ここまでついてこられた初心者の皆さんに敬意を表するともに、是非最後までのおつきあいをお願いいたします。
がんばりましょう!
VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
数学研究室に戻る