サンプルプログラム1−2
1-2)sample102(複数ソースからなるプログラム:バブルソート・二分検索、呼び出し)
複数のソース・ファイルで構成された場合のコンパイル方法です。
二分検索は参考文献(プログラミング言語C、K&R)の「第3章 制御の流れ」、「3.3 Else-If」に、例示されています。二分検索では、検索対象が昇順に並んでいることが条件となっているので、その前にソートできるように機能を追加しています。
バブルソート、二分検索機能は、Asample_102_sub.cに含まれ、@sample_102_main.cのmain関数から呼び出されます。
@sample_102_main.cで、呼び出すために、関数定義をincludeする必要があります。ここでは、Bsample_102_sub.hとヘッダ・ファイルを定義しています。
実行ファイルが、sample_102.exeになるようにコンパイルします。BCC32C.EXEでコンパイルした結果をCに、実行結果をDに示します。
BCC32X.EXEでコンパイルした結果をEに示します。
ここに載せたファイルは、こちら。
@sample_102_main.c
// -------------------------------------------------
// sample_102_main.c ソート、サーチ
//
// 2018/12/05 Kimio Nakamura
// -------------------------------------------------
#include <stdio.h>
#include "sample_102_sub.h"
// ===============================================================
// Name : problem3_01_binsearch_org.c
// Usage : int main(void)
// Parameter:
// Return :
// ==============================================================
int main(void)
{
int x = 4;
int n = 8;
int v[n];
int i,rc;
v[0] = 4;
v[1] = 3;
v[2] = 9;
v[3] = 8;
v[4] = 10;
v[5] = 1;
v[6] = 6;
v[7] = 14;
fprintf(stdout, "sort(before)\n");
for(i = 0 ;i < n ;i++) fprintf(stdout, " v[%2d]=%2d\n",i,v[i]);
bubblesort(&v[0], n);
fprintf(stdout, "\nsort(after)\n");
for(i = 0 ;i < n ;i++) fprintf(stdout, " v[%2d]=%2d\n",i,v[i]);
x = 4;
fprintf(stdout, "\nsearch:%d\n",x);
rc = binsearch(x, &v[0], n);
if(rc < 0) fprintf(stdout, " Not found\n");
else fprintf(stdout, " Find v[%d] = %d\n", rc, v[rc]);
x = 11;
fprintf(stdout, "\nsearch:%d\n",x);
rc = binsearch(x, &v[0], n);
if(rc < 0) fprintf(stdout, " Not found\n");
else fprintf(stdout, " Find v[%d] = %d\n", rc, v[rc]);
return (0);
}
Asample_102_sub.c
// -------------------------------------------------
// sample_102_sub.c バブル・ソート、バイナリサーチ
//
// 2018/12/05 Kimio Nakamura
// -------------------------------------------------
#include <stdio.h>
// ====================================================================
// Name : bubblesort
// Usage : bubblesort(int *v[], int n)
// Parameter: 並べ替える配列(1つ目)、配列数
// Return : なし
// =====================================================================
int bubblesort(int *v, int n)
{
int i, j, temp;
for(i = n-1 ; i >0 ; i--){
for(j = 0 ; j < i ; j++){
if(v[j] > v[j+1]){
temp = v[j+1];
v[j+1 ] = v[j];
v[j ] = temp;
}
}
}
return 0;
}
// =========================================================================
// Name : binsearch バイナリサーチ
// Usage : binsearch(int, int *v[], int)
// Parameter: 探す数、配列1つ目(昇順で並んでいること)、配列数
// Return : 見つかった場合は配列番号、見つからない場合は-1
// =========================================================================
int binsearch(int x, int *v, int n)
{
int low, high, mid;
low = 0;
high = n - 1;
while(low <= high){
mid = (low + high)/2;
if(x < v[mid]) high = mid -1;
else if(x > v[mid]) low = mid + 1;
else return mid;
}
return -1;
}
Bsample_102_sub.h
// -------------------------------------------------
// sample_102_sub.h バブル・ソート、バイナリサーチ
// ヘッダファイル
// 2018/12/05 Kimio Nakamura
// -------------------------------------------------
int bubblesort(int * , int );
int binsearch(int, int * , int );
Cコンパイル結果bcc32c

D実行結果

Eコンパイル結果bcc32x

 |