#include #include #include #include using namespace std; int main(int argc, char *argv[]) { //変数の宣言。 int mtx1[20][20], mtx2[20][20], mtx3[20][20]; int n, i, j, k; //コマンドライン引数が2つでない場合は,使用法を表示して終了する。 if(argc != 3) { cerr << "Usage: mm \n"; return 1; } //ファイル1を開く。エラーの場合はその旨表示して終了する。 ifstream fin1(argv[1]); if(!fin1) { cerr << "Can't open file1!\n"; return 1; } //ファイル1の内容の読み込み。 fin1 >> n; //行列の行・列数の読み込み。 for(j=1; j<=n; j++) { for(i=1; i<=n; i++) { fin1 >> mtx1[i][j]; //行列各要素の読み込み。 } } fin1.close(); //ファイル1を閉じる。 //ファイル2を開く。エラーの場合はその旨表示して終了する。 ifstream fin2(argv[2]); if(!fin2) { cerr << "Can't open file2!\n"; return 1; } fin2 >> n; //行列の行・列数の読み込み。 for(j=1; j<=n; j++) { for(i=1; i<=n; i++) { fin2 >> mtx2[i][j]; //行列各要素の読み込み。 } } fin2.close(); //ファイル2を閉じる。 //結果を入れるための配列には、あらかじめ0を入れておく。 for(j=1; j<=n; j++) { for(i=1; i<=n; i++) { mtx3[i][j] = 0; } } //行列の掛け算を実行。 for(j=1; j<=n; j++) { for(i=1; i<=n; i++) { for(k=1; k<=n; k++) { mtx3[i][j] += mtx2[i][k] * mtx1[k][j]; } } } //結果を標準出力に出力。 cout << n << "\n"; //行・列数の出力。 for(j=1; j<=n; j++) { for(i=1; i<=n; i++) { cout << mtx3[i][j]; //行列各要素の出力。 if(i < n) { cout << "\t"; //各列はタブで区切る。 } } cout << "\n"; //各行は改行で区切る。 } return 0; //戻り値として0を返す。 } //プログラムの終わり。