Skip to content

Instantly share code, notes, and snippets.

@buger
Created September 20, 2009 10:16
Show Gist options
  • Save buger/189770 to your computer and use it in GitHub Desktop.
Save buger/189770 to your computer and use it in GitHub Desktop.
{Програма для решения СЛАУ методом Гаусса с выбором максимального главного элемента
Переменные:
i,j - вспомогательные переменные используемые как счетчики в цикле.(Индексы элементов матриц)
n - переменная учавствующая в формировании цикла
str/stlb - число строк/столбцов в РАСШИРЕННОЙ матрице
S - используется для накопления суммы чего-либо
M - максимальный главный элемент на данном шаге
l - вспомогательная переменная, используется в кач-ве "тарелки" при перестановке двух элементов
Матрицы:
A - расширенная матрица данная по условию задачи
A0 - копия матрицы A, для преобразования и сохранения начальных данных
Ans - столбец "ответ"
p - матрица индексов строк матрицы A}
program GaussSMax;
uses crt;
type
Mat=array [1..51,1..52] of real;
MatA=array [1..51] of real;
var i,j,n,l,str,stlb:integer;
A0,A:Mat;
p:array [1..51] of integer;
Ans:MatA;
S,M:real;
begin
write ('Введите колличество строк в расширенной матрице:');
readln (str);
write ('Введите колличество столбцов в расширенной матрице:');
readln (stlb);
writeln ('Ввод матрицы:');
for i:=1 to str do begin
for j:=1 to stlb do begin
if j<>stlb then begin
write ('Введите элемент матрицы а(',i,';',j,'):');
readln (A[i,j]);
A0[i,j]:=A[i,j];
end
else begin
write ('Введите элемент матрицы b',i,':');
readln (A[i,j]);
A0[i,j]:=A[i,j];
end;
end;
p[i]:=i
end;
{Прямой ход}
for n:=1 to str do begin
M:=A0[p[n],p[n]];
{Поиск максимального гл эелемента}
for i:=n to str do
if abs(A0[p[i],n])>=abs(M) then begin
M:=A0[p[i],n];
l:=p[n];
p[n]:=i;
p[i]:=l
end;
{Приведение к треугольному виду}
for j:=n+1 to stlb do
A0[p[n],j]:=A0[p[n],j]/M;
for i:=n+1 to str do
for j:=n+1 to stlb do
A0[p[i],j]:=A0[p[i],j]+A0[p[n],j]*(-A0[p[i],n])
end;
{Обратный ход}
Ans[n]:=A0[p[n],n+1];
for i:=n-1 downto 1 do begin
S:=0;
for j:=n downto i+1 do
S:=S+A0[p[i],j]*Ans[j];
Ans[i]:=A0[p[i],stlb]-S
end;
{Вывод ответа}
for i:=1 to str do
writeln ('x',i,'=',Ans[i]);
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment