IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Метод Гаусса, объясните программу
Smileboy
сообщение 8.01.2008 19:17
Сообщение #1





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Здрасьте, нашел прогу по моему заданию, но ее нужно защитить, поэтому прошу помочь в ней разобраться.

uses crt;

const
nn = 10;
type
Matrix = array[1..NN,1..NN+1] of real;

(* построчный ввод матрицы *)
Procedure ReadMatr(var A:Matrix; var n:word );
var
i, j, m: word;
begin
repeat
write('Введите количество линейных уравн. в системе: '); readln(N)
until (N>0) and (N<=NN);

m:=n+1;
For i:=1 to n do begin
For j:=1 to m do begin
write('A[',i,j,']= '); readln(A[i,j])
end
end
end;

(* построчный вывод матрицы *)
Procedure PrintMatr(A:Matrix; n:word);
Var
i, j, m: word;
begin
m:=n+1;
For i:=1 to n do begin
For j:=1 to m do write(A[i,j],' ');
writeln
end
end;

procedure GaussM(a:matrix;n:word; var s:byte; var x:array of real); вот тут стало непонятно blink.gif
var
i, k, j: byte;
m, t: real;
begin
i:=1;
s:=1;
repeat
j:=i+1;
k:=i;
m:=abs(a[i,i]);
repeat
if m<abs(a[j,i]) then begin
m:=abs(a[j,i]);
k:=j;
end;
j:=j+1
until not(j<=n);

if m<>0 then begin
j:=i;
repeat
t:=a[i,j];
a[i,j]:=a[k,j];
a[k,j]:=t;
j:=j+1
until not(j<=n+1);
k:=i+1;
repeat
t:=a[k,i]/a[i,i];
a[k,i]:=0;
j:=i+1;
repeat
a[k,j]:=a[k,j]-t*a[i,j];
j:=j+1
until not(j<=n+1);
k:=k+1
until not(k<=n);
end
else begin
s:=0;
end;
i:=i+1
until not((i<=n)and(s=1));

if s=1 then begin
i:=n;
repeat
x[i]:=a[i,n+1];
j:=i+1;
while j<=n do begin
x[i]:=x[i]-a[i,j]*x[j];
j:=j+1;
end;
x[i]:=x[i]/a[i,i];
i:=i-1
until not(i>=1);
end;
end;

var
b: array[0..nn] of real;
a: Matrix;
n, j: word;
s: byte;
Begin
readmatr(a,n);
printmatr(a,n);
writeln('press any key'); readkey;
GaussM(a,n,s,b);
for j:=1 to n do write (b[j],' ');
writeln('press any key for exit ...'); readkey
end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 9.01.2008 9:32
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Цитата
вот тут стало непонятно

Метод Гаусса
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Smileboy
сообщение 11.01.2008 15:00
Сообщение #3





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Это ужасно blink.gif blink.gif

Есть еще, вроде попроще blum.gif , помогите!!!

const
n = 3;
A: array[0 .. pred(n), 0 .. pred(n)] of double = (
(10, 1, 1), (2, 10, 1), (2, 2, 10)
);
B: array[0 .. pred(n)] of double = (
12, 13, 14
);

var
X: array[0 .. pred(n)] of double;
i, j, k: integer;
multiplier: double;

begin
writeln('Linear system of equations:');
writeln;

for i := 0 to pred(n) do begin
for j := 0 to pred(n-1) do
write('(', A[i][j]:0:2, ') * x', j, ' + ');
writeln('(', A[i][n-1]:0:2, ') * x', pred(n), ' = ', B[i]:0:2);
end;

for i := 0 to pred(n-1) do begin
for j := i+1 to pred(n) do begin
multiplier := A[j][i] / A[i][i];
for k := 0 to pred(n) do
A[j][k] := A[j][k] - A[i][k] * multiplier;
B[j] := B[j] - B[i] * multiplier;
end;
end;

for i := n-1 downto 0 do begin
X[i] := B[i];
for j := n-1 downto succ(i) do
X[i] := X[i] - A[i][j] * X[j];
X[i] := X[i] / A[i][i];
end;

writeln;
writeln('Result vector X:');
for i := 0 to pred(n) do begin
writeln('X[', i, '] = ', X[i]:0:2);
end;
end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Smileboy
сообщение 20.01.2008 17:52
Сообщение #4





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Пожалуйста помогите!!! Этот кусок непонятен


for i := 0 to pred(n-1) do begin
for j := i+1 to pred(n) do begin
multiplier := A[j][i] / A[i][i];
for k := 0 to pred(n) do
A[j][k] := A[j][k] - A[i][k] * multiplier;
B[j] := B[j] - B[i] * multiplier;
end;
end;

for i := n-1 downto 0 do begin
X[i] := B[i];
for j := n-1 downto succ(i) do
X[i] := X[i] - A[i][j] * X[j];
X[i] := X[i] / A[i][i];
end;

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 13.08.2025 21:15
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"