Commentçamarche.net
CodeS-SourceS
Rechercher un code, un tuto, une réponse

Methode de substitution : résolution de deux équations à deux inconnus

5/5 (3 avis)

Vue 9 932 fois - Téléchargée 268 fois

Description

Le programme suivant résout un système de deux équations à deux inconnus grâce à la méthode de substitution.
C'est un simple problème de mathématique que l'on peut facilement résoudre à la main, mais le code qui va avec est un bon entrainement.

Source / Exemple :


///////////////////////////////////////////////////////////
// Fichier              : uSubstitution.pas              //
// Auteur               : Stéphane HAIMET                //
// Date de création     : 17/03/08                       //
// Date de modification : 17/03/08                       //
///////////////////////////////////////////////////////////

unit uSubstitution;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    eX1: TEdit;
    eX2: TEdit;
    eY2: TEdit;
    eR2: TEdit;
    Label3: TLabel;
    eY1: TEdit;
    Label4: TLabel;
    eR1: TEdit;
    Label5: TLabel;
    Label6: TLabel;
    bResoudre: TBitBtn;
    bFermer: TBitBtn;
    lResultat: TLabel;
    procedure bResoudreClick(Sender: TObject);
    procedure eX1Change(Sender: TObject);
    procedure eY1Change(Sender: TObject);
    procedure eR1Change(Sender: TObject);
    procedure eX2Change(Sender: TObject);
    procedure eY2Change(Sender: TObject);
    procedure eR2Change(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//Quand on appuie sur le bouton 'résoudre'
procedure TForm1.bResoudreClick(Sender: TObject);
var x, y, x1, x2, y1, y2, r1, r2 : real;
begin
  y1:=strtofloat(eY1.Text);
  y2:=strtofloat(eY2.Text);
  x1:=strtofloat(eX1.Text);
  x2:=strtofloat(eX2.Text);
  r1:=strtofloat(eR1.Text);
  r2:=strtofloat(eR2.Text);
  x:=0;
  y:=0;
  //1. On cherche la valeur de X par rapport à Y sur papier, on arrive à :
  // x=(r1-y1*y)/x1
  //Dans la deuxième équation on remplace x par ce qu'on a trouvé
  // On simplifie ensuite pour trouver y, et on trouve :
  y:=(x1*r2-x2*r1)/((-x2*y1)+(x1*y2));
  // On remplace maintenant le y qu'on a trouvé dans la
  // 1ère équation et on trouve la valeur de x :
  x:=(r1-y1*y)/x1;
  //On affiche le résultat :
  lResultat.caption:='Solution : X = '+floattostr(x)+' et y = '+floattostr(y);
  
end;

//#####################################################################
//  Les codes suivant font en sorte que le label resultat
//  s'efface quand on change le contenu des edits, et met le
//  bouton resoudre enabled quand les champs sont tous rempli
//######################################################################
procedure TForm1.eX1Change(Sender: TObject);
begin
  lResultat.Caption:='';
  if (eX1.text<>'') and (eX2.text<>'') and (eY1.text<>'') and
   (eY2.text<>'') and (eR1.text<>'') and (eR2.text<>'') then
     bResoudre.Enabled:=true
   else
     bResoudre.enabled:=false;
end;

procedure TForm1.eY1Change(Sender: TObject);
begin
  lResultat.Caption:='';
  if (eX1.text<>'') and (eX2.text<>'') and (eY1.text<>'') and
   (eY2.text<>'') and (eR1.text<>'') and (eR2.text<>'') then
     bResoudre.Enabled:=true
   else
     bResoudre.enabled:=false;
end;

procedure TForm1.eR1Change(Sender: TObject);
begin
  lResultat.Caption:='';
  if (eX1.text<>'') and (eX2.text<>'') and (eY1.text<>'') and
   (eY2.text<>'') and (eR1.text<>'') and (eR2.text<>'') then
     bResoudre.Enabled:=true
   else
     bResoudre.enabled:=false;
end;

procedure TForm1.eX2Change(Sender: TObject);
begin
  lResultat.Caption:='';
  if (eX1.text<>'') and (eX2.text<>'') and (eY1.text<>'') and
   (eY2.text<>'') and (eR1.text<>'') and (eR2.text<>'') then
     bResoudre.Enabled:=true
   else
     bResoudre.enabled:=false;
end;

procedure TForm1.eY2Change(Sender: TObject);
begin
  lResultat.Caption:='';
  if (eX1.text<>'') and (eX2.text<>'') and (eY1.text<>'') and
   (eY2.text<>'') and (eR1.text<>'') and (eR2.text<>'') then
     bResoudre.Enabled:=true
   else
     bResoudre.enabled:=false;
end;

procedure TForm1.eR2Change(Sender: TObject);
begin
  lResultat.Caption:='';
  if (eX1.text<>'') and (eX2.text<>'') and (eY1.text<>'') and
   (eY2.text<>'') and (eR1.text<>'') and (eR2.text<>'') then
     bResoudre.Enabled:=true
   else
     bResoudre.enabled:=false;
end;

end.

Conclusion :


Enjoy

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.