第3講 For文の学習
第9話 合計・平均のプログラムと解説
前話問題解答例
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
'変数の宣言
Dim i As Integer, j As Integer, w As Integer
'6行追加
For i = 1 To 6
DataGridView1.Rows.Add()
Next
'1行目に列表題を入れる。
DataGridView1(3, 0).Value = "合計 "
DataGridView1(4, 0).Value = "平均 "
'5行目,6行目に行表題を入れる。
DataGridView1(0, 4).Value = "合計 "
DataGridView1(0, 5).Value = "平均 "
'2次元データを入力
For i = 1 To 3
For j = 1 To 2
DataGridView1(j, i).Value = 2 * i + j + 1
Next
Next
'行の合計と平均の計算と表示
For i = 1 To 3
w = 0
For j = 1 To 2
w = w + DataGridView1(j, i).Value
Next
DataGridView1(3, i).Value = w
DataGridView1(4, i).Value = w / 2
Next
'列の合計と平均の計算と表示
For i = 1 To 2
w = 0
For j = 1 To 3
w = w + DataGridView1(i, j).Value
Next
DataGridView1(i, 4).Value = w
DataGridView1(i, 5).Value = w / 2
Next
End Sub
End Class
プログラム解説
行合計・行平均について解説しますので、縦合計・縦平均についてはご自分でトレースして下さい。
'行の合計と平均の計算と表示
For i = 1 To 3
w = 0
For j = 1 To 2
w = w + DataGridView1(j, i).Value
Next
DataGridView1(3, i).Value = w
DataGridView1(4, i).Value = w / 2
Nextiは、行数(といっても0からはじめっているのでi=1は2行目を意味しています。)で、
jは列数(こちらも同じでj=1なら、2列目です。)に対応します。
注意しなければならないのは、
'行の合計と平均の計算と表示
w = 0
For i = 1 To 3
For j = 1 To 2
w = w + DataGridView1(j, i).Value
Next
DataGridView1(3, i).Value = w
DataGridView1(4, i).Value = w / 2
Next
ではだめだということです。プログラミング歴20年の私でも時々このミスをしてしまいます。
1行計算する度に、もう一度wを0に戻さないとすべて積算されてしまいます。
逆にすべての表の中の数字を足したいときは、このようにします。
トレースしてみましょう。
T i=1の場合(2行目の行合計の計算)
w=0からwは0となります。
@ j=1のとき、
w=w+DataGridView1(1,1).Value
によって、w←0+4でw=4となりました。
A j=2のとき、
w=w+DataGridView1(2,1).Value
によって、w←4+5でw=9となりました。
そして、
DataGridView1(3,1).Value=w
DataGridView1(4,1).Value=w/2
より、合計と平均に値が入ります。
これで、iの方の1回目のループが終了します。
U i=2の場合(3行目の行合計の計算)
w=0からwは0となります。
@ j=1のとき、
w=w+DataGridView1(1,2).Value
によって、w←0+6でw=6となりました。
A j=2のとき、
w=w+DataGridView1(2,2).Value
によって、w←6+7でw=13となりました。
そして、
DataGridView1(3,2).Value=w
DataGridView1(4,2).Value=w/2
より、合計と平均に値が入ります。
これで、iの方の2回目のループが終了します。
(再掲)
V i=3の場合(3行目の行合計の計算)
w=0からwは0となります。
@ j=1のとき、
w=w+DataGridView1(1,3).Value
によって、w←0+8でw=8となりました。
A j=2のとき、
w=w+DataGridView1(2,3).Value
によって、w←8+9でw=16となりました。
そして、
DataGridView1(3,3).Value=w
DataGridView1(4,3).Value=w/2
より、合計と平均に値が入ります。
これで、iの方の3回目のループが終了します、すべての行が合計されfor文が終了となります。
それでは、皆さん課題を出してこの話を閉じます。
Form1(デザイン)とコードを変更して、
ビルドして実行ボタンを押すと、
になるようにしてください。
vc++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
数学研究室に戻る