2012-08-28 298 views
0

请指教我下一期。我试图乘以2矩阵,并且在我的代码中存在一些我无法识别的逻辑错误。请帮忙。预先感谢您矩阵乘法

#include <iostream> 
#include <cstdio> 

using namespace std; 

int main() { 
    short int Mtx_A[4][2] = { 
     {1,2}, 
     {3,4}, 
     {5,6}, 
     {7,8}, 
    }; 

    short int Mtx_B[2][3] = { 
     {5,7,9}, 
     {11,2,6}, 
    }; 

    short int Mtx_res[4][3] = {0}; 

    for (short int i = 0;i<4;i++) {   // Mtx_A lines counter 
     for (short int j=0;j<2;j++) {  // Mtx_B lines & Mtx_A columns counter 
      for (short int k=0;k<3;k++) { // Mtx_res columns counter 
       Mtx_res[i][k] += Mtx_A[i][j] * Mtx_B[j][k]; 
       cout<< Mtx_res[i][k] <<"*"<<"\t"; 
      } 
      cout<<"o"<<"\n"; 
     } 
    } 

    getchar(); 
    return 0; 
} 
+5

听起来像作业......是吗? –

+0

我没有看到任何直接的逻辑错误,但我在您的矩阵定义中看到了一些不必要的逗号。在{7,8}和{11,2,6}之后删除逗号 –

+0

这种逻辑错误表达自己的方式。它是否编译?它运行吗?它打印出意外的输出吗?它打印什么输出?你期望输出什么? –

回答

4

创建您的数组的逻辑是正确的,但输出是错误的。

矩阵结果是二维的,但是您正在编写三个维度。

输出必须等到该过程完成。

1

您尚未完成时即开始输出结果矩阵。实际上,您将分别输出Mtx_Res的两个单元格,分别为j = 0和1(因此8x3而不是4x3,如您所说)。

我会做在一个单独的环路的输出(后Mtx_Res施工环是以上):

for (int i = 0; i < 4; i++) { 
    for (int j = 0; j < 3; j++) { 
    cout << Mtx_res[i][j] << "*" << "\t"; 
    } 
    cout << "o" << "\n"; 
} 

事实上,我认为这是一个(通常)有用的技术:从显示单独的处理。诚然,有时你应该为了效率而同时进行这些工作,但更多的时候,以简单方式赢得的时间对于您和您的客户来说都将更为珍贵。 )

1

在处理完所有j指数后,您可以更改输出以发出单元格。在所有k指数也被处理后,您输出中的下一行会继续。

  Mtx_res[i][k] += Mtx_A[i][j] * Mtx_B[j][k]; 
      if (j == 1) { 
       cout<< Mtx_res[i][k] <<"*"<<"\t"; 
       if (k == 2) cout<<"o"<<"\n"; 
      }