Trinome du second degres

Soyez le premier à donner votre avis sur cette source.

Vue 11 666 fois - Téléchargée 460 fois

Description

Ce petit programme resoud les trinomes du second degré. Le code est peu commenté car je pense que les noms des composants sont assez éloquents et que les procédures sont assez courtes.

Source / Exemple :


//projet

program Trinome;

uses
  Forms,
  trinomprinc in 'trinomprinc.pas' {fmTrinome};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TfmTrinome, fmTrinome);
  Application.Run;
end.

//unité

unit trinomprinc;

interface

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

type
  TfmTrinome = class(TForm)
    lbresult: TListBox;
    donnee1: TEdit;
    donnee2: TEdit;
    donnee3: TEdit;
    txIntro: TLabel;
    txOp1: TLabel;
    txOp2: TLabel;
    txOp3: TLabel;
    btresoud: TButton;
    btefface: TButton;
    bteftout: TButton;
    MainMenu1: TMainMenu;
    Fichier1: TMenuItem;
    Fermer1: TMenuItem;
    Edition1: TMenuItem;
    Copierdonnees1: TMenuItem;
    Copierresultats1: TMenuItem;
    PopupMenu1: TPopupMenu;
    Copier1: TMenuItem;
    Coller1: TMenuItem;
    Couper1: TMenuItem;
    txResult: TLabel;
    PopupMenu2: TPopupMenu;
    PopupMenu3: TPopupMenu;
    Copier2: TMenuItem;
    Coller2: TMenuItem;
    Couper2: TMenuItem;
    N1: TMenuItem;
    Couperdonnes1: TMenuItem;
    Couperrsultats1: TMenuItem;
    Copier3: TMenuItem;
    Coller3: TMenuItem;
    Couper3: TMenuItem;
    Aide1: TMenuItem;
    Lenombrei1: TMenuItem;
    Aproposde1: TMenuItem;
    procedure Fermer1Click(Sender: TObject);
    procedure Copierdonnees1Click(Sender: TObject);
    procedure Aproposde1Click(Sender: TObject);
    procedure Copierresultats1Click(Sender: TObject);
    procedure bteffaceClick(Sender: TObject);
    procedure Copier1Click(Sender: TObject);
    procedure Coller1Click(Sender: TObject);
    procedure Couper1Click(Sender: TObject);
    procedure bteftoutClick(Sender: TObject);
    procedure btresoudClick(Sender: TObject);
    procedure Couperdonnes1Click(Sender: TObject);
    procedure Couperrsultats1Click(Sender: TObject);
    procedure Copier2Click(Sender: TObject);
    procedure Copier3Click(Sender: TObject);
    procedure Couper2Click(Sender: TObject);
    procedure Couper3Click(Sender: TObject);
    procedure Coller2Click(Sender: TObject);
    procedure Coller3Click(Sender: TObject);
    procedure Lenombrei1Click(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  fmTrinome: TfmTrinome;

implementation

{$R *.dfm}

procedure TfmTrinome.Fermer1Click(Sender: TObject);
begin
Close;
end;

procedure TfmTrinome.Copierdonnees1Click(Sender: TObject);
begin
Clipboard.AsText :=
           txOp1.Caption + FloatToStr(StrToFloat(Donnee1.Text)) + txOp2.Caption + FloatToStr(StrToFloat(Donnee2.Text)) + txOp3.Caption + FloatToStr(StrToFloat(Donnee3.Text)) + TxResult.Caption;
end;

procedure TfmTrinome.Aproposde1Click(Sender: TObject);
begin
ShowMessage('par Aurelien Martin le 20/08/05');
end;

procedure TfmTrinome.Copierresultats1Click(Sender: TObject);
begin
Clipboard.AsText := lbResult.Items.Text;
end;

procedure TfmTrinome.bteffaceClick(Sender: TObject);
begin
Donnee1.Clear;
Donnee2.Clear;
Donnee3.Clear;
end;

procedure TfmTrinome.Copier1Click(Sender: TObject);
begin
Clipboard.AsText := Donnee1.SelText;
end;

procedure TfmTrinome.Coller1Click(Sender: TObject);
begin
Donnee1.Text := Donnee1.Text + Clipboard.Astext;
end;

procedure TfmTrinome.Couper1Click(Sender: TObject);
begin
Clipboard.AsText := Donnee1.SelText;
Donnee1.ClearSelection
end;

procedure TfmTrinome.bteftoutClick(Sender: TObject);
begin
Donnee1.Clear;
Donnee2.Clear;
Donnee3.Clear;
lbresult.Items.Clear;
end;

procedure TfmTrinome.btresoudClick(Sender: TObject); //Cette procédure fait tout
var
Delta: Currency;
begin
if StrToFloat(Donnee1.Text) = 0 then
  begin
  lbResult.Items.Add('Premiere donnée nulle');
  lbResult.Items.Add('Ce trinome n''est pas du second degé.');
  lbResult.Items.Add('****************************************************************************');
  end
else
begin
  Delta := StrToFloat(Donnee2.Text) * StrToFloat(Donnee2.Text) - 4 * StrToFloat(Donnee1.Text) * StrToFloat(Donnee3.Text);
  lbResult.Items.Add('Delta = (' + FloatToStr(StrToFloat(Donnee2.Text)) + ')² - 4 * ' + FloatToStr(StrToFloat(Donnee1.Text)) + ' * ' + FloatToStr(StrToFloat(Donnee3.Text)));
  lbResult.Items.Add('Delta = ' + FloatToStr(Delta));
  if Delta < 0 then
    begin
      lbResult.Items.Add('Delta négatif');
      lbResult.Items.Add('Aucun nombre réel solution du trinome');
      lbResult.Items.Add('X =(' + FloatToStr(-1 * StrToFloat(Donnee2.Text))+ '-V' + FloatToStr(Delta) + ')/(2*' + FloatToStr(StrToFloat(Donnee1.Text)) + ')');
      lbResult.Items.Add('X =' + FloatToStr(-1 * StrToFloat(Donnee2.Text)/(2 * StrToFloat(Donnee1.Text))) + ' - ' + FloatToStr(sqrt(-1 * Delta) / 2 * StrToFloat(Donnee1.Text)) + 'i');
      lbResult.Items.Add('ou');
      lbResult.Items.Add('X =(' + FloatToStr(-1 * StrToFloat(Donnee2.Text))+ '+V' + FloatToStr(Delta) + ')/(2*' + FloatToStr(StrToFloat(Donnee1.Text)) + ')');
      lbResult.Items.Add('X =' + FloatToStr(-1 * StrToFloat(Donnee2.Text)/(2 * StrToFloat(Donnee1.Text))) + ' + ' + FloatToStr(sqrt(-1 * Delta) / (2 * StrToFloat(Donnee1.Text))) + 'i');
      lbResult.Items.Add('****************************************************************************');
      end
  else if Delta = 0 then
    begin
      lbResult.Items.Add('Delta nul');
      lbResult.Items.Add('Une Solution');
      lbResult.Items.Add('X=(' + FloatToStr(-1 * StrToFloat(Donnee2.Text)) + ')/ (2*' + Donnee1.Text + ')');
      lbResult.Items.Add('X=' + FloatToStr(-1 *  StrToFloat(Donnee2.Text) / (2 * StrToFloat(Donnee1.Text))));
      lbResult.Items.Add('****************************************************************************');
    end
  else
    begin
      lbResult.Items.Add('Delta positif');
      lbResult.Items.Add('Deux solutions');
      lbResult.Items.Add('X=(' + FloatToStr(-1 * StrToFloat(Donnee2.Text))+ '-V' + FloatToStr(Delta) + ')/ (2*' + FloatToStr(StrToFloat(Donnee1.Text)) + ')');
      lbResult.Items.Add('X=' + FloatToStr((-1 *  StrToFloat(Donnee2.Text) - sqrt(Delta)) / (2 * StrToFloat(Donnee1.Text))));
      lbResult.Items.Add('ou');
      lbResult.Items.Add('X=(' + FloatToStr(-1 * StrToFloat(Donnee2.Text))+ '+V' + FloatToStr(Delta) + ')/ (2*' + FloatToStr(StrToFloat(Donnee1.Text)) + ')');
      lbResult.Items.Add('X=' + FloatToStr((-1 *  StrToFloat(Donnee2.Text) + sqrt(Delta)) / (2 * StrToFloat(Donnee1.Text))));
      lbResult.Items.Add('****************************************************************************');
    end;
  end;

end;

procedure TfmTrinome.Couperdonnes1Click(Sender: TObject);
begin
Clipboard.AsText :=
           txOp1.Caption + FloatToStr(StrToFloat(Donnee1.Text)) + txOp2.Caption + FloatToStr(StrToFloat(Donnee2.Text)) + txOp3.Caption + FloatToStr(StrToFloat(Donnee3.Text)) + TxResult.Caption;
Donnee1.Clear;
Donnee2.Clear;
Donnee3.Clear;
end;

procedure TfmTrinome.Couperrsultats1Click(Sender: TObject);
begin
Clipboard.AsText := lbResult.Items.Text;
lbResult.Items.Clear;
end;

procedure TfmTrinome.Copier2Click(Sender: TObject);
begin
Clipboard.AsText := Donnee2.SelText;
end;

procedure TfmTrinome.Copier3Click(Sender: TObject);
begin
Clipboard.AsText := Donnee3.SelText;
end;

procedure TfmTrinome.Couper2Click(Sender: TObject);
begin
Clipboard.AsText := Donnee2.SelText;
Donnee2.ClearSelection
end;

procedure TfmTrinome.Couper3Click(Sender: TObject);
begin
Clipboard.AsText := Donnee3.SelText;
Donnee3.ClearSelection
end;

procedure TfmTrinome.Coller2Click(Sender: TObject);
begin
Donnee2.Text := Donnee2.Text + Clipboard.Astext;
end;

procedure TfmTrinome.Coller3Click(Sender: TObject);
begin
Donnee3.Text := Donnee3.Text + Clipboard.Astext;
end;

procedure TfmTrinome.Lenombrei1Click(Sender: TObject);
var
Nbri: TStringList;
begin
Nbri := TStringList.Create;
Nbri.Add('**********************************************************');
Nbri.Add('Le nombre i est un nombre de substitution');
Nbri.Add('Il n''est pas réel et remplace la racine carrée de -1');
Nbri.Add('C''est à dire que la racine carrée d''un nombre négatif');
Nbri.Add('est égale à la racine carrée de la distance à 0 de ce');
Nbri.Add('nombre multipliée par i.');
Nbri.Add('Ce n''est pas un nombre réel -> c''est un nombre complexe');
Nbri.Add('**********************************************************');
ShowMessage(Nbri.Text);
Nbri.Destroy;
end;

end.
//fiche

object fmTrinome: TfmTrinome
  Left = 237
  Top = 218
  Width = 486
  Height = 360
  HorzScrollBar.ParentColor = False
  Caption = 'Trinomes du second degré'
  Color = clWindowText
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  Menu = MainMenu1
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object txIntro: TLabel
    Left = 8
    Top = 16
    Width = 447
    Height = 29
    Align = alCustom
    Caption = 'Dans un trinôme du second degré tel que '
    Font.Charset = DEFAULT_CHARSET
    Font.Color = cl3DLight
    Font.Height = -24
    Font.Name = 'MS Sans Serif'
    Font.Style = []
    ParentFont = False
  end
  object txOp1: TLabel
    Left = 0
    Top = 64
    Width = 57
    Height = 29
    Caption = 'P(x)='
    Font.Charset = DEFAULT_CHARSET
    Font.Color = cl3DLight
    Font.Height = -24
    Font.Name = 'MS Sans Serif'
    Font.Style = []
    ParentFont = False
  end
  object txOp2: TLabel
    Left = 168
    Top = 64
    Width = 38
    Height = 29
    Caption = 'X²+'
    Font.Charset = DEFAULT_CHARSET
    Font.Color = cl3DLight
    Font.Height = -24
    Font.Name = 'MS Sans Serif'
    Font.Style = []
    ParentFont = False
  end
  object txOp3: TLabel
    Left = 312
    Top = 64
    Width = 31
    Height = 29
    Caption = 'X+'
    Font.Charset = DEFAULT_CHARSET
    Font.Color = cl3DLight
    Font.Height = -24
    Font.Name = 'MS Sans Serif'
    Font.Style = []
    ParentFont = False
  end
  object txResult: TLabel
    Left = 448
    Top = 64
    Width = 27
    Height = 29
    Caption = '=0'
    Font.Charset = DEFAULT_CHARSET
    Font.Color = cl3DLight
    Font.Height = -24
    Font.Name = 'MS Sans Serif'
    Font.Style = []
    ParentFont = False
  end
  object lbresult: TListBox
    Left = 0
    Top = 162
    Width = 478
    Height = 143
    Align = alBottom
    Color = clBlack
    Font.Charset = DEFAULT_CHARSET
    Font.Color = cl3DLight
    Font.Height = -11
    Font.Name = 'MS Sans Serif'
    Font.Style = []
    ItemHeight = 13
    MultiSelect = True
    ParentFont = False
    TabOrder = 0
  end
  object donnee1: TEdit
    Left = 64
    Top = 72
    Width = 97
    Height = 21
    Color = clInfoText
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clRed
    Font.Height = -11
    Font.Name = 'MS Sans Serif'
    Font.Style = []
    ParentFont = False
    PopupMenu = PopupMenu1
    TabOrder = 1
  end
  object donnee2: TEdit
    Left = 208
    Top = 72
    Width = 97
    Height = 21
    Color = clWindowText
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clRed
    Font.Height = -11
    Font.Name = 'MS Sans Serif'
    Font.Style = []
    ParentFont = False
    PopupMenu = PopupMenu2
    TabOrder = 2
  end
  object donnee3: TEdit
    Left = 344
    Top = 72
    Width = 97
    Height = 21
    Color = clWindowText
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clRed
    Font.Height = -11
    Font.Name = 'MS Sans Serif'
    Font.Style = []
    ParentFont = False
    PopupMenu = PopupMenu3
    TabOrder = 3
  end
  object btresoud: TButton
    Left = 16
    Top = 112
    Width = 121
    Height = 25
    Caption = 'Resoudre'
    Default = True
    TabOrder = 4
    OnClick = btresoudClick
  end
  object btefface: TButton
    Left = 160
    Top = 112
    Width = 129
    Height = 25
    Caption = 'Effacer données'
    TabOrder = 5
    OnClick = bteffaceClick
  end
  object bteftout: TButton
    Left = 312
    Top = 112
    Width = 129
    Height = 25
    Caption = 'Effacer Tout'
    TabOrder = 6
    OnClick = bteftoutClick
  end
  object MainMenu1: TMainMenu
    object Fichier1: TMenuItem
      Caption = 'Fichier'
      object Fermer1: TMenuItem
        Caption = 'Fermer'
        OnClick = Fermer1Click
      end
    end
    object Edition1: TMenuItem
      Caption = 'Edition'
      object Copierdonnees1: TMenuItem
        Caption = 'Copier données'
        OnClick = Copierdonnees1Click
      end
      object Copierresultats1: TMenuItem
        Caption = 'Copier résultats'
        OnClick = Copierresultats1Click
      end
      object N1: TMenuItem
        Caption = '-'
      end
      object Couperdonnes1: TMenuItem
        Caption = 'Couper données'
        OnClick = Couperdonnes1Click
      end
      object Couperrsultats1: TMenuItem
        Caption = 'Couper résultats'
        OnClick = Couperrsultats1Click
      end
    end
    object Aide1: TMenuItem
      Caption = 'Aide'
      object Lenombrei1: TMenuItem
        Caption = 'Le nombre i'
        OnClick = Lenombrei1Click
      end
      object Aproposde1: TMenuItem
        Caption = 'A propos de'
        OnClick = Aproposde1Click
      end
    end
  end
  object PopupMenu1: TPopupMenu
    object Copier1: TMenuItem
      Caption = 'Copier'
      OnClick = Copier1Click
    end
    object Coller1: TMenuItem
      Caption = 'Coller'
      OnClick = Coller1Click
    end
    object Couper1: TMenuItem
      Caption = 'Couper'
      OnClick = Couper1Click
    end
  end
  object PopupMenu2: TPopupMenu
    object Copier2: TMenuItem
      Caption = 'Copier'
      OnClick = Copier2Click
    end
    object Coller2: TMenuItem
      Caption = 'Coller'
      OnClick = Coller2Click
    end
    object Couper2: TMenuItem
      Caption = 'Couper'
      OnClick = Couper2Click
    end
  end
  object PopupMenu3: TPopupMenu
    object Copier3: TMenuItem
      Caption = 'Copier'
      OnClick = Copier3Click
    end
    object Coller3: TMenuItem
      Caption = 'Coller'
      OnClick = Coller3Click
    end
    object Couper3: TMenuItem
      Caption = 'Couper'
      OnClick = Couper3Click
    end
  end
end

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
637
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
9 janvier 2017

pour ne rentrer que des valeurs numérique dans chacun des événements onKeyPress des edit met le code
procedure TfmTrinome.donnee1KeyPress(Sender: TObject; var Key: Char);
begin
// SEULE LES CHIFFRES 0 à 9 et les caractères ,.-
// #8 POUR POUVOIR EFFACER
// decimalseparator LE S2PARATEUR DECIMAL DU SYSTEME
if pos(key,'0123456789,.-'#8+decimalseparator )=0 then key :=#0;
// CELON LA FRAPPE DE . ou , c'est decimalseparator qui est pris en compte
if pos(key, ',.') <>0 then key := decimalseparator;
// LE decimalseparator n'est accepté qu'une seule fois
if (key=decimalseparator ) and ( pos(decimalseparator, donnee1.Text) <> 0 ) then key :=#0;
// LE SIGNE - n'est accepté qu'au début
if ( donnee1.SelStart<>0) and (key='-') then key :=#0;

end;

remarque
les quantités à calculer sont
signe(Delta)
-b /(2a)
sqrt( abs(Delta) ) /(2a)

suivant le signe de delta on ajoute ou non ...
Messages postés
128
Date d'inscription
lundi 8 août 2005
Statut
Membre
Dernière intervention
20 juillet 2009

Je préfère mettre l'exe pour que les membres de CodeS-SourceS qui ne programment pas en Pascal Objet puissent bénéficier du programme, meme si le code source ne leur est d'aucune utilité.
Messages postés
637
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
9 janvier 2017

Tous est dans la representation des nombre complexes en langage informatique.

La résolution avec delta négatif se fait en séparant les parties réelles et imaginaires.
en untilisant une tabl[0..1 , 0..1] il est possible de ranger les solutions telque:

La partie réelle est mise dans une table[0,0] et table[1,0] et la partie imaginaire dans le table[0,1]et table[1,1] . Table[0,1] contient la racine carré de la valeur absolue. comme il y a 2 racines imaginaires l'une est positive l'autre négative,Table[1,1]=-Table[0,1].

si delta est positif ou nul alors la partie imaginaire est nule d'ou Table[1,1]=-Table[0,1]= 0. et les solutions sont dans Table[0,0] et Table[1,0].

est-ce claire ...

Il existe des programmes avec des nombres complexe..somme multiplication ... pour cela on utilise des vecteurs ou tables ou alors des variants

Voir des exmples sur le site DELPHI

en modifiant légérement la formule de " CptPingu "

on a
-> (-b /(2a) + i*Rac( |Delta| ) ) /(2a)
-> (-b /(2a) - i*Rac( |Delta| ) ) /(2a)


Pour visualiser les solutions alors on visualise la partie réelle puis imaginaire.

Bon courage

Pour info x^4 + a.x^3 + b.x^2 + c.x + d =0
a des solutions avec des racines carré et cubique.

pour x^5 et plus alors c'est autre chose
Messages postés
3840
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
121
1_Tu ne met pas le .exe, on compilera ton programme.
2_Tu ne met pas les fichiers suivants: .~dfm, .dof, .~pas, .cfg
3_Pas besoin de copier tout ton code dans la fenetre source. Tu ne colle que le principe que tu veu illustrer
4_Pour resoudre un polynome négatif: Delta<0 2 solution:
Soit: ax²+bx+c
Les solutions sont:
-> (-b-(i*Rac(-Delta)))/(2a)
-> (-b+(i*Rac(-Delta)))/(2a)

Avec I=Rac(-1)

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.