Решении системы линейных уравнений методом простой итерации - 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);

Объяснение кода листинга программы

В этом коде:

  1. #include Это включает в себя файл стандартной библиотеки C, который содержит функции для работы с памятью, такие как malloc и free.
  2. size_t rows, columns, i; Эти переменные используются для хранения размеров матрицы и индекса текущего элемента.
  3. double array; Это объявление двумерного массива. double означает, что это массив указателей на массив типа double.
  4. scanf(%u, &rows); Считывает целочисленное значение (unsigned int) в переменную rows. В данном случае, это количество строк матрицы.
  5. scanf(%u, &columns); Считывает целочисленное значение (unsigned int) в переменную columns. В данном случае, это количество столбцов матрицы.
  6. if ( ! ( array = malloc(sizeof(double) rows) ) ) { Это пытается выделить память для массива указателей на double с помощью функции malloc. Если память не может быть выделена, код переходит к блоку if, где выводится сообщение об ошибке и программа завершается.
  7. for ( i = 0; i < rows; ++i ) { Это цикл, который проходит по каждой строке матрицы.
  8. *if ( ! ( array[i] = malloc(sizeof(double) columns) ) ) {** Это пытается выделить память для строки матрицы с помощью функции malloc. Если память не может быть выделена, код переходит к блоку if, где выводится сообщение об ошибке и программа завершается.
  9. for ( i = 0; i < rows; ++i ) Это цикл, который проходит по каждой строке матрицы.
  10. free(array[i]); Это освобождает память, выделенную для текущей строки матрицы.
  11. free(array); Это освобождает память, выделенную для массива указателей на double.
  12. exit(0); Это завершает программу без ошибок. Таким образом, этот код создает и инициализирует двумерный массив, считывает размеры матрицы, выделяет память для каждой строки и столбца, выполняет некоторую операцию (которая не указана в коде) и освобождает память.

Оцени полезность:

6   голосов , оценка 4.5 из 5
Похожие ответы