0

私は行列を操作するための簡単なプログラムを持っていますが、問題があります->たとえばarray[3] [3]があり、次元数を取得する方法が必要です-この場合は3です。コードは次のとおりです:

#include <stdio.h>
#include <stdlib.h>

int **count()
{
    printf("Write number of rows and collumns in format ROWS space COLLUMNS");
    int i = 0;
    int j = 0;
    scanf("%i %i", &i, &j);
    int **mat1 = (int**)malloc(i*sizeof(int*));
    for (int x = 0; x < j;x++){
        mat1[x] = (int*)malloc(j*sizeof(int));
    }
    for (int x = 0; x < i;x++){
        for (int y = 0; y < j;y++){
            scanf("%i",&mat1[x][y]);
        } 
    }

    printf(Write number of rows and collumns in format ROWS space COLLUMNS");
    int i2 = 0,j2 = 0;
    scanf("%i %i", &i2, &j2);
    int **mat2 = (int**)malloc(i2*sizeof(int*));
    for (int x2 = 0; x2 < j2;x2++){
        mat2[x2] = (int*)malloc(j2*sizeof(int));
    }
    for (int x2 = 0; x2 < i2;x2++){
        for (int y2 = 0; y2 < j2;y2++){
            scanf("%i",&mat2[x2][y2]);
        } 
    }

    int i3 = i, j3 = j; 
    int **mat3 = (int**)malloc(i3*sizeof(int*));
    for (int x = 0; x < j3;x++){
        mat3[x] = (int*)malloc(j3*sizeof(int));
    }

    for (int x3 = 0; x3 < i3;x3++){
        for (int y3 = 0; y3 < j3;y3++){
            mat3[x3][y3] = mat1[x3][y3] + mat2[x3][y3];
        } 
    }
    return mat3;
}

int writeMatrix(int **mat, int rows, int collumns)
{
        int i = rows, j=collumns;
        for (int x = 0; x < i;x++){
            for (int y = 0; y < j;y++){
                printf("%3i ",mat[x][y]);
                }
            printf("\n");
        }
        return 0;
}



int main()
{


    int **m1 = count();
    writeMatrix(m1,x,x);//HERE I NEED TO KNOW NUMBER OF ROWS AND COLLUMNS
    free(m1);
}

これは、通常の配列[] []の場合に私のために働いたコードですが、この場合ではありません-

int y = (sizeof(m1)/sizeof(m1[0][0])) / (sizeof(m1)/sizeof(m1[0]));
4

1 に答える 1

0

最初の次元のサイズを静的に知らない場合、多次元配列を持つことはできません。あなたが行ったように、ギザギザの配列 (配列の配列) が必要になります。

そして、割り当てられた行と列の数を取得できます。countプロトタイプを次のように変更します。

int** count(int& rows, int& columns)

その中で、これらの割り当てを行います (i と j の値を読み取った後)。

rows = i;
columns = j;

そして、次のように呼び出しcountますmain

int rows;
int columns;
int** m1 = count(rows, columns);

次に、writeMatrix を呼び出すことができます。

writeMatrix(m1, rows, columns);

ところで、これを教育目的で行っている場合を除き、std::vector<std::vector<int>>int** ではなく (または同様の配列クラス) を使用する必要があります。

于 2012-10-22T08:50:03.577 に答える