番兵と検索関連の質問
Posted: 2009年10月29日(木) 11:09
問題の意味すらわかりません援護射撃よろしくお願いします
0 から100 までの範囲で整数の乱数を1000 個発生させ、ターゲット整数を検索し、何番目の数
字でターゲット整数が見つかるか、番兵を使わない関数NonSentinel と、番兵を使う関数Sentinel の2つで求
める下のプログラムを完成させなさい。このプログラムをbanpai.c として実行ファイルをbanpei.exe とする場
合、
>banpei 50
> 番兵なし54, 番兵あり54
>banpei 200
> 番兵なし-1, 番兵あり1001
のように動作する。
#include <stdio.h>
#include <stdlib.h>
#define LENGTH 1001 // データの長さ+ 番兵
#define MAX 101 // データの範囲
/*----------------------------------------------
関数プロトタイプ
-----------------------------------------------*/
void GenerateNumbers(int* m, int n);
int Sentinel(int target, int* m, int n);
int NoSentinel(int taget, int* m, int n);
/*----------------------------------------------
**
番兵をつかった線形検索問題
* m[/url] の中からtarget を探し、配列の中の行番号を求める。
*-----------------------------------------------*/
int main(int argc, char** argv)
{
int m[LENGTH]; // ランダムに発生させる数
int target; // 検索する数
GenerateNumbers(m, LENGTH-1); // ゼロから100 までの乱数を発生させてm に代入
target = strtol(argv[1], NULL, 0); // ターゲットは二番目の引数
printf("番兵なし%d, 番兵あり%d\n",
NoSentinel(target, m, LENGTH-1), // 番兵を使わずに検索
Sentinel(target, m, LENGTH) // 番兵を使って検索
);
}/
*----------------------------------------------
線形検索
input int target: 検索する数
int m[/url]; 検索対象の配列
int n; 配列の次数
戻り値: 何番目に見つかったか、もしなければ-1 を返す
33
-----------------------------------------------*/
int NoSentinel(int target, int* m, int n)
{}/
*----------------------------------------------
番兵を使った線形検索
input int target: 検索する数
int m[/url]; 検索対象の配列
int n; 配列の次数
戻り値: 何番目に見つかったか、もしなければ番兵を返す
-----------------------------------------------*/
int Sentinel(int target, int* m, int n)
{}/
*----------------------------------------------
**
Random number generator
* Generate n random numbers ranging from 0 to 100
* and stored in m[/url].
* 2008.9.12
* input/output int m[/url];
* input int n;
*-----------------------------------------------*/
void GenerateNumbers(int* m, int n)
{
int ii;
for (ii=0; ii<n; ii++){
m[ii] = rand()%MAX;
}
}
0 から100 までの範囲で整数の乱数を1000 個発生させ、ターゲット整数を検索し、何番目の数
字でターゲット整数が見つかるか、番兵を使わない関数NonSentinel と、番兵を使う関数Sentinel の2つで求
める下のプログラムを完成させなさい。このプログラムをbanpai.c として実行ファイルをbanpei.exe とする場
合、
>banpei 50
> 番兵なし54, 番兵あり54
>banpei 200
> 番兵なし-1, 番兵あり1001
のように動作する。
#include <stdio.h>
#include <stdlib.h>
#define LENGTH 1001 // データの長さ+ 番兵
#define MAX 101 // データの範囲
/*----------------------------------------------
関数プロトタイプ
-----------------------------------------------*/
void GenerateNumbers(int* m, int n);
int Sentinel(int target, int* m, int n);
int NoSentinel(int taget, int* m, int n);
/*----------------------------------------------
**
番兵をつかった線形検索問題
* m[/url] の中からtarget を探し、配列の中の行番号を求める。
*-----------------------------------------------*/
int main(int argc, char** argv)
{
int m[LENGTH]; // ランダムに発生させる数
int target; // 検索する数
GenerateNumbers(m, LENGTH-1); // ゼロから100 までの乱数を発生させてm に代入
target = strtol(argv[1], NULL, 0); // ターゲットは二番目の引数
printf("番兵なし%d, 番兵あり%d\n",
NoSentinel(target, m, LENGTH-1), // 番兵を使わずに検索
Sentinel(target, m, LENGTH) // 番兵を使って検索
);
}/
*----------------------------------------------
線形検索
input int target: 検索する数
int m[/url]; 検索対象の配列
int n; 配列の次数
戻り値: 何番目に見つかったか、もしなければ-1 を返す
33
-----------------------------------------------*/
int NoSentinel(int target, int* m, int n)
{}/
*----------------------------------------------
番兵を使った線形検索
input int target: 検索する数
int m[/url]; 検索対象の配列
int n; 配列の次数
戻り値: 何番目に見つかったか、もしなければ番兵を返す
-----------------------------------------------*/
int Sentinel(int target, int* m, int n)
{}/
*----------------------------------------------
**
Random number generator
* Generate n random numbers ranging from 0 to 100
* and stored in m[/url].
* 2008.9.12
* input/output int m[/url];
* input int n;
*-----------------------------------------------*/
void GenerateNumbers(int* m, int n)
{
int ii;
for (ii=0; ii<n; ii++){
m[ii] = rand()%MAX;
}
}