СЛАУ по Гауссу, чтение массива из файла - 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.
- Ввод данных для проверки результата (не используется в данном примере).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д