[ Foro de Pascal ]

Matriz inversa en pascal

23-Jan-2020 01:13
Invitado (Lady)
0 Respuestas

Por favor, ayúdenme a generar la inversa de una matriz, yo ya lo intenté y no pude, por favor ayuda
:(, éste es el código que tengo, pero no genera la inversa correcta
var
  R:array[1..100,1..100] of real;
  B:array[1..100,1..100] of real;
  n,m,i,j,s,t,k,l,x:integer;
  aux,aux1,aux2:real;
begin
clrscr;
s:=0;
x:=0;
t:=0;
  Write('Introduzca el orden de la matriz R: ');ReadLn(n);
  WriteLn('Ingrese la matriz R');  
for i:=1 to n do
  for j:=1 to n do
  begin
      Write('R[',i,',',j,']= ');
      ReadLn(R[i,j]);
  end;
 
for i:=1 to n do  
  for j:=1 to n do
  begin
      if i=j then
        B[i,j]:=1
       
      else
        B[i,j]:=0;
       
  end;
     
for j:=1 to n do
begin
 i:=1;
 s:=s+1;
 repeat
  p:=j;
  if R[s,j]<>0 then
                  begin
                   for k:=1 to n do
                    begin
                    R[p,k]:=R[p,k]/R[p,j];
                    B[p,k]:=B[p,k]/R[p,j];
                    end;
                    WriteLn('Aplicando oef');
                    for m:=1 to n do
                    begin
                    for i:=1 to n do
                   
                    write(R[m,i]:10:2,' ');
                    WriteLn;
                    end;
                    WriteLn('Aplicando oef a la identidad');
                    for m:=1 to n do
                    begin
                    for i:=1 to n do
                   
                    Write(B[m,i]:10:2,' ');
                    WriteLn;
                    end;
                   
                 
                   
                    for l:=1 to n do
                    if l<>p then
                       begin
                       aux:=R[l,p];
                       for k:=1 to n do
                       begin
                        R[l,k]:=R[l,k]-aux*R[p,k];
                        B[l,k]:=B[l,k]-aux*B[p,k];
                        end;  
                 
                        WriteLn('Aplicando oef');
                        for m:=1 to n do
                        begin  
                        for i:=1 to n do
                       
                         Write(R[m,i]:10:2,' ');
                         WriteLn;
                        end;
                        WriteLn('Aplicando oef a la identidad');
                        for m:=1 to n do
                        begin
                         for i:=1 to n do
                 
                           write(B[m,i]:10:2,' ');
                           WriteLn;
                        end;
                        end  
            else    
                                     
            i:=n;                      
 end
 else
     begin
     t:=p+1;
     
      if R[t,j]<>0 then
                   begin
                   for k:=1 to n do
                    begin
                     aux1:=R[t,k];
                     R[t,k]:=R[p,k];
                     R[p,k]:=aux1;
                     aux2:=B[t,k];
                     B[t,k]:=B[p,k];
                     B[p,k]:=aux2;
                     i:=p;
                     end;
 
                     WriteLn('Aplicando oef');
                    for m:=1 to n do
                    begin
                   
                    for i:=1 to n do
                   
                    write(R[m,i]:10:2,' ');
                    WriteLn;
                    end;
                   
                   WriteLn('Aplicando oef a la identidad');
                   for m:=1 to n do
                   begin
                   for i:=1 to n do
                   
                    write(B[m,i]:10:2,' ');
                    WriteLn;
                    end;
                  end
               else
               i:=i+1;
 end;
until  i=n;
end;
for i:=1 to n do
   for k:=1 to n do
       if k=i then
         if R[i,k]=1 then
            x:=x+1;
            if x=n then
            begin
            WriteLn('La matriz es invertible');
            WriteLn ('Su INVERSA es: ');
            for m:=1 to n do
            begin
               for i:=1 to n do
               
               Write (B[m,i]:10:2,' ');
               WriteLn;
               end;
               end
        else
          WriteLn('La matriz NO es invertible');




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)