第4講 if文の学習
第11話 並び替えソース例
ソース例
#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^
e) {
int i,j,max,min,w;
//45行加える
for(i=0;i<45;i++)dataGridView1->Rows->Add();
//1行目 列見出し
dataGridView1[0,0]->Value =L"番号 ";
dataGridView1[1,0]->Value =L"国語 ";
dataGridView1[2,0]->Value =L"社会 ";
dataGridView1[3,0]->Value =L"数学 ";
dataGridView1[4,0]->Value =L"理科 ";
dataGridView1[5,0]->Value =L"社会 ";
dataGridView1[6,0]->Value =L"合計 ";
dataGridView1[7,0]->Value =L"平均 ";
dataGridView1[8,0]->Value =L"最高点 ";
dataGridView1[9,0]->Value =L"最低点 ";
dataGridView1[10,0]->Value =L"合否 ";
dataGridView1[11,0]->Value =L"順位 ";
dataGridView1[12,0]->Value =L"講評 ";
//出席番号とランダムデータの発生
for(i=1;i<=40;i++){
dataGridView1[0,i]->Value =i+L" ";
for(j=1;j<=5;j++){
dataGridView1[j,i]->Value =rand()%101;
}
}
//42行から45行 行見出し
dataGridView1[0,41]->Value =L"合計 ";
dataGridView1[0,42]->Value =L"平均 ";
dataGridView1[0,43]->Value =L"最高点 ";
dataGridView1[0,44]->Value =L"最低点 ";
//行(横)合計・平均・合否・講評の算出と表示
for(i=1;i<=40;i++){
//合計・平均の算出
w=0;
for(j=1;j<=5;j++){
w=w+(int)(dataGridView1[j,i]->Value);
}
//合計・平均の表示
dataGridView1[6,i]->Value=w;
dataGridView1[7,i]->Value=((double)w)/5;
//合否の表示
if(w>=250) dataGridView1[10,i]->Value=L"合格";
if(w<250) dataGridView1[10,i]->Value=L"不合格";
//講評の表示
if(w>=350){
dataGridView1[12,i]->Value=L"上位合格です。";
}
else{
if(w>=280){
dataGridView1[12,i]->Value=L"余裕で合格です。";
}
else{
if(w>=250){
dataGridView1[12,i]->Value=L"ぎりぎり合格です。";
}
else{
if(w>=230){
dataGridView1[12,i]->Value=L"合格まで後一歩。";
}
else{
dataGridView1[12,i]->Value=L"よく勉強して再挑戦!";
}
}
}
}
}
//教科合計・平均の算出と表示
for(i=1;i<=6;i++){
//合計・平均の算出
w=0;
for(j=1;j<=40;j++){
w=w+(int)(dataGridView1[i,j]->Value);
}
//合計・平均の表示
dataGridView1[i,41]->Value=w;
dataGridView1[i,42]->Value=w/40;
}
//各個人の最高点・最低点の算出と表示
for(i=1;i<=40;i++){
//各個人の最高点・最低点の算出
max=0; min=100;
for(j=1;j<=5;j++){
if((int)(dataGridView1[j,i]->Value)>max)max=(int)(dataGridView1[j,i]->Value);
if((int)(dataGridView1[j,i]->Value)<min)min=(int)(dataGridView1[j,i]->Value);
}
//各個人の最高点・最低点の表示
dataGridView1[8,i]->Value=max;
dataGridView1[9,i]->Value=min;
}
//各教科の最高点・最低点の算出と表示
for(i=1;i<=5;i++){
//各教科の最高点・最低点の算出
max=0; min=500;
for(j=1;j<=40;j++){
if((int)(dataGridView1[i,j]->Value)>max)max=(int)(dataGridView1[i,j]->Value);
if((int)(dataGridView1[i,j]->Value)<min)min=(int)(dataGridView1[i,j]->Value);
}
//各教科の最高点・最低点の表示
dataGridView1[i,43]->Value=max;
dataGridView1[i,44]->Value=min;
}
<//並び替え
int bn;
Object^ w1;
for(i=40;i>=2;i--){
min=500;
for(j=1;j<=i;j++){
if((int)(dataGridView1[6,j]->Value)<=min){
min=(int)(dataGridView1[6,j]->Value);
bn=j;
}
}
for(j=0;j<=12;j++){
w1=dataGridView1[j,bn]->Value; //キャストが必要ない
dataGridView1[j,bn]->Value=dataGridView1[j,i]->Value; //ここもキャストは必要ない
dataGridView1[j,i]->Value=w1; //ここもキャストは必要ない
}
}
}
};
}
初心者の方には、超難解ですね。
2次元ループだからです。(本日(2011/04/29)間違いを訂正)
第12話で解説していきますが、実行結果例を示しておきましょう。
確かに、合計得点順になっています。
順位をつけてもう1回番号順に並び直せば順位付けに成功します。
第10話へ 第12話へ
vc++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
数学研究室に戻る