2012-08-28 411 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"; 
      }