Решении системы линейных уравнений методом простой итерации - 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); Это завершает программу без ошибок. Таким образом, этот код создает и инициализирует двумерный массив, считывает размеры матрицы, выделяет память для каждой строки и столбца, выполняет некоторую операцию (которая не указана в коде) и освобождает память.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д