СЛАУ по Гауссу, чтение массива из файла - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Помогите, пожалуйста, исправить. Выдаёт ошибку External:SIGFTP, никак не понимаю, что он просит и как исправить.
Листинг программы
  1. var
  2. a: array[1..4, 1..4] of real;
  3. b: array[1..4] of real;
  4. arr: array [1..4, 1..5] of real;
  5. x: array[1..5] of real;
  6. n, i, j, k: integer; r, g: real;
  7. f1,f2:text;
  8. begin
  9. assignfile(f1,'input.txt');
  10. reset(f1);
  11. assignfile(f2,'data.txt');
  12. rewrite(f2);
  13. n:=4;
  14. i := 0;
  15. while not Eof(f1) do begin
  16. j := 0;
  17. while not Eoln(f1) do begin
  18. Read(f1, arr[i,j]);
  19. Inc(j);
  20. end;
  21. ReadLn(f1);
  22. Inc(i);
  23. end;
  24. {for i:=1 to n do begin
  25. for j:=1 to n+1 do begin
  26. A[i,j] :=arr[i,j+1] ;
  27. B[i]:=arr[i,1];
  28. end;end;
  29. for i:=1 to n do
  30. x[i]:=0;}
  31. A[1,1]:=arr[1,2]; A[1, 2] := arr[1,3]; A[1, 3] := arr[1,4];A[1, 4] := arr[1,5];
  32. A[2,1]:= arr[2,2]; A[2, 2] := arr[4,3]; A[2, 3] := arr[2,4];A[2, 4] := arr[2,5];
  33. A[3,1]:= arr[3,2]; A[3, 2] := arr[4,3]; A[3, 3] := arr[3,4];A[3, 4] := arr[3,5];
  34. A[4,1]:= arr[4,2]; A[4, 2] := arr[4,3]; A[4, 3] := arr[4,4];A[4, 4] := arr[4,5];
  35. b[1] := arr[1,1]; b[2] := arr[2,1]; b[3] := arr[3,1];b[4] := arr[4,1];
  36. {writeln('Матрица A: ');
  37. for i := 1 to n do
  38. begin
  39. for j := 1 to n do
  40. begin
  41. write(a[i,j]:5:2);
  42. a1[i,j]:=a[i,j];
  43. end;
  44. writeln;
  45. end;
  46. writeln;
  47. Writeln('Матрица B: ');
  48. for i:=1 to n do
  49. writeln(b[i]);}
  50. for k := 1 to n do { прямой ход Гаусса }
  51. begin
  52. for j := k + 1 to n do
  53. begin
  54. r := a[j, k] / a[k, k];
  55. for i := k to n do
  56. begin
  57. a[j, i] := a[j, i] - r * a[k, i];
  58. end;
  59. b[j] := b[j] - r * b[k];
  60. end;
  61. end;
  62. for k := n downto 1 do { обратный ход Гаусса }
  63. begin
  64. r := 0;
  65. for j := k + 1 to n do
  66. begin
  67. g := a[k, j] * x[j];
  68. r := r + g;
  69. end;
  70. if a[k,k]<>0 then
  71. x[k] := (b[k]-r)/a[k,k]
  72. //else writeln(f2,'0!');
  73. end;
  74. //writeln('Корни системы:');
  75. for i := 1 to n do
  76. write(f2,'w[', i, ']=', x[i]:0:2, ' ');
  77. close(f1);close(f2);
  78. end.

Решение задачи: «СЛАУ по Гауссу, чтение массива из файла»

textual
Листинг программы
  1. {.$define NoFile}
  2. program SLAU;
  3.  
  4. type
  5.   TMatrix = array[1..4, 1..4] of real;
  6.   TArray  = array[1..4] of real;
  7. var
  8. {$ifdef NoFile}
  9.   a: TMatrix = ((1, 1, 1, 1), (4, 3, 2, 1), (4, 1, 1, 4), (4, 1, 4, 1));
  10.   b: TArray = (25, 20, 25, 22);
  11.   n: integer = 4;
  12. {$else}
  13.   a: TMatrix;
  14.   b: TArray;
  15.   n: integer;
  16. {$endif}
  17.   x: TArray;
  18.   i, j, k: integer;
  19.   r, g: real;
  20.   f1, f2: Text;
  21.  
  22. begin
  23. {$ifndef NoFile}
  24.   Assign(f1, 'input.txt');
  25.   reset(f1);
  26.   readln(f1, n);
  27.   for i := 1 to n do
  28.   begin
  29.     for j := 1 to n do
  30.       Read(f1, a[i, j]);
  31.     readln(f1, b[i]);
  32.   end;
  33.   Close(f1);
  34. {$endif}
  35.  
  36.   Assign(f2, 'data.txt');
  37.   rewrite(f2);
  38.  
  39.   for i := 1 to n do
  40.   begin
  41.     for j := 1 to n do
  42.       Write(f2, a[i, j]: 0: 2, ' ');
  43.     writeln(f2, b[i]: 0: 2);
  44.   end;
  45.  
  46.   for k := 1 to n do { прямой ход Гаусса }
  47.   begin
  48.     for j := k + 1 to n do
  49.     begin
  50.       r := a[j, k] / a[k, k];
  51.       for i := k to n do
  52.       begin
  53.         a[j, i] := a[j, i] - r * a[k, i];
  54.       end;
  55.       b[j] := b[j] - r * b[k];
  56.     end;
  57.   end;
  58.   for k := n downto 1 do { обратный ход Гаусса }
  59.   begin
  60.     r := 0;
  61.     for j := k + 1 to n do
  62.     begin
  63.       g := a[k, j] * x[j];
  64.       r := r + g;
  65.     end;
  66.     x[k] := (b[k] - r) / a[k, k];
  67.  
  68.   end;
  69.  
  70.   for i := 1 to n do
  71.     Write(f2, x[i]: 0: 2, ' ');
  72.   readln;
  73.   //write(f2,'w[', i, ']=', x[i]:0:2, ' ');
  74.   Close(f2);
  75. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы