Цитата:
Сообщение от kalugin66
можете соорудить только гаусса? чтоб программа одним из способов решала
|
Могу. Соорудил:
Код:
Program Gauss;
uses crt;
const
N=3;
eps=0.00001; { all numbers less than eps are equal to 0 }
type
matr=array [1..n,1..n] of real;
mas=array [1..n] of real;
var
i,j: integer;
b,x: mas;
a: matr;
{*** метод Гаусса *******}
procedure gausss(ag: matr; bg: mas; var xg: mas; Ng: integer);
Var
k,ig,jg: byte;
m,s: real;
blg:boolean;
c:mas;
begin
{ приведение к треугольному виду}
For k:=1 to Ng-1 do
begin
If ABS(ag[k,k])<eps then
begin
ig:=k;
blg:=false;
repeat
Inc(ig);
if ABS(ag[ig,k])>eps then
begin
blg:=true;
c:=ag[k];
ag[k]:=ag[ig];
ag[ig]:=c;
s:=bg[k];
bg[k]:=bg[ig];
bg[ig]:=s;
end;
until blg;
end;
m:=ag[k,k];
for jg:=k to Ng do
ag[k,jg]:=ag[k,jg]/m;
bg[k]:=bg[k]/m;
for ig:=k+1 to Ng do
if ABS(ag[ig,k])>eps then
begin
m:=ag[ig,k];
for jg:=k to Ng do
ag[ig,jg]:=ag[k,jg]-ag[ig,jg]/m;
bg[ig]:=bg[k]-bg[ig]/m;
end
else
ag[ig,k]:=0;
end;
{расчет неизвестных х в обратном порядке}
xg[Ng]:=bg[Ng]/ag[Ng,Ng] ;
for ig:=(Ng-1) downto 1 do
begin
s:=0;
For jg:=ig+1 to Ng do
s:=s+ag[ig,jg]*xg[jg] ;
xg[ig]:=bg[ig]-s;
end;
end;
BEGIN {***** тело программы ******}
clrscr;
writeln ('ввод матрицы коэффициентов при неизвестных х');
for i:=1 to N do
for j:=1 to N do
begin
write (' введите a [', i,',',j,'] => ');
readln (a [i,j]);
end;
writeln ('ввод столбца свободных членов');
for i:=1 to N do
begin
write (' введите b [', i,'] => ');
readln (b [i]);
end;
Writeln;
gausss (a,b,x,n);
writeln ('Вывод результатов решения системы уравнений методом Гаусса');
for i:=1 to n do
writeln('x [',i,'] =',x[i]:6:2);
readln;
END.
Между прочим, еще раз убедился, что Ваши уверения в том, что Вы якобы свою программу запускали, есть, извините за прямоту, чистой воды враньё. Ибо при таком количестве ошибок ни о какой даже трансляции, а не то что запуске, и речи быть не может. Отмечу (на будущее) главные:
1. Называть программу и процедуру одним именем - недопустимо (у Вас там и там "gauss").
2. Запись операции присваивания не допускает разрывов и пробелов, т.е:
x:= 45; - правильно, а
x: = 45; - недопустимо.