Эта программа решает уравнения с 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