第12講 様々な並び替えの方法
第1話 最大値・最小値

第11講では、並び替えや順位付(ランキング付)の様々な方法について学んでみましょう。
第10講の第4話から6話で、次のような成績一覧表のソフトを作りました。

第11講では、順位を付けたり、順位順に並べ替えたりする様々な方法について考えます。
その準備として第1話では、最高点・最低点を表示させる方法について考えましょう。
最大値・最小値に入る前に、各自このソリューションを改良して平均点が表示できるようにしましょう。

プログラム例
void gakki1(void){
  char i;
  char j;
  String^ w=L"";
  int yg;
  int tg;
  int yh;
  int th;

  w=w+L"1学期の成績\n";

  w=w+L"出席番号  国語  社会  数学  理科  英語 合計  平均\n";
  for(i=0;i<40;i++){
    if(i+1<10)w=w+L" 0"+(i+1).ToString()+L" ";
    if(i+1>=10)w=w+L" "+(i+1).ToString()+L" ";
    yg=0;
    for(j=0;j<5;j++){
      a[i][j]=rand() %100;
      yg=yg+a[i][j];
      if(a[i][j]<10)w=w+L"0"+(a[i][j]).ToString()+L" ";
      if((a[i][j]>=10) & (a[i][j]<100))w=w+(a[i][j]).ToString()+L" ";
    }

    if(yg<10)w=w+L"00"+yg.ToString()+L"   ";
    if((yg>=10) & (yg<100))w=w+L"0"+yg.ToString()+L"   ";
    if(yg>=100)w=w+yg.ToString()+L"   ";
    yh=yg/5;
    if(yh<10)w=w+L"0"+yh.ToString()+L"\n";
    if((yh>=10) & (yh<100))w=w+yh.ToString()+L"\n";

  }
  w=w+L" 合計 ";

  for(i=0;i<5;i++){
    tg=0;
    for(j=0;j<40;j++){
      tg=tg+a[j][i];
    }
    if(tg<10)w=w+L"000"+tg.ToString()+L" ";
    if((tg>=10) & (tg<100))w=w+L"00"+tg.ToString()+L" ";
    if((tg>=100) & (tg<1000))w=w+L"00"+tg.ToString()+L" ";
    if(tg>=1000)w=w+tg.ToString()+L" ";
  }
  w=w+L"\n";
  w=w+L" 平均 ";
  for(i=0;i<5;i++){
    tg=0;
    for(j=0;j<40;j++){
      tg=tg+a[j][i];
    }
    th=tg/40;
    if(th<10)w=w+L"0"+th.ToString()+L" ";
    if((th>=10) & (th<100))w=w+th.ToString()+L" ";

  }

  w=w+L"\n"+L"\n";
  label1->Text=w;
}

まず、次のようなデータの最大値と最小値を求めるにはどうしたらよいでしょうか。
a[0]=4 a[1]=6 a[2]=3 a[3]=2 a[4]=5
最大値をint Max;
最小値をint Min;
と定義することにします。
そして、Maxには考えられる限りの小さい値を入れておきます。成績一覧表のデータなら、Max=0当たりが妥当です。
逆にMinには考えられる限りの大きな値を入れておきます。成績一覧表のデータなら、Min=1000当たりが妥当です。
そして、順に比較していってMaxより大きい値が存在するときは、その値を改めてMaxの値とします。
Minのときは、Minより小さい値が存在するときには、その値を改めてMinの値とします。
比較は次のようにします。
if(a[0]>Max)Max=a[0];
if(a[0]<Min)Min=a[0];
これを繰り返していけば、最終的にはMaxは最大値になり、Minは最小値になります。


次のようなForm1を作り、

最大値・最小値のプログラミングに挑戦しましょう。

Form1ができたら、実行をダブルクリックして次のようにプログラムしましょう。
#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
         int a[5];
         int i;

         a[0]=int::Parse(textBox1->Text);
         a[1]=int::Parse(textBox2->Text);
         a[2]=int::Parse(textBox3->Text);
         a[3]=int::Parse(textBox4->Text);
         a[4]=int::Parse(textBox5->Text);

                  ・
                  ・
                  ・

      }
};
}
省略されている部分はもちろんfor文で行ってください。

さらに、データ入力が面倒な方は、データを自動発生させましょう。
それも考えてください。
因みにこの課題は、if文のところで一回学習しています。

第11講第6話へ 第12講第2話へ 第13講第1話へ


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