ページ 11

2次元配列の問題

Posted: 2013年4月06日(土) 07:35
by まるくま
次の行列x、yの積を求めるプログラムを作成せよ 
   1 2 3       1 5 
x=          y= 5 3
   4 5 6       8 1

という問題ですが読解力がなくて・・・・
こういう意味でしょうか?

コード:

#include <stdio.h>

int main(void)
{

	int i, j;
	int ma[2][3] = {{1,2,3,},{4,5,6}};
	int mb[3][2] = {{1,5},{5,3},{8,1}};
	int mc[3][3] = { 0 };

	for(i=0; i<2; i++){
		for(j=0; j<2; j++){
			mc[i][j] = ma[i][j] * mb[i][j];
		}
	}

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

	return (0);
}

Re: 2次元配列の問題

Posted: 2013年4月06日(土) 08:27
by box
たぶん、こういう意味でしょう。
ていうか、手で計算した結果と同じであればそのプログラムは正しいし、
違っていればそのプログラムは正しくない、ということです。

コード:

#include <stdio.h>
 
int main(void)
{
    int x[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } };
    int y[3][2] = { { 1, 5 }, { 5, 3 }, { 8, 1 } };
    int z[2][2] = { 0 };
    int i, j, k;
    
    for (i = 0; i < 2; i++) {
        for (j = 0; j < 2; j++) {
            for (k = 0; k < 3; k++) {
                z[i][j] += x[i][k] * y[k][j];
            }
        }
    }
    
    for (i = 0; i < 2; i++) {
        for (j = 0; j < 2; j++) {
            printf("%3d", z[i][j]);
        }
        putchar('\n');
    }
    putchar('\n');
    return 0;
}

Re: 2次元配列の問題

Posted: 2013年4月06日(土) 08:39
by まるくま
難しいですね・・・

Re: 2次元配列の問題

Posted: 2013年4月06日(土) 08:46
by box
Cのコードに落とす前に、そもそも、
2行3列 × 3行2列 = 2行2列となる
i行目とj列目の積の和が、積のi行j列の要素となる
このあたりはおわかりなんですよね?

Re: 2次元配列の問題

Posted: 2013年4月06日(土) 08:48
by まるくま
2行3列 × 3行2列 = 2行2列となる

ということはわかります

Re: 2次元配列の問題

Posted: 2013年4月06日(土) 08:55
by box
i行目とj列目の積の和が、積のi行j列の要素となる
こちらについてはいかがですか?
手で計算することはできるのですよね?

Re: 2次元配列の問題

Posted: 2013年4月06日(土) 08:58
by まるくま
手で計算ということは1*1=1 2*5=10 4*5=20・・・ということでしょうか?

Re: 2次元配列の問題

Posted: 2013年4月06日(土) 14:52
by box
まるくま さんが書きました:手で計算ということは1*1=1 2*5=10 4*5=20・・・ということでしょうか?
それだと、最初に投稿されたコードのとおりですよね。
行列どうしの積の計算方法が理解できていないように思えます。大丈夫ですか?

コード:

35 14
77 41
にならなければなりません。

Re: 2次元配列の問題

Posted: 2013年4月06日(土) 15:29
by まるくま
よくわからないです・・・(´・ω・`)
行列x,y(maとかだとまちがってますね(汗))を重ねるイメージなんですけど
違うんですか?

Re: 2次元配列の問題

Posted: 2013年4月06日(土) 15:45
by beatle
行列の積の計算方法はこんな感じ http://naop.jp/text/c/gyouretu3.html

Re: 2次元配列の問題

Posted: 2013年4月06日(土) 15:51
by box
まるくま さんが書きました: 行列x,y(maとかだとまちがってますね(汗))を重ねるイメージなんですけど
違うんですか?
変数名の違いは本質的なところではありません。maを使ったから間違い、というようなことはありません。
2行3列と3行2列をどうやって「重ねる」のでしょうか。
beatleさんが紹介してくださったところへ行って、
行列どうしの積の計算方法を勉強してください。

Re: 2次元配列の問題

Posted: 2013年4月06日(土) 16:04
by まるくま
行列のことは勘違いしてました、というか習ってないので(汗
勉強しようと思います。