СЛАУ по Гауссу, чтение массива из файла - Free Pascal
Формулировка задачи:
Помогите, пожалуйста, исправить. Выдаёт ошибку External:SIGFTP, никак не понимаю, что он просит и как исправить.
Листинг программы
- var
- a: array[1..4, 1..4] of real;
- b: array[1..4] of real;
- arr: array [1..4, 1..5] of real;
- x: array[1..5] of real;
- n, i, j, k: integer; r, g: real;
- f1,f2:text;
- begin
- assignfile(f1,'input.txt');
- reset(f1);
- assignfile(f2,'data.txt');
- rewrite(f2);
- n:=4;
- i := 0;
- while not Eof(f1) do begin
- j := 0;
- while not Eoln(f1) do begin
- Read(f1, arr[i,j]);
- Inc(j);
- end;
- ReadLn(f1);
- Inc(i);
- end;
- {for i:=1 to n do begin
- for j:=1 to n+1 do begin
- A[i,j] :=arr[i,j+1] ;
- B[i]:=arr[i,1];
- end;end;
- for i:=1 to n do
- x[i]:=0;}
- A[1,1]:=arr[1,2]; A[1, 2] := arr[1,3]; A[1, 3] := arr[1,4];A[1, 4] := arr[1,5];
- A[2,1]:= arr[2,2]; A[2, 2] := arr[4,3]; A[2, 3] := arr[2,4];A[2, 4] := arr[2,5];
- A[3,1]:= arr[3,2]; A[3, 2] := arr[4,3]; A[3, 3] := arr[3,4];A[3, 4] := arr[3,5];
- A[4,1]:= arr[4,2]; A[4, 2] := arr[4,3]; A[4, 3] := arr[4,4];A[4, 4] := arr[4,5];
- b[1] := arr[1,1]; b[2] := arr[2,1]; b[3] := arr[3,1];b[4] := arr[4,1];
- {writeln('Матрица A: ');
- for i := 1 to n do
- begin
- for j := 1 to n do
- begin
- write(a[i,j]:5:2);
- a1[i,j]:=a[i,j];
- end;
- writeln;
- end;
- writeln;
- Writeln('Матрица B: ');
- for i:=1 to n do
- writeln(b[i]);}
- for k := 1 to n do { прямой ход Гаусса }
- begin
- for j := k + 1 to n do
- begin
- r := a[j, k] / a[k, k];
- for i := k to n do
- begin
- a[j, i] := a[j, i] - r * a[k, i];
- end;
- b[j] := b[j] - r * b[k];
- end;
- end;
- for k := n downto 1 do { обратный ход Гаусса }
- begin
- r := 0;
- for j := k + 1 to n do
- begin
- g := a[k, j] * x[j];
- r := r + g;
- end;
- if a[k,k]<>0 then
- x[k] := (b[k]-r)/a[k,k]
- //else writeln(f2,'0!');
- end;
- //writeln('Корни системы:');
- for i := 1 to n do
- write(f2,'w[', i, ']=', x[i]:0:2, ' ');
- close(f1);close(f2);
- end.
Решение задачи: «СЛАУ по Гауссу, чтение массива из файла»
textual
Листинг программы
- {.$define NoFile}
- program SLAU;
- type
- TMatrix = array[1..4, 1..4] of real;
- TArray = array[1..4] of real;
- var
- {$ifdef NoFile}
- a: TMatrix = ((1, 1, 1, 1), (4, 3, 2, 1), (4, 1, 1, 4), (4, 1, 4, 1));
- b: TArray = (25, 20, 25, 22);
- n: integer = 4;
- {$else}
- a: TMatrix;
- b: TArray;
- n: integer;
- {$endif}
- x: TArray;
- i, j, k: integer;
- r, g: real;
- f1, f2: Text;
- begin
- {$ifndef NoFile}
- Assign(f1, 'input.txt');
- reset(f1);
- readln(f1, n);
- for i := 1 to n do
- begin
- for j := 1 to n do
- Read(f1, a[i, j]);
- readln(f1, b[i]);
- end;
- Close(f1);
- {$endif}
- Assign(f2, 'data.txt');
- rewrite(f2);
- for i := 1 to n do
- begin
- for j := 1 to n do
- Write(f2, a[i, j]: 0: 2, ' ');
- writeln(f2, b[i]: 0: 2);
- end;
- for k := 1 to n do { прямой ход Гаусса }
- begin
- for j := k + 1 to n do
- begin
- r := a[j, k] / a[k, k];
- for i := k to n do
- begin
- a[j, i] := a[j, i] - r * a[k, i];
- end;
- b[j] := b[j] - r * b[k];
- end;
- end;
- for k := n downto 1 do { обратный ход Гаусса }
- begin
- r := 0;
- for j := k + 1 to n do
- begin
- g := a[k, j] * x[j];
- r := r + g;
- end;
- x[k] := (b[k] - r) / a[k, k];
- end;
- for i := 1 to n do
- Write(f2, x[i]: 0: 2, ' ');
- readln;
- //write(f2,'w[', i, ']=', x[i]:0:2, ' ');
- Close(f2);
- end.
Объяснение кода листинга программы
В этом коде реализован метод СЛАУ (системы линейных алгебраических уравнений) по Гауссу для решения системы уравнений. Список действий:
- Объявление переменных и типов данных.
- Инициализация матрицы a и вектора b для примера (если файл с данными не используется).
- Открытие файла с данными для чтения (если файл с данными используется).
- Чтение данных из файла в матрицу a и вектор b.
- Закрытие файла с данными.
- Открытие файла для записи результатов.
- Запись начальных значений матрицы a и вектора b в файл для последующего использования (прямой ход Гаусса).
- Выполнение прямого хода Гаусса.
- Выполнение обратного хода Гаусса.
- Запись решения в файл.
- Закрытие файла.
- Ввод данных для проверки результата (не используется в данном примере).
В данном коде используются следующие переменные:
- a: матрица размером 4x4 для хранения коэффициентов системы уравнений.
- b: вектор размером 4x1 для хранения свободных членов системы уравнений.
- n: размерность системы уравнений (в данном случае 4).
- x: вектор размером 4x1 для хранения неизвестных значений системы уравнений.
- i, j, k: целочисленные переменные для обозначения строк, столбцов и номеров уравнений.
- r, g: переменные для хранения промежуточных значений при выполнении прямого и обратного ходов Гаусса.
- f1, f2: файлы для чтения и записи данных. Код выполняет следующие действия:
- Считывает размеры системы уравнений из файла input.txt.
- Считывает коэффициенты системы уравнений и свободные члены из файла input.txt и записывает их в матрицу a и вектор b соответственно.
- Записывает начальные значения матрицы a и вектора b в файл data.txt.
- Выполняет прямой ход Гаусса, используя вложенные циклы для вычисления значений в столбцах.
- Выполняет обратный ход Гаусса, используя вложенные циклы для вычисления значений в строках.
- Записывает решение системы уравнений в файл data.txt.
- Ввод данных для проверки результата (не используется в данном примере).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д