ページ 11

多次元配列を使って行列の積を求める問題がわかりません

Posted: 2011年11月09日(水) 11:04
by you
今学校で習ったのは
for文,配列,if文,scanf,printfなどです
実際に作ってみましたが
意味のわからない動きをします
助けてください

コード:

 
#include <stdio.h>

#define N 3


int main()
{
int i,j,k;
double A[N][N],B[N][N],C[N][N];

for(i=0;i<N;i++) {
for(j=0;j<N;j++) {
scanf("%lf",&A[j]);
scanf("lf",&B[j]);
}
}



for(j=0;j<N;j++) {
for(k=0;k<N;k++) {
C[j]+=A[k]*C[k][j];
}
}

for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("%lf",C[j]);
}
}
return 0;
}
[/code]

Re: 多次元配列を使って行列の積を求める問題がわかりません

Posted: 2011年11月09日(水) 12:23
by non

コード:

#include <stdio.h>

#define N 3

int main()
{
	int i,j,k;
	double A[N][N],B[N][N],C[N][N];

	for(i=0;i<N;i++) {
		for(j=0;j<N;j++) {
			scanf("%lf",&A[i][j]);
			scanf("lf",&B[i][j]);   //間違い
		}
	}
	// iのループがないけどいいの?また、配列cの初期化は?
	for(j=0;j<N;j++) {
		for(k=0;k<N;k++) {
			C[i][j]+=A[i][k]*C[k][j];
		}
	}

	for(i=0;i<N;i++)
	{
		for(j=0;j<N;j++)
		{
			printf("%lf",C[i][j]);	//間違い
		}
	}
	return 0;
}

Re: 多次元配列を使って行列の積を求める問題がわかりません

Posted: 2011年11月09日(水) 18:20
by you
cの初期値を決めて結構直してみたんですけど
まだ答えが出ません
どうしたらいいのでしょうか?


コード:

int main()
{
int i,j,k,l,m;
int a[3][3]; 
int b[3][3];
int c[3][3];
   printf("行列 A の成分を入力:\n");
        for (i = 0; i < 3; i++) {
            for (j = 0; j < 3; j++) {
                scanf("%lf", &b[i][j]);
            }
        }

        printf("行列 B の成分を入力:\n");
        for (i = 0; i < 3; i++) {
            for (j = 0; j < 3; j++) {
                scanf("%lf", &b[i][j]);
            }
        }
for ( l=0; l< 3; ++l){
for ( m=0; m< 3; ++m){
c[l][m] = 0;
for( k=0; k< 3; ++k){ 

c[l][m]+= a[l][k]*b[k][m]; 
}
printf("%5d ",c[l][m]);
}
printf("\n");
}
return 0;
}

Re: 多次元配列を使って行列の積を求める問題がわかりません

Posted: 2011年11月09日(水) 18:26
by みけCAT
きちんとインデントを行う癖を付けた方がいいと思います。

int型なのに%lfで入力しようとしているからですね。

Re: 多次元配列を使って行列の積を求める問題がわかりません

Posted: 2011年11月09日(水) 18:37
by you
やはりうまくいかないです
数値は出ますが
明らかに変な数値が出ます


コード:

 #include<stdio.h>
int main()
{
int i,j,k,l,m;
double a[3][3]; 
double b[3][3];
double c[3][3];
   printf("行列 A の成分を入力:\n");
        for (i = 0; i < 3; i++) {
            for (j = 0; j < 3; j++) {
                scanf("%lf", &b[i][j]);
            }
        }

        printf("行列 B の成分を入力:\n");
        for (i = 0; i < 3; i++) {
            for (j = 0; j < 3; j++) {
                scanf("%lf", &b[i][j]);
            }
        }
for ( l=0; l< 3; ++l){
for ( m=0; m< 3; ++m){
c[l][m] = 0;
for( k=0; k< 3; ++k){ 

c[l][m]+= a[l][k]*b[k][m]; 
}
printf("%5d ",c[l][m]);
}
printf("\n");
}
return 0;
}

Re: 多次元配列を使って行列の積を求める問題がわかりません

Posted: 2011年11月09日(水) 18:44
by みけCAT
double型なのに%5dで出力しようとしているからです。

インデントも直すことをおすすめします。

Re: 多次元配列を使って行列の積を求める問題がわかりません

Posted: 2011年11月09日(水) 19:56
by beatle

コード:

#include<stdio.h>
int main()
{
	int i,j,k,l,m;
	double a[3][3]; 
	double b[3][3];
	double c[3][3];
	printf("行列 A の成分を入力:\n");
	for (i = 0; i < 3; i++) {
		for (j = 0; j < 3; j++) {
			scanf("%lf", &b[i][j]); // bで合ってる?
		}
	}

	printf("行列 B の成分を入力:\n");
	for (i = 0; i < 3; i++) {
		for (j = 0; j < 3; j++) {
			scanf("%lf", &b[i][j]);
		}
	}
	for (l = 0; l < 3; ++l){
		for (m = 0; m < 3; ++m){
			c[l][m] = 0;
			for(k = 0; k < 3; ++k){ 

				c[l][m] += a[l][k] * b[k][m]; 
			}
			printf("%5d ",c[l][m]); // d -> lf
		}
		printf("\n");
	}
	return 0;
}
他の方も仰っていますが、こんな感じで、インデント(=字下げ)を適切にすれば、
どこからどこまでがfor文の中身なのか、などがよく分かります。

Re: 多次元配列を使って行列の積を求める問題がわかりません

Posted: 2011年11月09日(水) 20:02
by みけCAT
printfでは%lfではなく%fです。
http://9cguide.appspot.com/r_mark.html

Re: 多次元配列を使って行列の積を求める問題がわかりません

Posted: 2011年11月09日(水) 22:54
by you
ありがとうございました
できました


改行の大切さを学べました

Re: 多次元配列を使って行列の積を求める問題がわかりません

Posted: 2011年11月10日(木) 08:06
by naohiro19
you さんが書きました: 改行の大切さを学べました
×改行 ○インデント(字下げ)

Re: 多次元配列を使って行列の積を求める問題がわかりません

Posted: 2011年11月10日(木) 19:29
by みけCAT
解決したのでしたら解決チェックをお願いします。