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