СЛАУ по Гауссу, чтение массива из файла - 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.

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

В этом коде реализован метод СЛАУ (системы линейных алгебраических уравнений) по Гауссу для решения системы уравнений. Список действий:

  1. Объявление переменных и типов данных.
  2. Инициализация матрицы a и вектора b для примера (если файл с данными не используется).
  3. Открытие файла с данными для чтения (если файл с данными используется).
  4. Чтение данных из файла в матрицу a и вектор b.
  5. Закрытие файла с данными.
  6. Открытие файла для записи результатов.
  7. Запись начальных значений матрицы a и вектора b в файл для последующего использования (прямой ход Гаусса).
  8. Выполнение прямого хода Гаусса.
  9. Выполнение обратного хода Гаусса.
  10. Запись решения в файл.
  11. Закрытие файла.
  12. Ввод данных для проверки результата (не используется в данном примере). В данном коде используются следующие переменные:
    • a: матрица размером 4x4 для хранения коэффициентов системы уравнений.
    • b: вектор размером 4x1 для хранения свободных членов системы уравнений.
    • n: размерность системы уравнений (в данном случае 4).
    • x: вектор размером 4x1 для хранения неизвестных значений системы уравнений.
    • i, j, k: целочисленные переменные для обозначения строк, столбцов и номеров уравнений.
    • r, g: переменные для хранения промежуточных значений при выполнении прямого и обратного ходов Гаусса.
    • f1, f2: файлы для чтения и записи данных. Код выполняет следующие действия:
  13. Считывает размеры системы уравнений из файла input.txt.
  14. Считывает коэффициенты системы уравнений и свободные члены из файла input.txt и записывает их в матрицу a и вектор b соответственно.
  15. Записывает начальные значения матрицы a и вектора b в файл data.txt.
  16. Выполняет прямой ход Гаусса, используя вложенные циклы для вычисления значений в столбцах.
  17. Выполняет обратный ход Гаусса, используя вложенные циклы для вычисления значений в строках.
  18. Записывает решение системы уравнений в файл data.txt.
  19. Ввод данных для проверки результата (не используется в данном примере).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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