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

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

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

#1

投稿記事 by you » 13年前

今学校で習ったのは
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]

non
記事: 1097
登録日時: 14年前

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

#2

投稿記事 by non » 13年前

コード:

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

you

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

#3

投稿記事 by you » 13年前

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

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#4

投稿記事 by みけCAT » 13年前

きちんとインデントを行う癖を付けた方がいいと思います。

int型なのに%lfで入力しようとしているからですね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

you

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

#5

投稿記事 by you » 13年前

やはりうまくいかないです
数値は出ますが
明らかに変な数値が出ます


コード:

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

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#6

投稿記事 by みけCAT » 13年前

double型なのに%5dで出力しようとしているからです。

インデントも直すことをおすすめします。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

beatle
記事: 1281
登録日時: 13年前
住所: 埼玉
連絡を取る:

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

#7

投稿記事 by beatle » 13年前

コード:

#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文の中身なのか、などがよく分かります。
最後に編集したユーザー beatle on 2011年11月10日(木) 13:08 [ 編集 1 回目 ]

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#8

投稿記事 by みけCAT » 13年前

printfでは%lfではなく%fです。
http://9cguide.appspot.com/r_mark.html
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

you

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

#9

投稿記事 by you » 13年前

ありがとうございました
できました


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

naohiro19
記事: 256
登録日時: 14年前
住所: 愛知県

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

#10

投稿記事 by naohiro19 » 13年前

you さんが書きました: 改行の大切さを学べました
×改行 ○インデント(字下げ)

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#11

投稿記事 by みけCAT » 13年前

解決したのでしたら解決チェックをお願いします。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

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