Advertisement
alvsjo

Inverzna Matrica

Mar 13th, 2017
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 3.09 KB | None | 0 0
  1.  program InverznMatrica;
  2.  type niz = array [1 .. 20 ] of real;
  3.  matrica=array [1 .. 20 ] of niz;
  4.  var n,ind:integer;a,b,c:matrica;
  5.  procedure UnosMatrice (var n:INTEGER; var A:matrica);
  6. var i,j:INTEGER;
  7. begin
  8.          write ('broj kolona kvadratne matrice:');readln(n);
  9.            for i:=1 to n do
  10.            for j:=1 to n do begin write('A[',I,':',j,']=');readln(a[i,j]);end;
  11. end;
  12.  procedure StampanjeMatrice(m,n:INTEGER;A:matrica);
  13.  var i,j:INTEGER;
  14.  begin
  15.           writeln;
  16.             for i:=1 to m do begin
  17.                    for j:=1 to n do write(a[i,j]:7:2);writeln;writeln; end;
  18.                       writeln;
  19.                       end;
  20.  procedure dopuna(n:integer;a:matrica;var c:matrica);
  21.  // zadatoj matrici se dodaje jedinicna
  22. // matrica sa desne strane
  23.  var i,j:integer;
  24.  begin
  25.         for i:=1 to n do
  26.                 begin
  27.                         for j:=1 to n do
  28.                                 begin
  29.                                         c[i,j]:=a[i,j];
  30.                                         c[i,j+n]:=0;
  31.                                 end;
  32.                         c[i,n+i]:=1;
  33.                 end;
  34.  end;
  35.  procedure ciscenje(n,v,k:integer;var c:matrica);
  36.  // n dimenzija matrice
  37.  // v,k pozicija elementa sa kojim stvaramo nule iznad i ispod
  38.  var i,j:integer;faktor:real;
  39.  begin
  40.      write('ciscenje ',v:5,k:5);readln();
  41.        for i:=1 to n do
  42.           begin
  43.                 if(i<>v) then begin
  44.                                    faktor:=(-1)*c[i,k]/c[v,k];
  45.                                         for j:=1 to 2*n do c[i,j]:=c[i,j]+faktor*c[v,j];
  46.                               end
  47.                 else
  48.                       begin
  49.                          for j:=1 to 2*n do if(j<>k) then  c[i,j]:=c[i,j]/c[i,k];
  50.                          c[i,k]:=1;
  51.                       end;
  52.  
  53.           end;
  54.  end;
  55.  procedure zamjena(n,v1,v2:integer;var c:matrica);
  56.  var t:niz;
  57.  begin
  58.         t:=c[v1];c[v1]:=c[v2];c[v2]:=t;
  59.  end;
  60.  procedure inverzna(n:integer;c:matrica;var b:matrica;var ind:integer);
  61.  var i,j,i1:integer;
  62.  begin
  63.  ind:=1;i:=1;
  64.         repeat
  65.         // stampanjematrice(n,2*n,c);readln();
  66.         if (c[i,i] <> 0)
  67.             then ciscenje(n,i,i,c)
  68.             else begin
  69.                  i1:=i; while(i1<=n) and (c[i1,i]=0) do i1:=i1+1;
  70.                  if(i1<=n) then
  71.                              begin zamjena(n,i,i1,c);
  72.                                    ciscenje(n,i,i,c);
  73.                              end
  74.                           else     ind:=0;
  75.                  end;
  76.              i:=i+1;
  77.         until(i>n)or(ind=0);
  78.                         if(ind=1) then begin
  79.                                 for i:=1 to n do
  80.                                   for j:=1 to n do
  81.                                   b[i,j]:=c[i,j+n];
  82.                         end;
  83.         end;
  84.  
  85.  begin
  86.  unosmatrice(n,a);stampanjematrice(n,n,a);dopuna(n,a,c);stampanjematrice(n,2*n,c);inverzna(n,c,b,ind);
  87.  if(ind=0) then
  88.         writeln('Inverzne matrice nema')
  89.  else   begin
  90.            stampanjematrice(n,n,a);
  91.           stampanjematrice(n,n,b);
  92.         end;
  93.  readln();
  94.  end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement