配列で積を求めるには?

[戻る]
ソリッド 2000/11/17(金) 00:27:56
初めておじゃまします。ソリッドと申します。
早速質問なんですが、

配列の問題で

 123   15
 456 と 53
       81

の行列の積を求めよとゆうのがあるんですが、なかなかうまくいきません。

配列の部分が

int a[2][3]={{1,2,3}{4,5,6}};
int b[3][2]={{1,5}{5,3}{8,1}};

とゆう風になって、for文でやればうまくいくと思うのですが・・・。
どなたか教えていただけないでしょうか?

ku 2000/11/17(金) 09:33:55
問題と配列の定義から推測すると配列の定義は合っていると思います.

答えを書くのは簡単なのですが
現在はどうゆう処理を書いてどうゆう結果になったか書いてみては如何ですか?
「for文を使う」というのも正解の1つで合っていますよ.

配列の要素は下記のようになっています.
a[0][0]が1
a[0][1]が2
a[0][2]が3
a[1][0]が4
a[1][1]が5
a[1][2]が6
b[0][0]が1
b[0][1]が5
b[1][0]が5
b[1][1]が3
b[2][0]が8
b[2][1]が1

Johnny 2000/11/17(金) 09:48:45
int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2]={{1,5},{5,3},{8,1}};

のようにコマを入れると解決できると思う。

ソリッド 2000/11/17(金) 22:28:27
どうもソリッドです。
kuさん、Johnnyさん返信有り難う御座います。一用出来ました。多分・・・。
しかし、本とか見ながらやったんでなんか分かりきった気がしません。
特にfor文の所です。何故この配列の積が下のようなForの連続で出てくるのか
どうもしっくりきません。

int a[2][3]=
int b[2][3]=

などなら分かるんですが、問題のようなそれぞれの要素が同じでない時にどうゆ
う風にfor文を使うか分からなくなってしまいます。
 もし良かったら教えていただけないでしょうか?

#include  <stdio.h> 
int main(void) 
{ 
    int  i, j, k; 
    int  ma[2][3] = { {1, 2, 3}, {4, 5, 6} }; 
    int  mb[3][2] = { {1, 5}, {5, 3}, {8, 1} }; 
    int  mc[2][2] = { 0 }; 
    for (i = 0; i < 2; i++) 
        for (j = 0; j < 2; j++) 
            for (k = 0; k < 3; k++) 
                mc[i][j] =  ma[i][k] * mb[k][j]; 

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

    return 0; 
}

Wow 2000/11/29(水) 20:41:07
突然すいませんが、掲載してあるプログラム、11行目の=の左横に
+が抜けてますよ。

古いスレッドには追加発言できません。