Показать сообщение отдельно
Старый 28.12.2010, 22:41   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от 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; - недопустимо.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070