Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-05-2007
baby baby is offline
Miembro
 
Registrado: may 2007
Posts: 15
Poder: 0
baby Va por buen camino
determinante de una matriz

hola a todos los copañeros del foro
haber si me podeis hechar la mano por fa en eso quiero calcular el dertminante de una matriz (3*3)que la tengo generada en un stringgrid pero nose como
meterle mano
gracias
saludos
Responder Con Cita
  #2  
Antiguo 31-05-2007
Robert01 Robert01 is offline
Miembro
 
Registrado: feb 2006
Ubicación: Córdoba, Argentina
Posts: 895
Poder: 19
Robert01 Va por buen camino
Hola

Aquí se calcula el determinante de una matriz usando TEdits creados en tiempo de ejecución, espero que te sirva, adaptalo a tus necesidades.

Código Delphi [-]
unit det;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    matriz2x21: TMenuItem;
    matriz3x31: TMenuItem;
    matriz4x41: TMenuItem;
    matriznxn1: TMenuItem;
    ScrollBox1: TScrollBox;
    CalcularDeterminante: TMenuItem;
    SeleccionarMatriz1: TMenuItem;
    Calcular1: TMenuItem;
    procedure matriz2x21Click(Sender: TObject);
    procedure matriz3x31Click(Sender: TObject);
    procedure matriz4x41Click(Sender: TObject);
    procedure CalcularDeterminanteClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure matriznxn1Click(Sender: TObject);
   private
    { Declaraciones privadas }
 public
    { Declaraciones publicas }
   procedure MatPress(Sender: TObject; var Key: Char);
end;

type mat=array[1..25,1..25]of integer; // Matriz

var
  Form1: TForm1;
  dim:Integer;  // dimension de la Matriz
  M:mat;
implementation

{$R *.DFM}

procedure Crear_Matriz(n:integer);
 var
   i,t:integer;
 begin
  for i:=0 to (n-1) do     // va a hacer el cuadro del Tedit
   for t:=0 to (n-1) do
    with TEdit.Create(Form1.Scrollbox1) do begin //crea un Tedit
     Parent := Form1.Scrollbox1;
     Text :='1';
     Left := i*30;
     top :=t*30;
     Width:=27;
     Color:=clBlue;
     Font.Color:=clWhite;
     MaxLength:=3; // limita a números de 3 digitos
     OnKeyPress:=Form1.MatPress;  //para controlar la entrada
    end;
   dim:=n;
 end;

procedure Borrar_Matriz();
 var
  i:integer;
 begin
   for i:=Form1.Scrollbox1.ComponentCount-1 DownTo 0 Do
    if Form1.Scrollbox1.Components[i] Is TEdit Then
      Form1.Scrollbox1.Components[i].Free;
 end;


procedure TForm1.matriz2x21Click(Sender: TObject);
begin
Borrar_Matriz();
Crear_Matriz(2); // dim = 2
end;

procedure TForm1.matriz3x31Click(Sender: TObject);
begin
Borrar_Matriz();
Crear_Matriz(3);
end;

procedure TForm1.matriz4x41Click(Sender: TObject);
 begin
  Borrar_Matriz();
  Crear_Matriz(4);
 end;

function isnum(S:string):boolean;
 var
  c,i:integer;
 begin
   c:=0;
   for i:=1 to length(S) do begin
     if ((ord(S[i]) < 48) or (ord(S[i])>57)) then c:=c+1;
   end;
   if c=0 then isnum:=True else isnum:=False;
 end;

procedure TForm1.Matriznxn1Click(Sender: TObject);
 var
   S:string;
   n:integer;
 begin
   Borrar_Matriz();
   repeat
     S:=InputBox('¿Cual es la dimensión de la Matriz?','n debe estar comprendido entre 2 y 25','5');
     if ((isnum(S)) and (length(S)<7)) then n:=StrToInt(S) else n:=0;
   until ((n<=25) and (n>=2));
   Crear_Matriz(n);
 end;

procedure init_Matriz(var M:mat);
 var
  i,j:integer;
 begin
  for i:=1 to 25 do
   for j:=1 to 25 do
    M[i,j]:=0;
 end;


function ExtraerMenor(var M:Mat;Fila,Columna,dim2:integer):mat;
 var
   i,j,k:integer;
   M1:mat;
 begin
  k:=1;
  init_Matriz(M1);
  for i:=1 to dim2 do
    for j:=1 to dim2 do
     if ((i<>Fila) and (j<>Columna)) then begin
       if k mod dim2 = 0 then k:=k+1;
       M1[(k div (dim2))+1,(k mod (dim2))]:=M[i,j];
       k:=k+1;
    end;
  ExtraerMenor:=M1;
 end;

function Determinante(var M:Mat; dimM:integer):Int64;
 var
   M1: Mat;
   i:integer;
   temp:int64;
 begin
  if dimM=2 then
    Determinante:=((M[1,1]*M[2,2])-(M[1,2]*M[2,1]))
  else begin
    temp:=0;
  for i:=1 to dimM do begin
    if (M[i,1]<>0) then begin
      M1:=ExtraerMenor(M,i,1,dimM);
      if (i mod 2 =0) then temp:=temp-M[i,1]*Determinante(M1,dimM-1)
      else temp:=temp+M[i,1]*Determinante(M1,dimM-1);
    end;
  end;
    Determinante:=temp;
  end;
end;

procedure TForm1.CalcularDeterminanteClick(Sender: TObject);
 var
   i:integer;
 begin
   if (dim<>0) then begin
    init_Matriz(M);
     For i:=0 to Form1.Scrollbox1.ComponentCount-1 Do
      If Form1.Scrollbox1.Components[i] Is TEdit Then begin
        M[(i mod dim)+1,(i div dim)+1]:=StrToInt(Tedit(Form1.Scrollbox1.Components[i]).Text);
      end;

      MessageBox(Handle,
             PChar('El determinante es igual a : '+ IntToStr( Determinante(M,dim))),
             PChar('Resultado'),
             MB_OK + MB_ICONINFORMATION + MB_DEFBUTTON1 + MB_APPLMODAL);
   end;

 end;



procedure TForm1.FormCreate(Sender: TObject);
 begin
   dim:=0;
 end;


procedure TForm1.MatPress(Sender: TObject; var Key: Char);
  begin
   if (((Key>#57) or (Key<#48)) and (key<>#45)) then Key:=#0; // sólo permite ingresar números
  end;

end.

Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
matriz de controles santiago14 Varios 14 01-05-2007 06:00:58
matriz de 4ª dimension? (MAJ) La Taberna 7 30-04-2007 21:26:53
matriz editable jsanchez OOP 11 20-01-2006 15:28:41
matriz 3 dimensiones Lidia SQL 2 12-12-2005 18:59:58
inverza de una matriz gulder Varios 7 15-11-2005 23:40:29


La franja horaria es GMT +2. Ahora son las 22:00:59.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi