1

C で書き直したいこのコードが与えられました。目的は、行列 A と B を乗算することです。

for i := 1 to n do
    for j := 1 to n do
    begin
        C[i,j] := 0;
        for k := 1 to n do
            C[i,j] := C[i,j] + A[i,k]*B[k,j]
    end;

私のCへの翻訳:

int main(int argc, const char * argv[])
{
    int n = 2; //for testing
    int i = n;
    int j = n;
    int k = n;

    int A[i][k];
    int B[k][j];
    int C[i][j];

    for (int i=0; i<n; i++)
    {
        for (int j=0; j<n; j++)
        {
            C[i][j]=0;
            for (int k=0; k<n; k++)
            {
                C[i][j] = C[i][j]+A[i][k]*B[k][j];
                printf("A[%d][%d]*B[%d][%d]\n", i, k, k, j);
            }
            printf("\n");
        }
    }
}

ただし、テストすると、n^3 の出力が得られます。上記の疑似コードのコーディングでエラーが発生しましたか? さらに、始まりと終わりは何ですか。表すと思いますか?

4

2 に答える 2

2

PascalVSによく似てるC

for i := 1 to n do
  for j := 1 to n do
  begin  
    C[i,j] := 0;
    for k := 1 to n do
      C[i,j] := C[i,j] + A[i,k]*B[k,j]
  end;

"begin and end" は "{" と "}" に相当するパスカルです。

for (i = 1; i<= n; i++) {
  for (j = 1; j<= n; j++) {
    C[i][j] = 0;
    for (k = 1; k<= n; k++) {
      // Leave printf here to see O(n^3) computations
      C[i][j] += A[i][k]*B[k][j] ;
    }
    // Move printf outside of inner loop to only see n^2 results.
    // printf("A[%d][%d]*B[%d][%d]\n", i, k, k, j);
    printf("C[%d][%d] = %d\n", i, j, C[i][j]);
  }
}

doubleよりもOPを使用したい場合がありintます。

于 2013-10-15T21:34:25.150 に答える