ページ 11

2次元配列

Posted: 2011年1月19日(水) 01:45
by beginner
2次元配列を用いて逆行列を計算するというプログラムをつくっているのですが、13行目に以下のようなエラーがでてしまいます。
error C2664: 'gyaku' : 1 番目の引数を 'double' から 'double [][2]' に変換できません。(新しい機能 ; ヘルプを参照)
どう対処すればよいか分からないのでどなたか教えてください。

コード:

#include<stdio.h>
void gyaku(double [2][2]);
int main(void) {
	int i,j;
	double a[2][2];
	printf("整数を入力してください\n");
	for(i=0;i<2;++i) {
		for(j=0;j<2;++j)
			scanf("%lf",a[i][j]);
	}
	for(i=0;i<2;++i) {
		for(j=0;j<2;++j)
			gyaku(a[i][j]);
	printf("逆行列は%lf",a[i][j]);
	}
	printf("\n");
	return 0;
}
void gyaku(double a[2][2]) {
	double b[2][2],c;
	c=a[0][0]*a[1][1]-a[0][1]*a[1][0];
	b[0][0]=a[1][1]/c;
	b[0][1]=-a[0][1]/c;
	b[1][0]=-a[1][0]/c;
	b[1][1]=a[0][0]/c;
}

Re: 2次元配列

Posted: 2011年1月19日(水) 02:26
by a5ua
gyaku(a[j]);

ここで、a[j]はdouble型であり
void gyaku(double a[2][2]) {

ここでは、aはdouble[][2]型です。
関数の引数の型と、実際に渡す値の型違うのでエラーが出ています。
エラーが出ないようにするには、
gyaku(a);
のように呼び出します。
また、それだけでは求める結果が得られないと思いますので、ヒントとなるコードを乗せておきます。
► スポイラーを表示

Re: 2次元配列

Posted: 2011年1月19日(水) 11:51
by bitter_fox
それからここも問題がありますね。

コード:

            scanf("%lf",a[i][j]);
これだと、a[j]の値を代入先アドレスとして渡していることになるので、不正なアドレスに代入されてしまいます。

PS:前回の質問が解決となっていますが、流れを見ると別関数の処理をmainでやってるだけであるように見えます。
ちゃんと別関数に処理を別け、正常に呼び出すことができたのでしょうか??

Re: 2次元配列

Posted: 2011年1月19日(水) 12:00
by softya(ソフト屋)
フォーラムルールにもあります通り、解決した場合はソースコードや解決した方法を明記して下さい。
http://dixq.net/forum/viewtopic.php?f=3&t=7587

フォーラムルール引用
また、解決した時は、「解決しました」とだけ言って去らず、ソースコードや解決した方法を明記して下さい。
同じ事で困っている人の為に過去ログに有用な情報を残すようお願いします。
よろしくお願いします。

Re: 2次元配列

Posted: 2011年1月19日(水) 17:30
by beginner
bitter_foxさん,a5uaさん、ご指摘ありがとうございます。
>>a5uaさん
どこが間違っているのか具体的に挙げていただき理解しやすかったです。
ヒントとなるコードが丁寧に説明されていましたのでその点がとても良かったです。


解決した方法
元の行列と逆行列を入れるための2次元配列をそれぞれmain関数内につくっておくこと。
main関数内では逆行列だけを表示させること。