Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MÉTHODE DICHOTOMIQUE : CALCUL DE RACINE CUBIQUE




Description

Cliquez pour voir la capture en taille normale
Le programme suivant calcul, grâce à la méthode dichotomique, la racine cubique d'un nombre donné. La marge d'erreur est de 0.0001.
 

Source

  • ///////////////////////////////////////////////////////////
  • // Fichier : uDichotomique.pas //
  • // Auteur : Stéphane HAIMET //
  • // Date de création : 12/02/08 //
  • // Date de modification : 13/02/08 //
  • ///////////////////////////////////////////////////////////
  • unit uDichotomique;
  • interface
  • uses
  • Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  • Dialogs, StdCtrls, Buttons;
  • type
  • TForm1 = class(TForm)
  • Label1: TLabel;
  • Label2: TLabel;
  • Label3: TLabel;
  • eIteration: TEdit;
  • eRacine: TEdit;
  • eNombre: TEdit;
  • bCalculer: TBitBtn;
  • bFermer: TBitBtn;
  • lMessage: TLabel;
  • procedure eNombreChange(Sender: TObject);
  • procedure bCalculerClick(Sender: TObject);
  • function psqrt(nombre:real):real;
  • private
  • { Déclarations privées }
  • public
  • { Déclarations publiques }
  • end;
  • var
  • Form1: TForm1;
  • //Variable publique :
  • n: integer;
  • implementation
  • {$R *.dfm}
  • //Quand on change l'édit nombre
  • procedure TForm1.eNombreChange(Sender: TObject);
  • begin
  • lMessage.caption := '';
  • eIteration.Text:='';
  • eRacine.Text:='';
  • end;
  • //Quand on clique sur le bouton "calculer"
  • procedure TForm1.bCalculerClick(Sender: TObject);
  • var nombre, resultat : real;
  • begin
  • nombre:=strtofloat(eNombre.text);
  • resultat:=psqrt(nombre);
  • eIteration.text:=inttostr(n);
  • eRacine.Text:=floattostr(resultat);
  • end;
  • //Fonction qui calcul la racine cubique
  • function TForm1.psqrt(nombre:real):real;
  • var bornInf, bornSup, bornMil : real;
  • begin
  • n:=0;
  • bornMil:=(bornInf+bornSup)/2;
  • //Si on a un nombre positif :
  • if (nombre>0) then
  • begin
  • bornInf:=0;
  • bornSup:=nombre;
  • end
  • else begin
  • bornInf:=nombre;
  • bornSup:=0;
  • end;
  • //On commence la boucle de recherche
  • repeat
  • if((bornMil*bornMil*bornMil)<nombre) then
  • bornInf:=bornMil
  • else
  • bornSup:=bornMil;
  • bornMil:=(bornInf+bornSup)/2;
  • n:=n+1;
  • until (((nombre-(bornMil*bornMil*bornMil))>-0.0001)
  • AND (nombre-(bornMil*bornMil*bornMil)<0.0001));
  • result:=bornmil;
  • end;
  • end.
///////////////////////////////////////////////////////////
//  Fichier              : uDichotomique.pas             //
//  Auteur               : Stéphane HAIMET               //
//  Date de création     : 12/02/08                      //
//  Date de modification : 13/02/08                      //
///////////////////////////////////////////////////////////


unit uDichotomique;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    eIteration: TEdit;
    eRacine: TEdit;
    eNombre: TEdit;
    bCalculer: TBitBtn;
    bFermer: TBitBtn;
    lMessage: TLabel;
    procedure eNombreChange(Sender: TObject);
    procedure bCalculerClick(Sender: TObject);
    function psqrt(nombre:real):real;
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;
  //Variable publique : 
  n: integer;

implementation

{$R *.dfm}


//Quand on change l'édit nombre
procedure TForm1.eNombreChange(Sender: TObject);
begin
   lMessage.caption := '';
   eIteration.Text:='';
   eRacine.Text:='';
end;


//Quand on clique sur le bouton "calculer"
procedure TForm1.bCalculerClick(Sender: TObject);
var nombre, resultat : real;
begin
   nombre:=strtofloat(eNombre.text);
   resultat:=psqrt(nombre);
   eIteration.text:=inttostr(n);
   eRacine.Text:=floattostr(resultat);
end;


//Fonction qui calcul la racine cubique
function TForm1.psqrt(nombre:real):real;
var bornInf, bornSup, bornMil : real;
begin
   n:=0;
   bornMil:=(bornInf+bornSup)/2;
   //Si on a un nombre positif :
   if (nombre>0) then
   begin
      bornInf:=0;
      bornSup:=nombre;
   end
   else begin
      bornInf:=nombre;
      bornSup:=0;
   end;
   //On commence la boucle de recherche
      repeat
         if((bornMil*bornMil*bornMil)<nombre) then
            bornInf:=bornMil
         else
            bornSup:=bornMil;
         bornMil:=(bornInf+bornSup)/2;
         n:=n+1;
      until (((nombre-(bornMil*bornMil*bornMil))>-0.0001)
             AND (nombre-(bornMil*bornMil*bornMil)<0.0001));
   result:=bornmil;
end;


end.

Conclusion

Enjoy
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   Programme 09 OK

Télécharger le zip

Commentaires et avis

Aucun commentaire pour le moment.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Racine cubique [ par lanosic ] J'aimerais savoir comment on fait pour calculer une racine cubique. Pour une racine carée c'est avec (Sqrt), mais il n'y a pas de fonction pour la rac Exécution d'une méthode incluse dans un package PL/SQL [ par DeadSoul ] Bonjour,Voici mon problème :Je désire exécuter une méthode PL/SQL incluse dans un package OracleJe connais l'existence de la classe TStoredProcedure, Affichage écran de demarrage [ par lirva ] Bonjour,J'ai suivi la méthode de l'aide pour afficher une Form pendant 3 secondes au démarrage de mon appli :&lt;&lt;procedure TForm1.FormActivate(Sen Appel d'une Form [ par apz ] salut, pour appeler une form, certains utilisent la méthode suivante : ------------------------------------------------------------Form1.Show--------- Choisir la piste d'un cd audio [ par alexistoulotte ] Est-ce que qqn connait une méthode pour aller directement a la piste d'un cd audio que l'utilisateur a choisi (par un edit par exemple).Merci d'avance Libération de ressources [ par nicolaspennaneach ] j'ai une application MDI où chaque fenètre enfant possède un thread pour effectuer certaines opérations. Lorsque j'exécute la méthode formclose d'une pointeur de méthode dans une dll ... [ par silmortes ] Slt !!!!J'ai un soucis j'ai un objet TIBDatabase que je créé dynamiquement dans ma dll : Database := TIBDatabase.Create(NIL); Da Donner une direction à un objet (bitmap ou autre) [ par Yml ] Bonjour,J'aimerai développer un casse brique et pour cela, il me faudrait une méthode pour que la balle puisse se diriger dans toutes les directions.P Méthode AddIndex [ par margout ] MargoutBonjour à tous,J'ai utilisé la methode AddIndex avec une TTable pour ajouter un index secondaire sur un champsTable1.AddIndex ('Indexdate', 'da Code Delphi de méthodes de planification [ par abidcha ] Bonjour,J'aimerai savoir si quelqu'un à le code Delphi des méthodes de planification de la production suivantes:- Méthode MRP - Méthode JIT (Just In T


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version


HTC G1

Entre 449€ et 449€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,499 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.