2017-04-23 52 views
-4

我的任務是替換對角線矩陣上的向量元素和元素。矢量由用戶輸入並且矩陣是隨機的。例如,我寫的矢量:使用malloc和指針替換矩陣中的向量

1 2 3 

和隨機矩陣是

7 0 0 
0 3 0 
0 0 8 

我一定要得到這個

1) 7 3 8 



2) 

    1 0 0 
    0 2 0 
    0 0 3 

它的第一部分我得到了,但第二個我」 m堆疊。這裏是進入向量:

int size; 

    std::cout << ("Enter the dimentoinal of vector and matrix (enter one number): "); 
    std::cin >> size; 
    int * arrayPtr = (int*) calloc(size,sizeof(int)); 

    if (arrayPtr == NULL) exit (1);     

    for (int ix = 0; ix < size; ix++)     
    { 
    std::cout << "Enter element #" << ix<< " "; 
    std::cin >> arrayPtr[ix]; 

    } 
system ("clear") ; 
    std::cout << "\n\nResulting vector is:\n[ "; 
    for (int ix = 0; ix < size; ix++)  
    {    
     std::cout << arrayPtr[ix] << " "; 
    } 
     cout << "]\n\n\n" ; 

這裏是代碼,完全不工作(在屏幕上是不正確的結果):

cout << "The new matrix is :\n" ; 
int * matr_n = (int*) calloc(size,sizeof(int)); 

    cout << "\n" ; 
    for (int ix = 0 ; ix<size; ix++) 
    { 
     matr_n = &arrayPtr[ix] ; 
     cout << *matr_n << " " ; 

     for (int i = 0; i<size; i++) 
     { 
      cout << "\n" ; 
      for (int j = 0; j<size; j++) 
      { 
       if (i==j) 
        { 
        cout << *matr_n << " " ; 
        } 
       else 
       cout << 0 << " " ; 

      } 
     } 
} 

我知道問題出在使用指針或的malloc /釋放calloc功能,但初學者很難趕上它。 你能解決它嗎?

+1

** **縮進你爲基督的緣故代碼。 – gsamaras

+2

*爲什麼*你想在C++中使用'malloc'?這幾乎總是一個壞主意 – UnholySheep

+1

*「你可以修復它,請嗎?」 - 使用'std :: vector'。 –

回答

0

打印矩陣的內部for-loop應與計算其值的循環分開。

換句話說,你需要更改代碼的底部如下:

for (int ix = 0; ix < size; ix++) 
{ 
    matr_n = &arrayPtr[ix]; 
    std::cout << *matr_n << " "; 
} 
for (int i = 0; i<size; i++) 
{ 
    std::cout << "\n"; 
    for (int j = 0; j<size; j++) 
    { 
     if (i == j) 
     { 
      std::cout << *matr_n << " "; 
     } 
     else 
      std::cout << 0 << " "; 

    } 
} 
+0

@lbezito如果我的向量是1 2 3我在屏幕上得到這個:3的對角矩陣 –