第16講 データの並び換えに挑戦!

第4話 最大値を見つけるコード
実行画面
11 5 12 9 9 10 14 2 4 2
データの最小値は14です。
データの最大値は2です。
プロジェクト終了

を実現するプログラム例
#include<stdio.h>
#include<stdlib.h>
#include <time.h>
void f(int a[10]); //1桁のランダムデータを発生させる社員
char g(int a[10]); //データの1番小さい値を見つける社員
void h(int a[10]); //データ表示させる社員
char x(int a[10]); //データの1番大きい値を見つける社員
int main(){
  int a[10],w;
  srand((unsigned) time(NULL));
  f(a);
  h(a);
  w=g(a);
  printf("データの最小値は%dです。\n",a[w]);
  w=i(a);
  printf("データの最大値は%dです。\n",a[w]);
  printf("プロジェクト終了\n");
}
void f(int a[10]){
  int i;
  for(i=0;i<10;i++){
    a[i]=rand()%20;
  }
}
char g(int a[10]){
  int i,ik,mn;
  mn=0;
  for(i=0;i<10;i++){
    if(mn<a[i]){
      mn=a[i];
      ik=i;
    }
  }
  return(ik);
}
void h(int a[10]){
  int i;
  for(i=0;i<10;i++){
    printf("%d ",a[i]);
  }
  printf("\n");
}
char x(int a[10]){
  int i,ik,mx;
  mx=10;
  for(i=0;i<10;i++){
    if(mx>a[i]){
      mx=a[i];
      ik=i;
    }
  }
  return(ik);
}
最大値も探すプログラム

では、
いよいよデータを小さい順と大きい順に並び換えることに挑戦しましょう。
といってもノーヒントでは、初心者にはかなり難しいですから、
枠組みを与えておきます。
#include<stdio.h>
#include<stdlib.h>
#include <time.h>
void f(int a[10]); //1桁のランダムデータを発生させる社員
char g(int a[10],int n); //データの1番小さい値を見つける社員
void h(int a[10]); //データ表示させる社員
char x(int a[10],int n); //データの1番大きい値を見つける社員
void j(int a[10]); //xを利用してデータを小さい順に並べ直す社員
void k(int a[10]); //gを利用してデータを大きい順に並べ直す社員
void cp(int a[10],int b[10]); //データのコピーを行う社員 aをbにコピー
int main(){
  int a[10],b[10],c[10],w;
  srand((unsigned) time(NULL));
  f(a);
  cp(a,b);
  cp(a,c);
  h(a);
  w=g(a,0);
  printf("データの最小値は%dです。\n",a[w]);
  w=x(a,10);
  printf("データの最大値は%dです。\n",a[w]);
  j(b);
  printf("小さい順に並び換え\n");
  h(b);
  k(c);
  printf("大きい順に並び換え\n");
  h(c);
  printf("プロジェクト終了\n");
}
void f(int a[10]){
  int i;
  for(i=0;i<10;i++){
    a[i]=rand()%20;
  }
}
void cp(int a[10],int b[10]){ //データのコピーを行う社員 aをbにコピー

}
char g(int a[10],int n){ //データの1番小さい値を見つける社員
  int i,ik,mn;
  mn=0;
  for(i=n;i<10;i++){
    if(mn<a[i]){
      mn=a[i];
      ik=i;
    }
  }
  return(ik);
}
void h(int a[10]){ //データ表示させる社員
  int i;
  for(i=0;i<10;i++){
    printf("%d ",a[i]);
  }
  printf("\n");
}
char x(int a[10],int n){ //データの1番大きい値を見つける社員
  int i,ik,mx;
  mx=10;
  for(i=n;i<10;i++){
    if(mx>a[i]){
      mx=a[i];
      ik=i;
    }
  }
  return(ik);
}
void j(int a[10]){ //xを利用してデータを小さい順に並べ直す社員

}
void k(int a[10]){ //gを利用してデータを大きい順に並べ直す社員

}
枠組みコード
実行画面
17 17 10 0 8 10 11 6 4 2
データの最小値は17です。
データの最大値は0です。
小さい順に並び換え
0 2 4 6 10 8 10 11 17 17
大きい順に並び換え
17 17 11 10 10 8 6 4 2 0
プロジェクト終了

枠組みコードのmainご覧になればお分かりのように、
int main(){
  int a[10],b[10],c[10],w;
  srand((unsigned) time(NULL));
  f(a);
  
cp(a,b);
  cp(a,c)
;
  h(a);
  w=
g(a,0);
  printf("データの最小値は%dです。\n",a[w]);
  w=
x(a,10);
  printf("データの最大値は%dです。\n",a[w]);
  j(
b);
  printf("小さい順に並び換え\n");
  h(b);
  k(
c);
  printf("大きい順に並び換え\n");
  h(c);
  printf("プロジェクト終了\n");
}
もとのデータa[10]はいじらないで残しておく、
という想定になっています。
b[10]やc[10]にコピーして、
それをそれぞれ、
小さい順(昇順といいます)または大きい順(降順といいます)に並び換えています。
また、並び換えるときにgとxを利用しているわけですが、
g(a,0);
x(a,10);
改造されていることにも注意して下さい。
void j(int a[10]){ //xを利用してデータを小さい順に並べ直す社員

}
void k(int a[10]){ //gを利用してデータを大きい順に並べ直す社員

}
のコーティングはとても難しいですよ。
私もすぐには分からず、
前の講義「excel 2016 vba 入門講義」をカンニングしました。
もちろん、その講義のときは自分で考えたのですが。
ヒントいっておくと、1次元for文でクリアできます。



第3話へ 第5話へ

a


初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座

初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ