引数として2次元配列を関数に渡したい
Posted: 2007年7月15日(日) 18:41
C言語の初心者です.
2次元配列を引数に持つ関数を作成したいです.
具体的には以下のようなプログラムを作成しました.
ここでSearch_i(...)に要素数の異なる配列enginemap[/url][/url]とtcmap[/url][/url]の両方を引数として渡したいのです.
しかしエラーが出てしまい,引数として要素数の異なる2次元配列を渡せません.
少し調べたのですが,
int f(double[/url][5],...)
のように配列の第2要素の個数を指定する方法しかわかりませんでした.
これではenginemap[18][2]とtcmap[15][3]の第2要素の個数が(2個,3個と)異なっているので困ります.
どのように修正すべきでしょうか?
2次元配列を引数に持つ関数を作成したいです.
具体的には以下のようなプログラムを作成しました.
#include<stdio.h>
void TCMap();
void EngineMap();
int Search_i(double map[/url][/url],int j,int i_mim,int i_max,double x);
double enginemap[18][2];
double tcmap[15][3];
int main(void){
int i_now,i_now2;
TCMap();//配列に値を代入
EngineMap();//配列に値を代入
i_now = Search_i(enginemap[/url][/url],0,0,17,1850);//i_now = 10のはず
i_now2 = Search_i(tcmap[/url][/url],3,0,14,500);//i_now2 = 9のはず
printf("%f,%f\n",i_now,i_now2);
return 0;
}
int Seacrh_i(double map[/url][/url],int j,int i_min,int i_max,double x){
int i;
if(map[i_min][j]<map[i_max][j]){//単調増加のとき
for(i=0;i<i_max+1;i++){
if(x<map[i_min][j]){//最小値以下ならi=i_min;
i = i_min;
break;
}
else if(x>map[i_max][j]){//最大値以上ならi=i_max
i = i_max;
break;
}
else if(x<map[j]){//
i = i;
break;
}
}
}
else if(map[i_min][j]>map[i_max][j]){//単調減少の時
for(i=0;i<i_max+1;i++){
if(x>map[i_min][j]){//最大値以上ならi=i_min
i = i_min;
break;
}
else if(x<map[i_max][j]){//最小値以下ならi=i_max;
i = i_max;
break;
}
else if(x>map[j]){
i = i;
break;
}
}
}
return(i);
}
void TCMap(){
int i,j;
FILE *file;
double a;
printf("トルコン領域マップ\n");
file = fopen("TCOutputTorque.csv","r");
for(i=0;i<15;i++){
for(j=0;j<3;j++){
fscanf(file,"%lf,",&a);
tcmap[j] = a;
printf("tcmap[%d][%d] = %4.1f,",i,j,tcmap[j]);
}
printf("\n");
}
fclose(file);
}
void EngineMap(){
int i,j;
FILE *file;
double a;
printf("エンジン特性マップ\n");
file = fopen("TCInputTorque.csv","r");
for(i=0;i<18;i++){
for(j=0;j<2;j++){
fscanf(file,"%lf,",&a);
enginemap[j] = a;
printf("enginemap[%d][%d] = %4.1f,",i,j,enginemap[j]);
}
printf("\n");
}
fclose(file);
}ここでSearch_i(...)に要素数の異なる配列enginemap[/url][/url]とtcmap[/url][/url]の両方を引数として渡したいのです.
しかしエラーが出てしまい,引数として要素数の異なる2次元配列を渡せません.
少し調べたのですが,
int f(double[/url][5],...)
のように配列の第2要素の個数を指定する方法しかわかりませんでした.
これではenginemap[18][2]とtcmap[15][3]の第2要素の個数が(2個,3個と)異なっているので困ります.
どのように修正すべきでしょうか?