// Это на Си, на С++ не составит труда перевести
#include
#include
#include
void slau_3(double [][3], double *, unsigned);
double determinant(double [][3]);
int main () {
double matrix[3][3], vector[3];
unsigned n, k;
setlocale(LC_CTYPE, "Russian_Russia.1251");
for (n = 0; n < 3; n++) {
k = n + 1;
printf("Введите через пробел: a%d%dx1 + a%d%dx2 + a%d%dx3 = b%d : ", k, k, k, k + 1, k, k + 2, k);
scanf_s("%Lf%Lf%Lf%Lf", &matrix[n][0], &matrix[n][1], &matrix[n][2], &vector[n]);
}
slau_3(matrix, vector, 3);
_getch();
return 0;
}
void slau_3(double a[][3], double * b, unsigned n) {
double det[4], temp[3][3], x1, x2, x3;
unsigned k, r, c;
for (k = 0; k <= n; k++) {
if (!k)
for (r = 0; r < n; r++)
for (c = 0; c < n; c++)
temp[r][c] = a[r][c];
else
for (c = 0; c < n; c++)
for (r = 0; r < n; r++)
if (k - 1 == c) temp[r][c] = b[r];
else temp[r][c] = a[r][c];
det[k] = determinant(temp);
}
if (det[0]) {
x1 = det[1] / det[0];
x2 = det[2] / det[0];
x3 = det[3] / det[0];
printf("\nx1 = %Lf\nx2 = %Lf\nx3 = %Lf\n", x1, x2, x3);
} else printf("\n\aСистема уравнений либо имеет бесконечное множество корней, \nлибо несоместная! ");
}
double determinant(double a[][3]) {
return a[0][0] * a[1][1] * a[2][2] +
a[0][1] * a[1][2] * a[2][0] +
a[1][0] * a[2][1] * a[0][2] -
a[0][2] * a[1][1] * a[2][0] -
a[0][1] * a[1][0] * a[2][2] -
a[1][2] * a[2][1] * a[0][0];
}