C/400

107. 線形探索

放送大学で興味深い二つの探索プログラムが紹介されていたのでここで紹介しよう。
放送大学とは BS231 チャンネルでの TV番組である、と思っていたら
千葉市に実際のキャンパスもあるようである。
ここでは「データ構造とプログラミング」の第2回「配列」で取り上げられた番組の中の
プログラムを実際に IBM System i で実行可能なソースに書き直したものを
読者に紹介する。
大学とは言っても、実際にプログラム開発のある人から見れば高校 1年生レベルの内容なので
興味のある人は TV番組を録画して見ることをぜひお勧めする。

最初にここで紹介するのは線形探索( Linear Search ) と呼ばれる、配列を順次に
LOOPして読み取っていく方法である。

【 サンプル・ソース:TESTLINS 】
0001.00 #include <stdio.h>                                                  
0002.00 #include <stdlib.h>                                                 
0003.00 #include <string.h>                                                 
0004.00                                                                     
0005.00 #define TRUE         0                                              
0006.00 #define FALSE       -1                                              
0007.00                                                                     
0008.00 int linear_search(int a[], int key, int num);                       
0009.00 void main(void){                                                    
0010.00   int a[10], key = 25, num;                                         
0011.00                                                                     
0012.00   printf("** TESTLINS:  線形探索によるバイナリー・サーチ ***\n");   
0013.00   getchar();                                                        
0014.00                                                                     
0015.00   a[0] = 0; a[1] = 5; a[2] = 10; a[3] = 15; a[4] = 20;              
0016.00   a[5] = 25; a[6] = 30; a[7] = 35; a[8] = 40; a[9] = 45;            
0017.00   if((num = linear_search(a, key, 10)) == FALSE){/* 失敗 */         
0018.00     printf(" 配列には見つかりませんでした。 \n");                   
0019.00     getchar();                                                      
0020.00   }/* 失敗 */                                                       
0021.00   else{/* 成功 */                                            
0022.00     printf("%d は %d 個目に見つかりました。 \n", key, num);  
0023.00     getchar();                                               
0024.00   }/* 成功 */                                                
0025.00   return;                                                    
0026.00                                                              
0027.00 }                                                            
0028.00 /*******************************************/                
0029.00 int linear_search(int a[], int key, int num)                 
0030.00 /*******************************************/                
0031.00 {                                                            
0032.00   int i;                                                     
0033.00                                                              
0034.00   for(i = 0; i<num; i++){/*for-loop*/                        
0035.00     if(key == a[i]){/*FOUND*/                                
0036.00       return i;                                              
0037.00     }/*FOUND*/                                               
0038.00   }/*for-loop*/                                              
0039.00   return FALSE;                                              
0040.00 }                                                            
【解説】

関数 :

linear_search の中で配列 a の中身を num 個まで LOOP して
探索している単純なものなので、理解できると思う。

【実行結果】

TESTLINS