2015-03-30 48 views
-4

我必須實現一個代碼來生成二維數組。給定N和L是數組的大小。我需要生成矩陣A,如如何用C++以簡單的方式返回二維數組

for i=1 to N 
for j=1 to L 
    if(random(0,1)>0.5) 
    A[i][j]=1; 
    else 
    A[i][j]=0; 
    end 
end 
end 

讓我們調用上面的所有代碼是intial()函數。讓N = 10; L = 100;如何使功能初始()返回一個二維數組答:謝謝 這是我的代碼

const int N=10; 
const int L=100; 
int A[N][L]; 

int [][] initialization() 
{ 
    for (int i=0;i<10;i++) 
    for (int j=i;j<100;j++) 
     { 
     if(random(0,1)>0.5) 
     A[i][j]=1; 
     else 
     A[i][j]=0; 
     } 
    return A; 
} 
+1

請標註具體的語言時顯示簡潔的代碼樣本。也可以選擇一個c或C++。這對適用的解決方案有很大的不同。 – 2015-03-30 17:43:15

+0

在調用函數中定義數組,然後將該數組作爲參數傳遞給initial() – JerryGoyal 2015-03-30 17:43:31

+0

這取決於「A」是什麼。它是一個數組的數組,還是指針數組(與您的代碼無法區分)? – cmaster 2015-03-30 17:43:55

回答

2

您已經申報了二維數組

const int N=10; 
const int L=100; 
int P[N][L]; 

所以聲明函數像

void initial(int a[][L], size_t n); 

,並調用它像

initial(P, N); 

或者在C++中,你可以這樣定義

void initial(int (&a)[N][L]); 

功能甚至您可以返回參考陣列

int (& initial(int (&a)[N][L]))[N][L]; 

如果N和L不是常數,那麼也許是更好地使用std::vector<std::vector<int>>代替的陣列。

或者如果在編譯時已知列的數量,那麼你可以定義一個std :: array的向量。例如

std::vector<std::array<int, L>> 

如果是必須創建數組的函數,那麼您可以動態分配一個數組。有兩種方法。第一個

int ** initial(size_t n, size_t m) 
{ 
    int **a = new int * [n]; 

    for (size_t i = 0; i < n; i++) a[i] = new int [m]; 

    return a; 
} 

該功能是不安全的,因此最好使用智能指針像std::unique_ptr

或者如果列的數量是恆定的,然後

int (* initial(size_t n))[L] 
{ 
    int (*a)[L] = new int [n][L]; 

    return a; 
} 
+0

對不起。讓我看看我的更新問題。我錯過了A和P – Jame 2015-03-30 17:58:38

+0

@ user8430我還沒有理解你,但看到我更新後的帖子。 – 2015-03-30 18:06:28

+0

前面的代碼,我用符號P表示int P [N] [L]。但是,這是錯誤的。它必須是int A [N] [L]; – Jame 2015-03-30 18:07:43