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