将函数传递给矩阵的一部分(2d数组)

时间:2017-01-09 16:45:01

标签: c++ arrays function multidimensional-array

在我的程序中,我试图添加我的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;
    }
}

3 个答案:

答案 0 :(得分:1)

错误是issquare()在>之前被称为,它所使用的值已被分配/读取。在调用issquare()时,在该函数中使用的所有值中,只知道arr[row][col]

您要做的是首先完全读取数据,只有然后查看其属性。

答案 1 :(得分:1)

您在接受之前添加值。例如,当函数row = 0中的col = 0READ_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))

此外,我建议对最后一个元素进行类似检查,以确保您的小方框位于矩阵的边界内。