Решении системы линейных уравнений методом простой итерации - C (СИ)
Формулировка задачи:
Задача состоит в решении системы линейных уравнений методом простой итерации. Просьба указать на ошибки в коде. Заранее спасибо.
#include <stdio.h>
#include <stdlib.h>
void iter(double, int, int);
int main (void)
{
int i, j, n, d;
double a[n][n];
double x[i];
double b[i];
double xk[i];
double e=0.0001;
{
printf("Введите число уравнений системы\n");
scanf("%d", &n);
printf("Введите систему: \n");
for (i=0; i<n; ++i)
for (j=0; j<n; ++j)
scanf("%lf, &a[i][j])
printf("Введите столбец правых частей\n");
scanf("%lf"; &b[i]);
for (i=0; i<n; ++i)
x[i]=b[i];
for (i=0; i<n; ++i)
for (j=0; j<n; ++j)
{
b[i]/=a[i][i];
a[i][j]/=(-a[i][i]);
}
for (i=0; i<n; ++i)
for (j=0; j<n; ++j)
if (i==j)
a[i][j]=0;
for (i=0; i<n; ++i)
{
d=0;
s=0;
xk[i]=b[i];
{
for (j=0; j<n; ++J)
s+=a[i][j]*x[i];
x[i]=b[i]+s;
if (fabs(x[i]-xk[i])<0.0001)
d=1;
xk[i]=x[i];
}
while (d!=1);
}
for (i=0; i<n; ++i)
printf("%lf\n", x[i];
}
return;
}Решение задачи: «Решении системы линейных уравнений методом простой итерации»
textual
Листинг программы
#include <stdlib.h>
/*...*/
size_t rows, columns, i;
double ** array;
/*...*/
scanf("%u", &rows);
scanf("%u", &columns);
if ( ! ( array = malloc(sizeof(double*) * rows) ) ) {
perror("malloc");
exit(1);
}
for ( i = 0; i < rows; ++i ) {
if ( ! ( array[i] = malloc(sizeof(double) * columns) ) ) {
perror("malloc");
exit(1);
}
}
/*...*/
for ( i = 0; i < rows; ++i )
free(array[i]);
free(array);
exit(0);
Объяснение кода листинга программы
В этом коде:
- #include
Это включает в себя файл стандартной библиотеки C, который содержит функции для работы с памятью, такие как malloc и free. - size_t rows, columns, i; Эти переменные используются для хранения размеров матрицы и индекса текущего элемента.
- double array; Это объявление двумерного массива. double означает, что это массив указателей на массив типа double.
- scanf(
%u, &rows); Считывает целочисленное значение (unsigned int) в переменную rows. В данном случае, это количество строк матрицы. - scanf(
%u, &columns); Считывает целочисленное значение (unsigned int) в переменную columns. В данном случае, это количество столбцов матрицы. - if ( ! ( array = malloc(sizeof(double) rows) ) ) { Это пытается выделить память для массива указателей на double с помощью функции malloc. Если память не может быть выделена, код переходит к блоку if, где выводится сообщение об ошибке и программа завершается.
- for ( i = 0; i < rows; ++i ) { Это цикл, который проходит по каждой строке матрицы.
- *if ( ! ( array[i] = malloc(sizeof(double) columns) ) ) {** Это пытается выделить память для строки матрицы с помощью функции malloc. Если память не может быть выделена, код переходит к блоку if, где выводится сообщение об ошибке и программа завершается.
- for ( i = 0; i < rows; ++i ) Это цикл, который проходит по каждой строке матрицы.
- free(array[i]); Это освобождает память, выделенную для текущей строки матрицы.
- free(array); Это освобождает память, выделенную для массива указателей на double.
- exit(0); Это завершает программу без ошибок. Таким образом, этот код создает и инициализирует двумерный массив, считывает размеры матрицы, выделяет память для каждой строки и столбца, выполняет некоторую операцию (которая не указана в коде) и освобождает память.