Resolution d'un systeme 3x3 en réponse au forum

Description

Résolution par la methode de cramer, donne la reponse sous forme d'une fraction irréductible. Les coef doivent etre entiers.

Source / Exemple :


unit Unit1;

{Résolution d'un système de 3 équtions à 3 inconnnues à coeficients entiers.
Facilement modifiable pour travailler sur des réels. La méthode utilisée est
la méthode de Cramer ( je crois), ce n'est pas la plus rapide, mais la plus
simple à programmer}

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    A11: TEdit;
    A21: TEdit;
    A31: TEdit;
    A12: TEdit;
    A32: TEdit;
    A33: TEdit;
    A23: TEdit;
    A22: TEdit;
    A13: TEdit;
    R1: TEdit;
    R2: TEdit;
    R3: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Button1: TButton;
    Label5: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Calcule le PGCD de A et B
Function PGCD(A,B:Integer):Integer;
Begin
  if B=0 then Result:=A
         else Result:=PGCD(B,A mod B);
End;

// Ecris la fraction A/B sous forme irréductible
Function Fract(A,B:Integer):String;
Begin
  Fract:=IntToStr(A div PGCD(A,B))+'/'+IntToStr(B div PGCD(A,B));
End;

// Renvoie le derterminant de la matrice (Cij)
Function Determinant(C11,C12,C13,C21,C22,C23,C31,C32,C33:Integer):Integer;
Begin
  // On calcule le determinant à la babare
  Result:=C11*(C22*C33-C32*C23)-C12*(C21*C33-C31*C23)+C13*(C21*C32-C31*C22);
End;

// Quand on clique sur résoudre
procedure TForm1.Button1Click(Sender: TObject);
var D,D1:integer;
    nA11,nA12,nA13,nA21,nA22,nA23,nA31,nA32,nA33,nR1,nR2,nR3,R,RT:Integer;
begin
  // Teste et convertit les valeurs
  RT:=0;
  Val(A11.Text,nA11,R);RT:=RT+R;
  Val(A12.Text,nA12,R);RT:=RT+R;
  Val(A13.Text,nA13,R);RT:=RT+R;
  Val(A21.Text,nA21,R);RT:=RT+R;
  Val(A22.Text,nA22,R);RT:=RT+R;
  Val(A23.Text,nA23,R);RT:=RT+R;
  Val(A31.Text,nA31,R);RT:=RT+R;
  Val(A32.Text,nA32,R);RT:=RT+R;
  Val(A33.Text,nA33,R);RT:=RT+R;
  Val(R1.Text,nR1,R);RT:=RT+R;
  Val(R2.Text,nR2,R);RT:=RT+R;
  Val(R3.Text,nR3,R);RT:=RT+R;
  if RT>0 then begin
    // Si une case n'est pas un nombre
    Showmessage('Vous devez entrer des NOMBRES entiers dans toutes les cases');
  end else begin
    D:=Determinant(nA11,nA12,nA13,nA21,nA22,nA23,nA31,nA32,nA33);
    if D=0
    then ShowMessage('Le système n''est pas de rang 3, je ne peux trouver les solutions')
    else Begin
      D1:=Determinant(nR1,nA12,nA13,nR2,nA22,nA23,nR3,nA32,nA33);
      Label5.Caption:='x='+Fract(D1,D)+'='+FloatToStr(D1/D);
      D1:=Determinant(nA11,nR1,nA13,nA21,nR2,nA23,nA31,nR3,nA33);
      Label5.Caption:=Label5.Caption+#13+'y='+Fract(D1,D)+'='+FloatToStr(D1/D);
      D1:=Determinant(nA11,nA12,nR1,nA21,nA22,nR2,nA31,nA32,nR3);
      Label5.Caption:=Label5.Caption+#13+'z='+Fract(D1,D)+'='+FloatToStr(D1/D);
    End;
  end;
end;

end.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.