在我的程序中,我试图添加我的2d数组的子部分的值,一个9×9矩阵的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;
}
}
答案 0 :(得分:1)
错误是issquare()
在>>之前被称为,它所使用的值已被分配/读取。在调用issquare()
时,在该函数中使用的所有值中,只知道arr[row][col]
。
您要做的是首先完全读取数据,只有然后查看其属性。
答案 1 :(得分:1)
您在接受之前添加值。例如,当函数row = 0
中的col = 0
和READ_MATRIX()
时,您会在issquare()
框下的所有值都被接受之前调用3x3
。如果您已将所有值初始化为零,则对您的总和有贡献的唯一值是第一个值,即arr[0][0]
。
您需要做的是触发issquare()
和row = 2,4,8
的{{1}}功能。在函数col = 2,4,8
内,将数组索引为issquare()
。
答案 2 :(得分:0)
issquared
将在数组的第一个元素上调用。>>> 0 % 3
0
所以你试图访问数组之外的值。 澄清:它们尚未初始化,因此它们尚未属于到您的阵列中(这是一个过度简化,问题与内存分配有关,我不知道知道你是否已经开始了)
更改行:
if (row%3==0&&col%3==0)
要:
if ((row != 0 && col != 0) && (row%3 == 0 && col%3 == 0))
此外,我建议对最后一个元素进行类似检查,以确保您的小方框位于矩阵的边界内。