第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
    Next
iは、行数(といっても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=
の場合(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(デザイン)とコードを変更して、
ビルドして実行ボタンを押すと、
For文
になるようにしてください。


第8話へ 第10話へ

006


vc++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座

数学研究室に戻る