Recursividad Lenguaje Ada
A continuación se presenta una forma de resolver determinantes de orden n utilizando una técnica recursiva. Esta forma de resolver determinantes puede ser prohibitiva para ordenes altos ya que el tiempo de ejecución aumenta exponencialmente con el orden de la matriz (
Especificación del programa DETER.ADB
with TEXT_IO;
Procedure DETER is
package FLT_IO is newTEXT_IO.FLOAT_IO( FLOAT );
type MATRIZ is array (integer range ,integer range) of FLOAT;
function MENOR (M: MATRIZ; X,Y: INTEGER) return MATRIZ is
N : MATRIZ(M'FIRST..M'LAST-1,M'FIRST(1)..M'LAST(1)-1);
FIL,COL : INTEGER;
begin
FIL:=1;
COL:=1;
for COLUMNA in M'RANGEloop
if COLUMNA /= Y then
for FILA in M'RANGE(1)
loop
if FILA /= X then
N(FIL,COL):=M(FILA,COLUMNA);
FIL:=FIL+1;
end if;end loop;
FIL:=1;
COL:=COL+1;
end if;
end loop;
return N;
end MENOR;
function DETERMINANTE (M: MATRIZ) return FLOAT is
SOLUCION :FLOAT:=0.0;
PARCIAL :FLOAT:=0.0;
beginif M'length > 2 then
for COLUMNA in M'RANGE
loop
PARCIAL:=M(COLUMNA,1)*FLOAT(((-1)**(COLUMNA+1)))*
DETERMINANTE(MENOR(M,COLUMNA,1));
SOLUCION:=SOLUCION+PARCIAL;
end loop;
elseSOLUCION:=(M(1,1)*M(2,2))-(M(1,2)*M(2,1));
end if;
return SOLUCION;
end DETERMINANTE;
procedure PUT (M: MATRIZ ) is
begin
for COLUMNA in M'range(1) loop
for FILA in M'range
loop
TEXT_IO.PUT(" ");FLT_IO.PUT(M(FILA,COLUMNA));
TEXT_IO.PUT(" ");
end loop;
TEXT_IO.NEW_LINE;
end loop;
end PUT;
MIMATRI6:MATRIZ (1..6,1..6):=(1=>(2.0,2.0,1.0,0.0,2.0,1.0),
2=>(1.0,2.0,6.0,5.0,3.0,7.0),
3=>(2.0,3.0,4.0,2.0,2.0,1.0),4=>(2.0,6.0,6.0,9.0,3.0,7.0),
5=>(1.0,2.0,7.0,5.0,3.0,7.0),
6=>(2.0,7.0,7.0,1.0,2.0,1.0));
MIMATRI7:MATRIZ (1..7,1..7):=(1=>(2.0,2.0,1.0,5.0,0.0,2.0,1.0),
2=>(1.0,2.0,6.0,2.0,5.0,3.0,7.0),
3=>(2.0,3.0,4.0,7.0,2.0,2.0,1.0),4=>(2.0,6.0,6.0,3.0,9.0,3.0,7.0),
5=>(1.0,2.0,7.0,1.0,5.0,3.0,7.0),
6=>(2.0,7.0,7.0,6.0,1.0,2.0,1.0),
7=>(1.0,2.0,6.0,2.0,5.0,2.0,1.0));
MIMATRI8:MATRIZ (1..8,1..8):=(1=>(2.0,2.0,2.0,1.0,5.0,0.0,2.0,1.0),
2=>(9.0,1.0,2.0,6.0,2.0,5.0,3.0,7.0),3=>(8.0,2.0,3.0,4.0,7.0,2.0,2.0,1.0),
4=>(7.0,2.0,6.0,6.0,3.0,9.0,3.0,7.0),
5=>(6.0,1.0,2.0,7.0,1.0,5.0,3.0,7.0),
6=>(5.0,2.0,7.0,7.0,6.0,1.0,2.0,1.0),
7=>(4.0,1.0,2.0,6.0,2.0,5.0,2.0,1.0),
8=>(3.0,2.0,3.0,4.0,7.0,2.0,3.0,7.0));...
Regístrate para leer el documento completo.