Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2021, 17:32   #1
matthewball
Новичок
Джуниор
 
Регистрация: 22.03.2021
Сообщений: 1
По умолчанию Помогите изменить программу на паскале по решению методом Зейделя

Есть готовая программа, помогите переделать под мой вариант. В дискретке слаб, ничего не получается.

Программа:

Код:
Uses CRT;
Const
     maxn = 10;
Type
    Data = Real;
    Matrix = Array[1..maxn, 1..maxn] of Data;
    Vector = Array[1..maxn] of Data;
 
{ Процедура ввода расширенной матрицы системы }
Procedure ReadSystem(n: Integer; var a: Matrix; var b: Vector);
Var
   i, j, r: Integer;
Begin
     r := WhereY;
     GotoXY(2, r);
     Write('A');
     For i := 1 to n do begin
         GotoXY(i * 6 + 2, r);
         Write(i);
         GotoXY(1, r + i + 1);
         Write(i:2);
     end;
     GotoXY((n + 1) * 6 + 2, r);
     Write('b');
     For i := 1 to n do begin
         For j := 1 to n do begin
             GotoXY(j * 6 + 2, r + i + 1);
             Read(a[i, j]);
         end;
         GotoXY((n + 1) * 6 + 2, r + i + 1);
         Read(b[i]);
     end;
End;
 
{ Процедура вывода результатов }
Procedure WriteX(n :Integer; x: Vector);
Var
   i: Integer;
Begin
     For i := 1 to n do
         Writeln('x', i, ' = ', x[i]);
End;
 
{ Функция, реализующая метод Зейделя }
Function Seidel(n: Integer; a: Matrix; b: Vector; var x: Vector; e: Data) :Boolean;
Var
   i, j: Integer;
   s1, s2, s, v, m: Data;
Begin
 
     { Исследуем сходимость }
     For i := 1 to n do begin
 
         s := 0;
         For j := 1 to n do
             If j <> i then
                s := s + Abs(a[i, j]);
 
         If s >= Abs(a[i, i]) then begin
            Seidel := false;
            Exit;
         end;
     end;
     Repeat
 
         m := 0;
         For i := 1 to n do begin
 
             { Вычисляем суммы }
             s1 := 0;
             s2 := 0;
             For j := 1 to i - 1 do
                 s1 := s1 + a[i, j] * x[j];
             For j := i to n do
                 s2 := s2 + a[i, j] * x[j];
 
             { Вычисляем новое приближение и погрешность }
             v := x[i];
             x[i] := x[i] - (1 / a[i, i]) * (s1 + s2 - b[i]);
 
             If Abs(v - x[i]) > m then
                m := Abs(v - x[i]);
         end;
 
     Until m < e;
     Seidel := true;
End;
 
Var
    n, i: Integer;
    a: Matrix;
    b, x: Vector;
    e: Data;
Begin
      ClrScr;
      Writeln('Программа решения систем линейных уравнений по методу Зейделя');
      Writeln;
 
      Writeln('Введите порядок матрицы системы (макс. 10)');
      Repeat
             Write('>');
             Read(n);
      Until (n > 0) and (n <= maxn);
      Writeln;
 
      Writeln('Введите точность вычислений');
      Repeat
             Write('>');
             Read(e);
      Until (e > 0) and (e < 1);
      Writeln;
 
      Writeln('Введите расширенную матрицу системы');
      ReadSystem(n, a, b);
      Writeln;
 
      { Предполагаем начальное приближение равным нулю }
      For i := 1 to n do
          x[i] := 0;
 
      If Seidel(n, a, b, x, e) then begin
         Writeln('Результат вычислений по методу Зейделя');
         WriteX(n, x);
      end
      else
          Writeln('Метод Зейделя не сходится для данной системы');
      Writeln;
End.
Вариант:
Изображения
Тип файла: jpg 484de4c5-5736-4002-b53f-05ec867c1ace.jpg (40.3 Кб, 0 просмотров)
matthewball вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменить программу интегрирования методом второго порядка. Pascal kot64rus Помощь студентам 0 05.03.2015 23:11
С# Методом Гаусса - Зейделя _Anna Помощь студентам 0 16.11.2013 21:50
решение задачи Дирихле методом Гаусса-Зейделя на Паскале. Объяснить код программы AleSanchez Помощь студентам 0 23.09.2013 18:18
откорректируйте программу по решению СЛАР методом Гауса Ge0rGE Помощь студентам 3 19.05.2009 22:47