第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++入門基礎講座へ