第4講 If文の学習
第11話 並び替えソース例
ソース例
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
'45行追加
For i = 1 To 45
DataGridView1.Rows.Add()
Next
'1行目に列見出しを入れる。
DataGridView1(0, 0).Value = "番号 "
DataGridView1(1, 0).Value = "国語 "
DataGridView1(2, 0).Value = "社会 "
DataGridView1(3, 0).Value = "数学 "
DataGridView1(4, 0).Value = "理科 "
DataGridView1(5, 0).Value = "英語 "
DataGridView1(6, 0).Value = "合計 "
DataGridView1(7, 0).Value = "平均 "
DataGridView1(8, 0).Value = "最高点"
DataGridView1(9, 0).Value = "最低点"
DataGridView1(10, 0).Value = "合否 "
DataGridView1(11, 0).Value = "講評 "
'41行から44行 行見出し
DataGridView1(0, 41).Value = "合計 "
DataGridView1(0, 42).Value = "平均 "
DataGridView1(0, 43).Value = "最高点"
DataGridView1(0, 44).Value = "最低点"
'出席番号とランダムデータの発生
For i = 1 To 40
DataGridView1(0, i).Value = i
For j = 1 To 5
DataGridView1(j, i).Value = Int(101 * Rnd())
Next
Next
'各生徒の5教科合計・平均・合否・講評の算出と表示
For i = 1 To 40
'合計・平均の算出
w = 0
For j = 1 To 5
w = w + DataGridView1(j, i).Value
Next
'合計・平均の表示
DataGridView1(6, i).Value = w
DataGridView1(7, i).Value = w / 5
'合否の表示
If w >= 250 Then
DataGridView1(10, i).Value = "合格"
Else
DataGridView1(10, i).Value = "不合格"
End If
'講評の表示
If w >= 350 Then
DataGridView1(11, i).Value = "上位合格です。"
Else
If w >= 280 Then
DataGridView1(11, i).Value = "余裕で合格です。"
Else
If w >= 250 Then
DataGridView1(11, i).Value = "ぎりぎり合格です。"
Else
If w >= 230 Then
DataGridView1(11, i).Value = "合格まで後一歩。"
Else
DataGridView1(11, i).Value = "よく勉強して再挑戦!"
End If
End If
End If
End If
Next
'教科合計・平均の算出と表示
For i = 1 To 5
'合計・平均の算出
w = 0
For j = 1 To 40
w = w + DataGridView1(i, j).Value
Next
'合計・平均の表示
DataGridView1(i, 41).Value = w
DataGridView1(i, 42).Value = w / 40
Next
'各生徒の最高点・最低点の算出と表示
Dim max As Integer, min As Integer
For i = 1 To 40
max = 0
min = 100
For j = 1 To 5
If DataGridView1(j, i).Value > max Then max = DataGridView1(j,
i).Value
If DataGridView1(j, i).Value < min Then min = DataGridView1(j,
i).Value
Next
DataGridView1(8, i).Value = max
DataGridView1(9, i).Value = min
Next
'各教科の最高点と最低点の算出と表示
For i = 1 To 5
max = 0
min = 100
For j = 1 To 40
If DataGridView1(i, j).Value > max Then max = DataGridView1(i,
j).Value
If DataGridView1(i, j).Value < min Then min = DataGridView1(i,
j).Value
Next
DataGridView1(i, 43).Value = max
DataGridView1(i, 44).Value = min
Next
'並び替え
Dim w1 As String, bn As Integer
For i = 40 To 2 Step -1
min = 500
For j = 1 To i
If DataGridView1(6, j).Value <= min Then
min = DataGridView1(6, j).Value
bn = j
End If
Next
For j = 0 To 12
w1 = DataGridView1(j, bn).Value
DataGridView1(j, bn).Value = DataGridView1(j, i).Value
DataGridView1(j, i).Value = w1
Next
Next
End Sub
End Class
初心者の方には、超難解ですね。
2次元ループだからです。
第12話で解説していきますが、実行結果例を示しておきましょう。
確かに、合計得点順になっています。
順位をつけてもう1回番号順に並び直せば順位付けに成功します。
VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
数学研究室に戻る