2016-12-07 3 views
-2

두 개의 3X3 행렬을 곱하는 프로그램을 작성 중입니다. 나는 몇 가지 문제에 부딪 쳤고 문제를 파악할 수 없다. DC++에서 3x3 행렬 곱하기

#include <iostream> 

using namespace std; 

int main(){ 

int matrix1[3][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; 
int matrix2[3][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; 
int results[3][3]; 
int product = 0; 
int i; 
int j; 

for (i = 1; i <= 3; i++){ 
    for (j = 1; j <= 3; j++){ 
     product += matrix1[i][j] * matrix2[j][i]; 
     cout << product << endl; 
    } 
    results[i][j] = product; 
    product = 0; 
} 

cout << endl << "Output Matrix: " << endl; 

for (int i = 1; i < 4; i++){ 
    for (int j = 1; j < 4; j++){ 
     cout << results[i][j]; 
    } 
    cout << endl; 
} 


system("pause"); 
return 0; 
} 

그리고 이것은 내가 나갈 결과입니다 : 어떤 도움을 주시면 감사하겠습니다 사전에 다시

25 
73 
-1717986851 
48 
129 
-858993331 
-1867771963 
1566576709 
1595991863 

Output Matrix: 
-858993460-858993460-858993460 
-1717986851-858993460-858993460 
-85899333112 
Press any key to continue . . . 

감사합니다! : D

+0

당신이 [] 행렬 1을 삭제'사용하는 이유는, '아소, 당신이 사용하는'new'을 만든 적이 있다면? –

+0

'results [i] [j] = product;'는 내부 루프 몸체 내부에 있어야합니다. –

+3

배열 인덱스가 0에서 크기 - 1로가는 것을 잊어 버리는 것처럼 보입니다. –

답변

0

처음에는 int i, j; 줄이 필요하지 않습니다. 컴파일러가 없으면 컴파일러에서 results[i][j] = product;이 잘못된 위치에 있다고 올바르게 알립니다. 또한 배열의 첫 번째 값은 A[1]이 아니라 A[0]에 있습니다. 행렬 곱셈에 대해서는 this을 읽어 보시기 바랍니다.
따라서이 솔루션은 다음과 같아야합니다

int matrix1[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; 
int matrix2[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; 
int results[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}; 

for (int i = 0; i < 3; i++) 
    for (int j = 0; j < 3; j++) { 
     for (int u = 0; u < 3; u++) 
      results[i][j] += matrix1[i][u] * matrix2[u][j]; 
    } 

cout << endl << "Output Matrix: " << endl; 

for (int i = 0; i < 3; i++) { 
    for (int j = 0; j < 3; j++) { 
     cout << results[i][j] << "."; 
    } 
    cout << endl; 
} 
+0

어떤 이유로 든 0시에 시작하는 것을 완전히 잊어 버렸습니다. 정말 고맙습니다 –

0

매트릭스 곱셈을위한 코드가 잘못되었습니다. 이 문자 그대로 구현 봐 :

for (i = 0; i < 3; i++){ 
    for (j = 0; j < 3; j++){ 
     product = 0; 
     for (k = 0; k < 3; k++){ 
      product += matrix1[i][k] * matrix2[k][j]; 
     } 
     matrix3[i][j] = product; 

    } 
} 
0

행렬 곱셈 (2 N의 X N 행렬에 대한) 다음과 같은 방법을 구현 : 이것은 당신에게 제품 result = matrix1 * matrix2를 반환합니다

for i = 1..N 
    for j = 1..N 
    result[i][j] = 0. 
    for k = 1..N 
     result[i][j] += matrix1[i][k] * matrix2[j][k] // "row times column" 
    end for 
    end for 
end for 

. C++에서는 예를 들어

for (int i = 0; i < N; i++) 

루프. 0부터 시작하여 N-1로 끝나야합니다 (그 때문에 <이 아닌 <=을 사용하는 것입니다). 귀하의 예에서는 int N = 3을 설정하십시오.

너만 이면 new마다 delete을 사용하십시오. 그러므로 행렬을 동적으로 할당하지 않으면 배열을 삭제할 필요가 없습니다.