-PR-
解決済み

Cで作ったプログラムについて

  • すぐに回答を!
  • 質問No.37229
  • 閲覧数74
  • ありがとう数4
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 47% (8/17)

(3,3)行列同士の掛け算についてのプログラムを組んでみましたが、
M_abの値がムチャクチャです。
#include<stdio.h>
int main()
{
int M_a[3][3];
int M_b[3][3];
int M_ab[3][3];
int x;
int line;
int colm;

for(line = 0; line < 3; line ++){
for(colm = 0; colm < 3; colm ++ ) {
printf("M_a[%d][%d] >" ,line ,colm );
scanf("%d",&M_a[line][colm]);
}
}
for(line = 0; line < 3; line ++){
for(colm = 0; colm < 3; colm ++){
printf("M_b[%d][%d] >",line,colm);
scanf("%d",&M_b[line][colm]);
}
M_ab[line][colm] = 0;
}
for(x = 0; x < 3; x ++ ){
for(line = 0; line < 3; line ++){
for(colm = 0; colm < 3; colm ++){
M_ab[line][colm] += M_a[line][x] * M_b[x][colm] ;
}
}
}
for(line = 0; line < 3; line ++){
for(colm = 0; colm < 3; colm ++){
printf("M_A = %d\t",M_a[line][colm]);
printf("M_B = %d\t",M_b[line][colm]);
printf("M_AB = %d\n",M_ab[line][colm]);

}
}

return(0);
}
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.3
レベル8

ベストアンサー率 59% (22/37)

ku_by_wada さんが、プログラム中で M_ab を初期化しようと
思っている場所が違うようです.
(実際には、初期化されていないと思います)

--+--+--
for(line = 0; line < 3; line ++){
 for(colm = 0; colm < 3; colm ++){
  printf("M_b[%d][%d] >",line,colm);
  scanf("%d",&M_b[line][colm]);
 }
 M_ab[line][colm] = 0; /* ← ここ */
}
--+--+--

これだと、意図しない場所を初期化してしまいます.
M_ab[0][3]、 M_ab[1][3]、 M_ab[2][3]
line の値は変わるけど、colm の値は for 文の外ですから
かならず 3 になっていまいます.
(3行3列の行列なのに、4列目を初期化していることになっています)

なので、初期の部分を for 文の中に入れてしまえば
良いと思います.

--+--+--
for(line = 0; line < 3; line ++){
 for(colm = 0; colm < 3; colm ++){
  printf("M_b[%d][%d] >",line,colm);
  scanf("%d",&M_b[line][colm]);
  M_ab[line][colm] = 0; /* ← ここに移動 */
 }
}
--+--+--

ではでは.

# 実際に、行列の掛け算を行っている部分が間違っているのかも
# しれませんが、そこは検証していません.
お礼コメント
ku_by_wada

お礼率 47% (8/17)

どうもありがとうございました。おかげさまでちゃんと動くようになりました。本当に感謝してます。
投稿日時 - 2001-02-07 08:57:48
関連するQ&A
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1
レベル9

ベストアンサー率 34% (23/66)

全部を詳しく見てはいませんが、とりあえず M_ab[][] の初期化の場所が一行ずれてません? (さらに言うと、この場所だと、処理系によっては不正なメモリアクセスにもなりそう。)
全部を詳しく見てはいませんが、とりあえず M_ab[][] の初期化の場所が一行ずれてません?
(さらに言うと、この場所だと、処理系によっては不正なメモリアクセスにもなりそう。)


  • 回答No.2
レベル8

ベストアンサー率 22% (8/36)

for(line = 0; line < 3; line ++){ for(colm = 0; colm < 3; colm ++){ printf("M_b[%d][%d] >",line,colm); scanf("%d",&M_b[line][colm]); } M_ab[line][colm] = 0; } ...続きを読む
for(line = 0; line < 3; line ++){
for(colm = 0; colm < 3; colm ++){
printf("M_b[%d][%d] >",line,colm);
scanf("%d",&M_b[line][colm]);
}
M_ab[line][colm] = 0;
}

のM_ab[line][colm]の配列を初期化する部分が間違ってるのかな?
これだと3列目しか初期化できてないような気が。。。
VC++4だとM_b[][]の入力がループされます。

for(line = 0; line < 3; line ++){
for(colm = 0; colm < 3; colm ++){
printf("M_b[%d][%d] >",line,colm);
scanf("%d",&M_b[line][colm]);
M_ab[line][colm] = 0;
}
}
こう変えるとちゃんと走りましたよ
補足コメント
ku_by_wada

お礼率 47% (8/17)

そう変更したところ、次のように表示されました。ex6_3.c: In function `main':
ex6_3.c:22: parse error before `}'
ex6_3.c:24: parse error before `)'
ex6_3.c:25: parse error before `)'
ex6_3.c:26: parse error before `)'
ex6_3.c: At top level:
ex6_3.c:31: parse error before `for'
ex6_3.c:34: parse error before string constant
ex6_3.c:34: warning: data definition has no type or storage class
ex6_3.c:35: parse error before string constant
ex6_3.c:35: warning: data definition has no type or storage
投稿日時 - 2001-02-06 19:54:42
  • 回答No.4
レベル8

ベストアンサー率 59% (22/37)

別の回答を思いついたので. 行列の計算を行っている部分を書き換えて、0を代入する場所を 変えてみました. --+--+-- for(line = 0; line < 3; line ++){  for(colm = 0; colm < 3; colm ++){   M_ab[line][colm] = 0;   for(x = 0; x < 3; x ++ ){ ...続きを読む
別の回答を思いついたので.

行列の計算を行っている部分を書き換えて、0を代入する場所を
変えてみました.

--+--+--
for(line = 0; line < 3; line ++){
 for(colm = 0; colm < 3; colm ++){
  M_ab[line][colm] = 0;
  for(x = 0; x < 3; x ++ ){
   M_ab[line][colm] += M_a[line][x] * M_b[x][colm] ;
  }
 }
}
--+--+--
# あまり意味の無い書き換えだったかも.

混乱してしまったら、ゴメンなさい.(_o_)
お礼コメント
ku_by_wada

お礼率 47% (8/17)

すいません。じっくりやりたいのですが、学校が閉まる時間になってしまったので、続きはあしたにしたいと思います。
投稿日時 - 2001-02-06 20:05:14
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


新大学生・新社会人のパソコンの悩みを解決!

いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ