行列の積

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

行列の積

#1

投稿記事 by るうる » 9年前

行列の席を出力するプログラムを作成しれいるのですが、出力のところでうまくいきません。
原因は何でしょうか?
教えてください、

コード:

#include<stdio.h>
int main(void)
{
	int n[2][2];
	int m[2][2];
	int nm[2][2];

	int i, j;

	for (i = 0; i < 2; i++){
		for (j = 0; j < 2; j++){
			printf("n[%d][%d]を入力\n", j, i);
			scanf("%d", &n[i][j]);
		}
	}

	for (i = 0; i < 2; i++){
		for (j = 0; j < 2; j++){
			printf("m[%d][%d]を入力\n", j, i);
			scanf("%d", &m[i][j]);
		}
	}

	for (i = 0; i < 2; i++){
		for (j = 0; j < 2; j++){
			nm[i][j] = 0;
			nm[i][j] += n[i][j] * m[i][j];
		}
	}

	for (i = 0; i < 2; i++){
		for (j = 0; j < 2; j++){
			printf("%4d",nm [i][j]);
		}
		putchar('\n');
	}

	return 0;
}

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

Re: 行列の積

#2

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

るうる さんが書きました:行列の席を出力するプログラムを作成しれいるのですが、出力のところでうまくいきません。
コンパイルは通りました。
とりあえず、席→積、しれいる→している、ですか?
申し訳ないですが、意味がよくわかりません。
以下フォーラムルールより転載
「うまくいきません」という質問は大抵回答に困ります。

1. 自分は今何がしたくて

2. どう取り組んで(作ったプログラムはどれで

3. どのようなエラーやトラブルで困っていて

4. 自分は何が解らないのか、知りたいのか

5. 今のCの知識はどの程度なのか

この5点をしっかりと明記して下さい。
※回答者が困る質問例※

「ゲーム作っているのですが、うまく作れません」
「コンパイルしたのですが、うまくコンパイルできません」
この手の質問はよく回答に困ります。
しっかり取り組んだことと、何に困っているか、自分の理解レベルはどれ位なのかを明確にして下さい。
コンパイルエラーの質問の場合、エラーメッセージをコピペするのは最重要です。

■悪い質問例■
○○を作っているのですが、うまく作れません。どうしたらいいでしょうか?

■良い質問例■
今回は○○について質問をします。
今私は○○の宿題に取り組んでいて、詳細の仕様は○○のようになっています(1)。
今わかる範囲でこのプログラム(ソースコードの提示)まで書いてみたのですが(2)、
○○というコンパイルエラーが出て原因が解らず困っています(3)。
今知りたいのはこのエラーの原因と、○○の実装の仕方についてです。(4)
(今学校で○○について習っているところですが、○○についてはよくわかりません。(5))
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: 行列の積

#3

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

このプログラムは数学の行列の積(MATLABで言うとnm=n*m)ではなく、
行列の要素ごとの積(MATLABで言うとnm=n.*m)を計算するプログラムですね。

うまくいかないのは本当に出力のところですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

box
記事: 2002
登録日時: 15年前

Re: 行列の積

#4

投稿記事 by box » 9年前

るうる さんが書きました:

コード:

			nm[i][j] = 0;
			nm[i][j] += n[i][j] * m[i][j];
問題はここかなと。この2行は、つまるところ

コード:

    nm[i][j] = n[i][j] * m[i][j];
を計算しているだけで、2行2列どうしのかけ算であるところの
1行1列目の結果はかけ算したい行列Aの1行目とBの1列目の積和
1行2列目の結果はかけ算したい行列Aの1行目とBの2列目の積和
2行1列目の結果はかけ算したい行列Aの2行目とBの1列目の積和
2行2列目の結果はかけ算したい行列Aの2行目とBの2列目の積和
という体裁を取っていませんから。

3重のループが必要であるように思います。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

box
記事: 2002
登録日時: 15年前

Re: 行列の積

#5

投稿記事 by box » 9年前

るうる さんが書きました:

コード:

			printf("n[%d][%d]を入力\n", j, i);
			scanf("%d", &n[i][j]);
			printf("m[%d][%d]を入力\n", j, i);
			scanf("%d", &m[i][j]);
ここは本当にこれでいいんですか?
入力を促すメッセージではj行i列の要素を入力することを求めているようですが、
実際に入力しているのはi行j列です。
混乱をきたしませんか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

閉鎖

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