2017-01-09 45 views
0

在我的程序即時通訊嘗試添加我的2D數組的一個子部分的值,從9乘9矩陣的3乘3的小方塊。我選擇這個小盒子的行和列的百分比除以3(模數3)。 (這意味着它需要像[0] [0],[0] [3]等等) 這樣的單元格,我希望這些單元格是框的右上角,然後再添加2行和列以使其適用於如果我們從[0] [0]開始,我們將添加[0-2] [0-2](3乘3箱)。我通過函數來​​計算(作爲使用函數的練習)。問題在於程序似乎只從該小框中獲取第一個單元格的值,並且當我嘗試在該小框的其餘部分上循環並添加它們的值時,它不會正確地(或在所有) 我想知道如果我的參數是錯誤的,或者即時通訊給功能錯誤的參數。 任何幫助,將不勝感激。傳入一個函數的一部分我的矩陣(二維數組)

//------------including section----------- 
#include <iostream> 
#include <cstdlib> 
//------------using section--------------- 
using std::cin; 
using std::cout; 
using std::endl; 
//-----our constants and variables--------- 
const int N=3; //initializing our rows and cols as constants 
int counter=0, arr[N*N][N*N]; 
int sumofrow=0, sumofcol=0,sumsquare=0; 
//-------prototypes---------------- 
void READ_MATRIX(int arr[][N*N]); 
bool issquare(int arr[][N*N],int row, int col); 
//-------main------------- 
int main() 
{ 
    //calling on the function to input our matrix 
    READ_MATRIX(arr); 

    //checking what functions returned 
    if(counter==0) 
     cout<<1; 
    else 
     cout <<0; 
    return EXIT_SUCCESS; 
} 
//-----functions-------- 
//----readmatrix------ 
void READ_MATRIX(int arr[][N*N]) 
{ 
    for (int row=0; row<N*N; row++) 
     for (int col=0; col<N*N; col++) { 
      cin >> arr[row][col]; 
      if (row%3==0&&col%3==0) 
       issquare(arr, row, col); 
     } 
} 
//---------issquare------------- 
bool issquare(int arr[][N*N],int row, int col) 
{ 
    sumsquare=0; 
    for (int r=0;r<3;r++) //trying to loop on values of array 
     for (int c=0;c<3;c++)//trying to loop { 
      //r+row(because row is passed into the function at 0,3,6) 
      //same for col. 
      sumsquare+=arr[r+row][c+col]; // this is where it goes wrong 
     } 
    //checking to see if sum reached a certain value.. 
    if (sumsquare==45) 
     return true; 
    else { 
     counter++; 
     return false; 
    } 
} 

回答

1

在接受它們之前,您正在添加值。例如,當功能READ_MATRIX()中的row = 0col = 0在您接受該3x3框下的所有值之前調用issquare()。如果您已將所有值初始化爲零,則唯一對您的總和起作用的值是第一個值,即arr[0][0]

您需要做的是觸發issquare()功能row = 2,4,8col = 2,4,8。在函數issquare()內部,將數組索引爲arr[row-r][col-c]

+0

這是偉大的!我意識到它只是輸出該小盒子中的第一個數字,但我會做出這些改變!謝謝老兄,非常感謝。 –

+1

我不認爲在相同函數內將讀數與屬性測量('issquare')結合是一個好主意(除非這些屬性對於讀取更多數據很重要,這在這裏不適用)。因此,應該避免這種概念混亂(閱讀和測量)。 – Walter

0

您的函數issquared正在您的數組的第一個元素上調用。

>>> 0 % 3 
0 

所以你試圖訪問數組以外的值。 澄清:他們尚未初始化,所以他們不屬於剛剛還沒有(這是一個過度簡化,這個問題是關於內存分配,我不知道你是否已經開始了)

更改行:

if (row%3==0&&col%3==0) 

要:

if ((row != 0 && col != 0) && (row%3 == 0 && col%3 == 0)) 

此外,我會建議做最後一個元素類似的檢查只是爲了確保你的小盒子在矩陣的邊界內。

+1

是的,這是非常有意義的,導致我的二維數組的其餘部分仍然沒有初始化。謝謝!如果我改變了這一點,那麼我將永遠無法檢查以0 0開頭的2d數組的左上角!但我明白你的意思和你的幫助是讚賞! –

1

錯誤是issquare()被稱爲之前它使用的值已被分配/讀取。在致電issquare()時,在該功能中使用的所有值中,只有arr[row][col]是已知的。

你要做的是首先完全讀取數據,只有然後看看他們的屬性。

+0

啊!你想說的是,當例如當row = 0和col = 0被傳入時,只有cell [0] [0]中的值被定義,並且rest仍然沒有被定義/初始化?謝謝!!這就說得通了 !! –

相關問題