第4講 if文の学習

第8話 最大値・最小値

プログラム例
#pragma endregion
    private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
            int i,j,max,min,w;  //申し訳ありません。< color="#ff0000">赤の部分を本日(2011/04/28)訂正させていただきました。
            
            //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"講評  ";

            //出席番号とランダムデータの発生
            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; //申し訳ありません。赤の部分を本日(2011/04/28)訂正させていただきました。

              //合否の表示
              if(w>=250) dataGridView1[10,i]->Value=L"合格";
              if(w<250) dataGridView1[10,i]->Value=L"不合格";

              //講評の表示
              if(w>=350){
                dataGridView1[11,i]->Value=L"上位合格です。";
              }
              else{
                if(w>=280){
                  dataGridView1[11,i]->Value=L"余裕で合格です。";
                }
                else{
                  if(w>=250){
                    dataGridView1[11,i]->Value=L"ぎりぎり合格です。";
                  }
                  else{
                    if(w>=230){
                      dataGridView1[11,i]->Value=L"合格まで後一歩。";
                    }
                    else{
                      dataGridView1[11,i]->Value=L"よく勉強して再挑戦!";
                    }
                  }
                }
              }
            }

            //教科合計・平均の算出と表示
            for(i=1;i<=5;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=100;
              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;
            }
          }
};
}

実行結果例
成績一覧表
成績一覧表詳細
成績一覧表詳細

では、皆さん最大値と最小値の求め方を参考に、
順位付けを考えてみましょう。
Form1に順位の列を付け加えます。
行の追加
列を追加して、Lに順位、Mに講評が出るようにします。
1行目

力自慢の方は、次の第9話を見ないでご自分の頭で考えていただいてもいいですが、
これは中級者の方でもかなりの難問だと思います。
第9話で考え方(ヒント)を詳しく説明しますので、
初心者の方は第9話を参照されることをお勧めします。

第7話へ 第9話へ

025


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

数学研究室に戻る