Нахождение матрицы 3x3 по методу Гаусса - C (СИ)
Формулировка задачи:
Здравствуйте! У меня проблема, она заключается в том, что программа работает, выдает правильные ответы, но при выводе матриц нули не выводятся, а вместо элемента с индексом 3 1 выводится огроменное число. Где ошибка?
// Нахождение матрицы 3x3 по методу Гаусса
#include <stdio.h>
#include <locale.h>
int main()
{
setlocale(0, "rus");
int m[4][4], // матрица пользователя
b[4], // вторая матрица
nm[5][5], nb[5]; // полученные матрица
int i,j;
double x, y, z, z1, y1;
printf("\t\t\t Нахождение матрицы по методу Гауссу (3x3)\n\n\n");
//Ввод первой матрицы
for(i = 1; i < 4; ++i )
{
for(j = 1; j < 4; ++j)
{
printf("Введите элемент матрицы a[%d][%d]: ", i, j);
scanf("%d", &m[i][j]);
}
}
printf("\n\n");
//Ввод второй матрицы
for(i = 1; i < 4; ++i)
{
printf("Введите элементы второй матрицы: ");
scanf("%d", &b[i]);
}
printf("\n\n");
// изменение первой матрицы
for(i = 1; i < 4; ++i)
{
nm[1][i] = m[1][i];
nm[2][i] = (m[1][1] * m[2][i]) - (m[2][1] * m[1][i]);
nm[4][i] = (m[1][1] * m[3][i]) - (m[3][1] * m[1][i]);
}
for(i = 2; i < 4; ++i)
{
nm[3 ][i] = (nm[2][2] * nm[4][i]) - (nm[4][2] * nm[2][i]);
}
// изменение второй матрицы
nb[1] = b[1];
nb[2] = (m[1][1] * b[2]) - (m[2][1] * b[1]);
nb[4] = (m[1][1] * b[3]) - (m[3][1] * b[1]);
nb[3] = (nm[2][2] * nb[4]) - (nm[4][2] * nb[2]);
//Вывод полученных матриц
for( i = 1; i < 4; ++i)
{
for(j = 1; j < 4; ++j)
{
printf("%5.d ", nm[i][j]);
}
wprintf(L"%c ", '\x7C');
printf("%2.d", nb[i]);
wprintf(L"\n%19.c\n", (i != 3)?'\x7C': ' ');
}
printf("\n\n");
z= nb[3] / nm[3][3];
printf(" z = %g\n", z);
z1 = (z * nm[2][3]) * (-1);
y = (nb[2] + z1) / nm[2][2];
printf(" y = %g\n", y);
y1 = ((y * nm[1][2]) + (z * nm[1][3])) * (-1);
x = (nb[1] + y1) / nm[1][1];
printf(" x = %g\n", x);
return 0;
}Решение задачи: «Нахождение матрицы 3x3 по методу Гаусса»
textual
Листинг программы
nm[3][1] = 0;