第12講 様々な並び替えの方法
第2話 並び替えその1
前話解答例
#pragma once
#include<stdlib.h>
namespace o {
.
.
.
#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^
e) {
int a[5];
ds(a,5);
Mx(a,5);
Mn(a,5);
}
void ds(int* p,int n){
int i;
for(i=0;i<n;i++){
p[i]=rand() % 100;
}
textBox1->Text=(p[0]).ToString();
textBox2->Text=(p[1]).ToString();
textBox3->Text=(p[2]).ToString();
textBox4->Text=(p[3]).ToString();
textBox5->Text=(p[4]).ToString();
}
void Mx(int* p,int n){
int i;
int Max=0;
for(i=0;i<n;i++){
if(p[i]>Max)Max=p[i];
}
textBox6->Text=Max.ToString();
}
void Mn(int* p,int n){
int i;
int Min=100;
for(i=0;i<n;i++){
if(p[i]<Min)Min=p[i];
}
textBox7->Text=Min.ToString();
}
};
}
(コピーペースト用
#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
int a[5];
ds(a,5);
Mx(a,5);
Mn(a,5);
}
void ds(int* p,int n){
int i;
for(i=0;i<n;i++){
p[i]=rand() % 100;
}
textBox1->Text=(p[0]).ToString();
textBox2->Text=(p[1]).ToString();
textBox3->Text=(p[2]).ToString();
textBox4->Text=(p[3]).ToString();
textBox5->Text=(p[4]).ToString();
}
void Mx(int* p,int n){
int i;
int Max=0;
for(i=0;i<n;i++){
if(p[i]>Max)Max=p[i];
}
textBox6->Text=Max.ToString();
}
void Mn(int* p,int n){
int i;
int Min=100;
for(i=0;i<n;i++){
if(p[i]<Min)Min=p[i];
}
textBox7->Text=Min.ToString();
}
};
}
)
第1話のソフトを改良して、
実行を押すと、小さい順ににデータを並び替えられるようにしましょう。
先の、最小値を求めるプログラムを利用します。
最初にデータ5つの中から最小値を求め、それを除外し対象を4つに絞る。
次に、4つから最小値を求め、それを除外し対象を3つに絞る。
以下同様に繰り返せばできます。解答例はいつもの通り、20行程度下にあります。
#pragma once
#include<stdlib.h>
const int N=5;
namespace o {
.
.
.
#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^
e) {
int a[N];
ds(a,N);
char i,j;
int w;
Mx(a,N);
for(i=0;i<4;i++){
for(j=i;j<N;j++){
ikn=Mn(a,i);
}
w=a[i];
a[i]=a[ikn];
a[ikn]=w;
}
hj(a,N);
}
void ds(int* p,int n){
int i;
for(i=0;i<n;i++){
p[i]=rand() % 100;
}
textBox1->Text=(p[0]).ToString();
textBox2->Text=(p[1]).ToString();
textBox3->Text=(p[2]).ToString();
textBox4->Text=(p[3]).ToString();
textBox5->Text=(p[4]).ToString();
}
void Mx(int* p,int n){
int i;
int Max=0;
for(i=0;i<n;i++){
if(p[i]>Max){
Max=p[i];
}
}
textBox6->Text=Max.ToString();
}
char Mn(int* p,int n){
int i,ik;
int Min=100;
for(i=n;i<N;i++){
if(p[i]<Min){
Min=p[i];
ik=i;
}
}
if(n==0)textBox7->Text=Min.ToString();
return(ik);
}
void hj(int* p,int n){
char i;
String^ w=L"";
for(i=0;i<N;i++)w+=(p[i]).ToString()+L" ";
textBox8->Text=w;
}
}
};
}
(コピーペースト用
#pragma once
#include<stdlib.h>
const int N=5;
namespace o {
.
.
.
#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
int a[N];
ds(a,N);
char i,j;
int w;
char ikn;
Mx(a,N);
for(i=0;i<4;i++){
for(j=i;j<N;j++){
ikn=Mn(a,i);
}
w=a[i];
a[i]=a[ikn];
a[ikn]=w;
}
hj(a,N);
}
void ds(int* p,int n){
int i;
for(i=0;i<n;i++){
p[i]=rand() % 100;
}
textBox1->Text=(p[0]).ToString();
textBox2->Text=(p[1]).ToString();
textBox3->Text=(p[2]).ToString();
textBox4->Text=(p[3]).ToString();
textBox5->Text=(p[4]).ToString();
}
void Mx(int* p,int n){
int i;
int Max=0;
for(i=0;i<n;i++){
if(p[i]>Max){
Max=p[i];
}
}
textBox6->Text=Max.ToString();
}
char Mn(int* p,int n){
int i,ik;
int Min=100;
for(i=n;i<N;i++){
if(p[i]<Min){
Min=p[i];
ik=i;
}
}
if(n==0)textBox7->Text=Min.ToString();
return(ik);
}
void hj(int* p,int n){
char i;
String^ w=L"";
for(i=0;i<N;i++)w+=(p[i]).ToString()+L" ";
textBox8->Text=w;
}
};
}
)
プログラムの解説は次話で行いまが、冒頭においてconst int N=5;としたのは
将来、データ数を一般化するためです。
また、w+=(p[i]).ToString()+L" ";という書き方は、今まで使ってきませんでしたが、
w=w+(p[i]).ToString()+L" ";と同じです。
a=a+bをC言語では略して、a+=bと書くのです。
これからは、このような略した書き方をしばしば使いますので、是非とも覚えてください。
本来ここでの目的は、40人のデータの並び替えることでした。データ数が40ならconst
int N=40;とすればよいのです。
constは定数を意味します。
ところで、小さい順に並べましたが、大きい順に並べ替えるにはどうしたらよいでしょうか。
第11講第6話へ 第12講第1話へ 第12講第3話へ 第13講第1話へ
vc++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ