2012-03-06 4 views
-2

이것은 응답을 C에 저장하는 행렬 곱, 즉 C=A*B입니다. 그러면 C 값이 변경되지 않는 이유는 무엇입니까?왜이 C# 코드가 실패합니까?

각 열이 단일 스레드에서 평가되도록 병렬 프로그래밍에서이 메서드를 사용하기 때문에 각 열을 계산하는 특별한 방법을 사용합니다. 이전에 파스칼에서 이와 같은 것을 테스트했지만 C#에서는 모든 것이 잘못되었습니다.

참고 : 이것은 숙제를위한 것이며이 코드에는 아직 병행하지 않습니다.

class Program 
{ 
    private static int n = 2; 
    static int[,] A = new int[n, n]; 
    static int[,] B = new int[n, n]; 
    static int[,] C = new int[n, n]; 
    private static void Main(string[] args) 
    { 
     A[0, 0] = 2; A[0, 1] = 3; 
     A[1, 0] = 5; A[1, 1] = 1; 

     B[0, 0] = 3; B[0, 1] = 0; 
     B[1, 0] = 1; B[1, 1] = 0; 

     C[0, 0] = 0; C[0, 1] = 0; 
     C[1, 0] = 0; C[1, 1] = 0; 

     //Calculation 
     for (int z = 0; z < n; z++) 
     { 
      ComputeColumn(z); 
     } 
     PrintAnswer(C); 
     Console.ReadKey(); 
    } 
    private static void ComputeColumn(int n) 
    { 
     for (int i = 0; i < n; i++) 
     { 
      for (int k = 0; k < n; k++) 
      { 
       C[i, n] += (A[i, k] * B[k, n]); 
      } 
     } 
    } 
    private static void PrintAnswer(int[,] what) 
    { 
     for (int i = 0; i < n; i++) 
     { 
      for (int j = 0; j < n; j++) 
      { 
       Console.Write(what[i, j] + " "); 
      } 
      Console.WriteLine(); 
     } 
    } 
} 
+1

디버거를 사용하여 쉽게 문제를 진단 할 수 있습니다. – Msonic

+3

의사의 코를보십시오! – sap

+1

여기에 힌트가 있는데 C의 어느 셀에 변화가있을 것으로 예상됩니까? –

답변

4

내가이 상당히 빠르게 빛에 문제를 가져올 것이라고 생각

private static int NumberOfColumns = 2; 
ComputeColumn(int currentColumn) 

같은 더 의미있는 뭔가 n

private static int n = 2; 
ComputeColumn(int n) 

의 여러 용도로 이름을 변경하십시오.

+7

또는 "NumberOfColumns"와 같이 더 의미있는 것입니다. DO_NOT_WRITE_CONSTANTS_LIKE_IT_IS_STILL_1972. –

+0

@EricLippert lol이 동의했습니다. 왜 내가 A, B, C의 잠재적 감염이 아닌 다른 이유를 모르겠다. –

+0

그 스타일을 사용하는 것이 권장되는 유일한 시간은 Win32 상수에 대한 것이지만 이는 금속에 대한 일관성 때문입니다. 그렇지 않으면 전적으로 동의합니다. –

관련 문제