- ベストアンサー
行列の積を計算するプログラムがうまくいかない
- 行列の積を計算するプログラムが正しく動作しないようです。
- 行列Aと行列Bをファイルから読み込み、その積Cを計算する際に問題が発生しています。
- プログラムの修正が必要なようです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
(「読み込み」部分についてのみのアドバイス) #1補足>どのようにすればよいのでしょうか? 可変個のデータなので for文で回すのがよいかと。 下の2つの関数を、n, m を読み込んだ後で、呼び出して・・。 void DataInput( FILE *fp1, int a[][ COL ], int b[][ ROW ], int n, int m ) { int i, j; for( i = 0; i < n; i++ ){ for( j = 0; j < m; j++ ){ fscanf( fp1, "%d", &a[ i ][ j ] ); } } for( i = 0; i < m; i++ ){ for( j = 0; j < n; j++ ){ fscanf( fp1, "%d", &b[ i ][ j ] ); } } } void DataCheck( int a[][ COL ], int b[][ ROW ], int n, int m ) { int i, j; for( i = 0; i < n; i++ ){ for( j = 0; j < m; j++ ){ printf( "%3d", a[ i ][ j ] ); } printf( "\n" ); } for( i = 0; i < m; i++ ){ for( j = 0; j < n; j++ ){ printf( "%3d", b[ i ][ j ] ); } printf( "\n" ); } }
その他の回答 (3)
- kmee
- ベストアンサー率55% (1857/3366)
> fscanf(fp1,"%d %d",&a[i][j],&b[i][j]); このときの,i,jはどうなってますか? この1行を追加しただけ、なら、「i,jを変えながら全部読み込む」なんて機能はありません。読み込むべきi,jを指定するようにしましょう。 あとデータは 3 4 ← A:3行4列、B:4行3列 1 2 3 4 ← Aの1行目 2 3 4 5 ← Aの2行目 3 4 5 6 ← Aの3行目 1 2 3 ← Bの1行目 2 3 4 ← Bの2行目 3 4 5 ← Bの3行目 4 5 6 ← Bの4行目 ということでしょうか?それだと、aを全部読み込み→bを全部読み込みとなるようにする必要があるため、 「fscanf(fp1,"%d %d",&a[i][j],&b[i][j]);」とはなりません。 void MatrixProduct(int a[][COL],int b[][ROW],int c[][ROW],int n,int m ) 今回、ROW=COL=10なので問題にはなりませんが、ROWとCOLを間違えています。 main中の宣言を確認してください
お礼
ありがとうございました!
- Tacosan
- ベストアンサー率23% (3656/15482)
正しく読み込めてるんですか?
お礼
ありがとうございました!
- kmee
- ベストアンサー率55% (1857/3366)
行列A,Bを読みこんでいる箇所が無いように見えるのですが
お礼
ありがとうございました!
補足
fscanf(fp1,"%d %d",&a[i][j],&b[i][j]); を入れてみてうまくいかなかったんですけど どのようにすればよいのでしょうか?
お礼
無事できました! ありがとうございました!