среда, 10 июня 2009 г.

решение систем уравнений методом крамера

Средствами языка программирования Turbo Pascal решить систему уравнений, используя метод Крамера. Выбор данных из таблицы вариантов

прежде всего нужно почитать что представляет собой метод крамера
а также вычисление определителя матрицы

const n = 3; { размерность матрицы }
type matr = array[1..n, 1..n] of longint;

procedure GetMatr(a:matr; var b:matr; m,i,j:integer);
{ Вычеркивание из матрицы строки и столбца }
var ki,kj,di,dj:integer;
  begin
  di:=0;
  for ki:=1 to m-1 do
    begin
    if (ki=i) then di:=1;
    dj:=0;
    for kj:=1 to m-1 do
      begin
      if (kj=j) then dj:=1;
      b[ki,kj]:=a[ki+di,kj+dj];
      end;
    end;
  end;
  
Function Determinant(a: matr; n: integer) : longint;
{ Вычисление определителя матрицы }
var i,j,d,k:longint;
    b:matr;
  begin
  d:=0; k:=1;
  if (n<1) then
    begin
    writeln('Determinant: Cann''t run. N=',n); halt;
    end;
  if (n=1)
    then d:=a[1,1]
  else if (n=2)
    then d:=a[1,1]*a[2,2]-a[2,1]*a[1,2]
  else { n>2 }
    for i:=1 to n do
      begin
      GetMatr(a,b,n,i,1);
      {writeln('i=',i,' a[',i,',1]=',a[i,1]);
      PrintMatr(b,n-1);}
      d:=d+k*a[i,1]*Determinant(b,n-1);
      k:=-k;
      end;
  Determinant:=d;
  end;
  


var
   a: matr;
   b: array [1..n] of integer;
   i, j, dt: longint;
   temp: integer;
   x: real;

begin
   { Заполнение матриц }
   a[1, 1]:=2;  a[2, 1]:= 5; a[3, 1]:=4; b[1]:=30;
   a[1, 2]:=1;  a[2, 2]:= 3; a[3, 2]:=2; b[2]:=150;
   a[1, 3]:=2;  a[2, 3]:= 10; a[3, 3]:=9; b[3]:=110;
   
   { Вычисление определителя }
   dt := Determinant(a, n);

   for i:=1 to n do begin
      {меняем местами b с текущим стоблцом матрицы a}
      for j:=1 to n do begin
         temp := b[j];
         b[j] := a[i, j];
         a[i, j] := temp;
      end;
      
      x:=Determinant(a, n) / dt;
      writeln('x(', i, ') = ', x:3:0); {поменяйте на нужный формат вывода}
      
      {назад: меняем местами b с текущим стоблцом матрицы a}
      for j:=1 to n do begin
         temp := b[j];
         b[j] := a[i, j];
         a[i, j] := temp;
      end;
   end;
   

end.

Комментариев нет:

Отправить комментарий