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.
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.