0 / 0 / 0
Регистрация: 10.03.2013
Сообщений: 5
|
|
1 | |
Pascal -> C17.04.2013, 18:38. Показов 471. Ответов 0
Метки нет (Все метки)
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.
0
|
17.04.2013, 18:38 | |
Ответы с готовыми решениями:
0
Turbo Pascal, Pascal ABC, Free Pascal, PascalABC.NET - в чем разница? Нужно перевести код из Turbo Pascal в Pascal ABC.NET Нужно перевести программу с Turbo Pascal в Pascal ABC.NET Различия трансляторов Pascal ABC.Net и Turbo/Borland Pascal |
17.04.2013, 18:38 | |
17.04.2013, 18:38 | |
Помогаю со студенческими работами здесь
1
Список слов распечатать в алфавитном порядке. В Turbo Pascal или Pascal ABC Из множества выбрать три различные точки по условию -из Turbo Pascal во Free Pascal Нужно перевести код с Pascal ABC на Turbo Pascal - рисование работающей мельницы Есть ли аналог модуля tpdate.tpu (Turbo Pascal) для Free Pascal Можно как-то переделать код из Turbo Pascal чтобы он работал в pascal abc.net? Переделайте, пожалуйста, программу из Turbo pascal в ABC pascal Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |