ошибка матричного калькулятора - не работает должным образом - PullRequest
1 голос
/ 15 мая 2019

Мой код строит матричный калькулятор. У меня есть массив матриц, функция для построения матрицы, которая получает указатель на требуемую матрицу (один из 6) и указатель на массив параметров для входа в матрицу. другая функция - print_mat для печати матрицы.

Проблема в том, что у меня есть эти матрицы: MAT_A, MAT_B ...... MAT_F. когда я вводил параметры в MAT_X, он также показывал om MAT_X-1. например - если я добавлю параметры в MAT_B, то каким-нибудь образом обновится MAT_A.


MAT type definition: typedef double MAT[N][N];

MAT array:     MAT matrices[6];

printing matrix function: 

void print_mat(MAT * mat1){
int i=0,j=0;
printf("the matrix is:\n\n");
for(i=0;i<N;i++){
    for (int j = 0; j < N ; ++j){
        printf("%.2f    ",*mat1[i][j]);
        if (j==N-1) /* end of line, last parameter on this line so move to the next one */
            printf("\n");
    }
}

}

положить параметры в матричной функции:

void read_mat (MAT  *mat1 , double * parameters){
int i=0,j=0,index=0;
for(i=0;i<N;i++){
    for (int j = 0; j < N ; ++j){
        *(mat1)[i][j]=parameters[index];
        index++;
    }
}

}

Как я вызываю функции для использования: (соответствующие случаи - это случаи 0 и 1)

void execute(MAT *matrices,int *parameters, double *scalars, int command_index){
switch (command_index){
    case 0:
        read_mat(&matrices[parameters[0]],scalars);
        break;
    case 1:
        print_mat(&matrices[parameters[0]]);
        break;
    case 2:
        add_mat(&matrices[parameters[0]],&matrices[parameters[1]],&matrices[parameters[2]]);
        break;
    case 3:
        sub_mat(&matrices[parameters[0]],&matrices[parameters[1]],&matrices[parameters[2]]);
        break;
    case 4:
        mul_mat(&matrices[parameters[0]],&matrices[parameters[1]],&matrices[parameters[2]]);
        break;
    case 5:
        mul_scalar(&matrices[parameters[0]],scalars,&matrices[parameters[1]]);
        break;
    case 6:
        trans_mat(&matrices[parameters[0]],&matrices[parameters[1]]);
        break;
    default: /* stop command */
        stop();
        break;
}

}


команда: read_mat MAT_B, 1,2,3456, -7,89 команда: print_mat MAT_B результат: матрица: // (MAT_B)

1,00 2,35 -7,89 0,00

0,00 0,00 0,00 0,00

0,00 0,00 0,00 0,00

0,00 0,00 0,00 0,00

но в то же время MAT_A: команда: print_mat MAT_A

0,00 0,00 0,00 0,00

1,00 2,35 -7,89 0,00

0,00 0,00 0,00 0,00

0,00 0,00 0,00 0,00

(пока должны быть все нули)

1 Ответ

2 голосов
/ 15 мая 2019

Если вы хотите получить MAT, вам нужно

void print_mat(MAT mat1){ // same as void print_mat(double mat1[N][N]){

вместо

void print_mat(MAT * mat1){ // You don't want a pointer to a 2D array

, а здесь

printf("%.2f    ",*mat1[i][j]);

у вас нетвместо разыменования

printf("%.2f    ", mat1[i][j]);

То же самое для read_mat()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...