2次元配列の問題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
まるくま
記事: 39
登録日時: 12年前
住所: 群馬県

2次元配列の問題

#1

投稿記事 by まるくま » 12年前

次の行列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);
}

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

Re: 2次元配列の問題

#2

投稿記事 by box » 12年前

たぶん、こういう意味でしょう。
ていうか、手で計算した結果と同じであればそのプログラムは正しいし、
違っていればそのプログラムは正しくない、ということです。

コード:

#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;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

まるくま
記事: 39
登録日時: 12年前
住所: 群馬県

Re: 2次元配列の問題

#3

投稿記事 by まるくま » 12年前

難しいですね・・・

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

Re: 2次元配列の問題

#4

投稿記事 by box » 12年前

Cのコードに落とす前に、そもそも、
2行3列 × 3行2列 = 2行2列となる
i行目とj列目の積の和が、積のi行j列の要素となる
このあたりはおわかりなんですよね?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

まるくま
記事: 39
登録日時: 12年前
住所: 群馬県

Re: 2次元配列の問題

#5

投稿記事 by まるくま » 12年前

2行3列 × 3行2列 = 2行2列となる

ということはわかります

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

Re: 2次元配列の問題

#6

投稿記事 by box » 12年前

i行目とj列目の積の和が、積のi行j列の要素となる
こちらについてはいかがですか?
手で計算することはできるのですよね?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

まるくま
記事: 39
登録日時: 12年前
住所: 群馬県

Re: 2次元配列の問題

#7

投稿記事 by まるくま » 12年前

手で計算ということは1*1=1 2*5=10 4*5=20・・・ということでしょうか?

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

Re: 2次元配列の問題

#8

投稿記事 by box » 12年前

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

コード:

35 14
77 41
にならなければなりません。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

まるくま
記事: 39
登録日時: 12年前
住所: 群馬県

Re: 2次元配列の問題

#9

投稿記事 by まるくま » 12年前

よくわからないです・・・(´・ω・`)
行列x,y(maとかだとまちがってますね(汗))を重ねるイメージなんですけど
違うんですか?

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

Re: 2次元配列の問題

#10

投稿記事 by beatle » 12年前

行列の積の計算方法はこんな感じ http://naop.jp/text/c/gyouretu3.html

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

Re: 2次元配列の問題

#11

投稿記事 by box » 12年前

まるくま さんが書きました: 行列x,y(maとかだとまちがってますね(汗))を重ねるイメージなんですけど
違うんですか?
変数名の違いは本質的なところではありません。maを使ったから間違い、というようなことはありません。
2行3列と3行2列をどうやって「重ねる」のでしょうか。
beatleさんが紹介してくださったところへ行って、
行列どうしの積の計算方法を勉強してください。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

まるくま
記事: 39
登録日時: 12年前
住所: 群馬県

Re: 2次元配列の問題

#12

投稿記事 by まるくま » 12年前

行列のことは勘違いしてました、というか習ってないので(汗
勉強しようと思います。

閉鎖

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