Вылетает borland при решение СЛАУ методом Гаусса. - C (СИ)
Формулировка задачи:
Написал программу по алгоритму(приложен к теме), но при запуске borland вылетает. Помогите, пожалуйста.
#include <stdio.h> #include <math.h> #include <stdlib.h> #include <conio.h> double i, m, t, j, k, ch, max, S; const int n=4; void main() { clrscr(); double a[3][4]; double x[4]; // printf ("\nVvodim koefficienti uravneniy:\n"); // для тестирования a[0][0]=1; a[0][1]=2; a[0][2]=0-1; a[0][3]=0; a[0][4]=8; a[1][0]=0; a[1][1]=1; a[1][2]=3; a[1][3]=1; a[1][4]=15; a[2][0]=4; a[2][1]=0; a[2][2]=1; a[2][3]=1; a[2][4]=11; a[3][0]=1; a[3][1]=1; a[3][2]=0; a[3][3]=5; a[3][4]=23; /* for (i=0;i<n;i++) for (j=0;j<n;j++) { scanf ("\n%lf", &a[i][j]); }*/ for (i=1;i<n;i++) { max=abs(a[i][i]); k=i; for (j=1;j<n;j++) { if (abs(a[j][i])>max) { max=abs(a[j][i]); k=j; } if (k!=i) { for(m=i;m<n+1;m++) { t=a[i][m]; a[i][m]=a[k][m]; a[k][m]=t; } } for (j=n+1;j>i;j--) { a[i][j]=a[i][j]/a[i][i]; } for (k=i+1;k<n;k++) { for (m=n+1;m>i;m--) { a[k][m]=a[k][m]-a[k][i]*a[i][m]; } } } } for (i=n;i>1;i--) { S=a[i][n+1]; for (j=i+1;j<n;j++) { S=S-a[i][j]*x[j]; } x[i]=S; } for (i=1;i<n;i++) { printf ("\n%lf", x[i]); } }
Решение задачи: «Вылетает borland при решение СЛАУ методом Гаусса.»
textual
Листинг программы
#include <stdio.h> #include <math.h> #include <stdlib.h> #include <conio.h> double t, ch, max, S; int i, j, m, k; const int n=4; void main() { // clrscr(); double a[4][5]; double x[4]; // printf ("\nVvodim koefficienti uravneniy:\n"); // для тестирования a[0][0]=1; a[0][1]=2; a[0][2]=0-1; a[0][3]=0; a[0][4]=8; a[1][0]=0; a[1][1]=1; a[1][2]=3; a[1][3]=1; a[1][4]=15; a[2][0]=4; a[2][1]=0; a[2][2]=1; a[2][3]=1; a[2][4]=11; a[3][0]=1; a[3][1]=1; a[3][2]=0; a[3][3]=5; a[3][4]=23; /* for (i=0;i<n;i++) for (j=0;j<n;j++) { scanf ("\n%lf", &a[i][j]); }*/ for (i=1;i<n;i++) { max=fabs(a[i][i]); k=i; for (j=1;j<n;j++)// внешний цикл по j { if (fabs(a[j][i])>max) { max=fabs(a[j][i]); k=j; } } if (k!=i) { for(m=i;m<n+1;m++) { t=a[i][m]; a[i][m]=a[k][m]; a[k][m]=t; } } for (j=n+1;j>i;j--)// внутренний цикл изменяет значение j и поэтому программа зависает { a[i][j]=a[i][j]/a[i][i]; } for (k=i+1;k<n;k++) { for (m=n+1;m>i;m--) { a[k][m]=a[k][m]-a[k][i]*a[i][m]; } } } for (i=n;i>1;i--) { S=a[i][n+1];// будет обращаться и к такому элементу: a[4][5] - выход за границы массива for (j=i+1;j<n;j++) { S=S-a[i][j]*x[j];// будет обращаться и к такому элементу: x[5] - выход за границы массива } x[i]=S; } for (i=1;i<n;i++) { printf ("\n%lf", x[i]); } }
Объяснение кода листинга программы
В этом коде решается система линейных уравнений методом Гаусса. Вот список действий, которые происходят в коде:
- Вводятся коэффициенты системы линейных уравнений.
- Выполняется перестановка строк матрицы a, чтобы получить эквивалентную систему с верхнетреугольной матрицей.
- Выполняется обратное подстановление, чтобы найти значения переменных x.
- Выводятся значения переменных x.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д