2次元配列

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
beginner

2次元配列

#1

投稿記事 by beginner » 15年前

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;
}

アバター
a5ua
記事: 199
登録日時: 15年前

Re: 2次元配列

#2

投稿記事 by a5ua » 15年前

gyaku(a[j]);

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

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

アバター
bitter_fox
記事: 607
登録日時: 15年前
住所: 大阪府

Re: 2次元配列

#3

投稿記事 by bitter_fox » 15年前

それからここも問題がありますね。

コード:

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

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 2次元配列

#4

投稿記事 by softya(ソフト屋) » 15年前

フォーラムルールにもあります通り、解決した場合はソースコードや解決した方法を明記して下さい。
http://dixq.net/forum/viewtopic.php?f=3&t=7587

フォーラムルール引用
また、解決した時は、「解決しました」とだけ言って去らず、ソースコードや解決した方法を明記して下さい。
同じ事で困っている人の為に過去ログに有用な情報を残すようお願いします。
よろしくお願いします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

beginner

Re: 2次元配列

#5

投稿記事 by beginner » 15年前

bitter_foxさん,a5uaさん、ご指摘ありがとうございます。
>>a5uaさん
どこが間違っているのか具体的に挙げていただき理解しやすかったです。
ヒントとなるコードが丁寧に説明されていましたのでその点がとても良かったです。


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

閉鎖

“C言語何でも質問掲示板” へ戻る