Подпрограмма не дает правильного вывода в следующих вызовах после первого вызова, есть ли способ это исправить? - PullRequest
0 голосов
/ 20 марта 2020

Эта программа решает уравнения с 3 неизвестными членами, xy и z, используя определители. Это достигается путем заполнения массива 2d размерами [3,4] элементами, которые пользователь определяет. После заполнения основной матрицы программа заполняет 4 [3,3] матрицы неизвестными элементами, после чего в 3 из 4 матриц заменяют столбцы решениями основной матрицы. Подпрограмма определяет определители меньших матриц с правилом Сарруса. Вот где начинается проблема. Он вычисляет основной определитель матрицы, но не может сделать то же самое для других матриц после этого. Как я могу изменить подпрограмму, чтобы она делала это для остальных матриц?

Код подпрограммы:

int d = 0;
int det(int n, int mat[3][3])
{
int c, subi, i, j, subj;
int submat[3][3];  
if(n == 2) {
            return( (mat[0][0] * mat[1][1]) - (mat[1][0] * mat[0][1]));
            }
else{  
    for(c = 0; c < n; c++){  
            subi = 0;  
            for(i = 1; i < n; i++){  
                subj = 0;
                for(j = 0; j < n; j++){    
                    if (j == c){
                        continue;
                    }
                    submat[subi][subj] = mat[i][j];
                    subj++;
                }
                subi++;
            }
        d = d + (pow(-1 ,c) * mat[0][c] * det(n - 1 ,submat));
        }
    }
    return d;
}

Часть, которая отображает / вызывает подпрограмму:

Det=det(n,mat1);
cout<<Det<<endl;
Det1=det(n,mat2);
cout<<Det1<<endl;
Det2=det(n,mat3);
cout<<Det2<<endl;
Det3=det(n,mat4);
cout<<Det3<<endl;
cout<<Det1/Det<<" ";
cout<<Det2/Det<<" ";
cout<<Det3/Det;

Это уравнения, которые я использовал в качестве тестового ввода:

3x + 4y + 1z = 7
4x + 2y + 3z =16
2x + 5y + 4z =9

И предполагаемые выходы: x = 3, y = -1, z = 2

Мои результаты: x = 4, y = 3, z = 5

...