Fonction factorielle dans Delphi (!) [Résolu]

Signaler
Messages postés
31
Date d'inscription
lundi 14 mai 2012
Statut
Membre
Dernière intervention
21 août 2012
-
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Statut
Membre
Dernière intervention
29 avril 2013
-
Salut à tous !
Connaîtriez vous la fonction factorielle dans Delphi ?
Malgré mes recherches sur le web et dans l'aide de Delphi,
je n'arrive pas à la trouver ...
Pour ceux qui ne la connaisse pas,
en maths ça donne çà :
5! 5 * 4 * 3 * 2 * 1 120
Merci d'avance.

13 réponses

Messages postés
111
Date d'inscription
lundi 30 mai 2011
Statut
Membre
Dernière intervention
29 avril 2013
1
salut!!
voila le code:
function factorielle(fact:integer):integer;
begin
if fact >=1 then
factorielle:=fact*factorielle(fact-1)
else
factorielle:=1;

end;

 //modele d'execution=>
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage ('le factorielle de '+edit1.text + ' est :'+inttostr(factorielle(strtoint(edit1.Text))));
end;

@+
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Statut
Membre
Dernière intervention
29 avril 2013
1
salut
//modele d'exucution sera comme suit
procedure TForm1.Button1Click(Sender: TObject);
begin
if  strtoint(edit1.Text)>=1 then
showmessage ('le factorielle de '+edit1.text + ' est :'+inttostr(factorielle(strtoint(edit1.Text))))
else
showmessage('pas de factorielle pour ce genre de nbrs');
end;

@+
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Statut
Membre
Dernière intervention
29 avril 2013
1
seulement copier le code du fonction et fait le coller c'est tt!!

après dans tedit mettez le nbre pour calculer fact !!!
un bouton pour exécuter la fonction ..
autre exemple d exécution
procedure TForm1.Button1Click(Sender: TObject);
begin
if  strtoint(edit1.Text)> 0 then
label1.caption:='le factorielle de '+edit1.text + ' est :'+inttostr(factorielle( strtoint(edit1.Text)))
else
showmessage('pas de factorielle pour ce genre de nbrs');
end;

@+
Messages postés
31
Date d'inscription
lundi 14 mai 2012
Statut
Membre
Dernière intervention
21 août 2012

Comment l'utiliser ?
Je dois créer une nouvelle "Unité" ?
Merci.
Messages postés
31
Date d'inscription
lundi 14 mai 2012
Statut
Membre
Dernière intervention
21 août 2012

Ca marche !
Merci walidlam, je clôture le post.

Salut,

Si je peux me permettre : de rappeler une fonction comme tu le suggères est mauvais en terme de performance. Un Repeat ... Until est préférable
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
function factorielle(n: integer): double;
begin
  Result :1;       //pm: 0! 1 
  while n > 1 do
  begin
    result := result * n;
    n := n - 1
  end;
end;



cantador
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Statut
Membre
Dernière intervention
29 avril 2013
1
salut!!
@ Francky23012301
mauvais en terme de performance
c'set une fonction de récursivité..


@+
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13
Salut,

@Walidlam :
C'est justement parce que c'est une fonction récursive qu'elle est plus lente (ta fonction est 75% plus lente que celle de Cantador).

La récursivité est un concept mathématique incontournable, mais à éviter en programmation lorsqu'on cherche les performances (ce qui devrait être, selon moi, toujours le cas).
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Statut
Membre
Dernière intervention
29 avril 2013
1
salut!!
@Caribensila
on peut faire ça
function fact(f:integer):integer;
var i:integer;
begin
result:=1;
if f>1 then
for i:=f downto 1 do 
Result:=Result*i;
end;

Mais la recursivite est une méthode qui nous permet de faire les calculs sans Utiliser les boucle = > DONC
La Recursivite est une boucle Intellegente
elle se presnte comme suit:
N! 1 si N0 ou N!= N*(N-1) si N>0
enfin Pour Moi la récursivité est la meilleure solution pour les problèmes des calculs.

merci et @+
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13
C'est peut-être la meilleure solution pour toi. Mais en programmation c'est toujours l'utilisateur qui juge.

Et l'utilisateur se fout pas mal que tu utilises des boucles "intelligentes" car il ne le voit pas.

Il dira simplement :
« Pfff! Qu'est-ce que c'est lent ! »

Salut!!

Pour Moi la récursivité est la meilleure solution pour les problèmes des calculs.


Le jour ou tu feras un vrai soft avec des traitements lourds, tu veras le retour des utilisateurs assez rapidement si tu ne fais jamais attention à la rapidité des techniques que tu utilises
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Statut
Membre
Dernière intervention
29 avril 2013
1
salut !!
1_ je suis ravis de faire cette conversation avec vous
2_ je sais que par fois que la méthode récursive soit plus complexe, plus lourde...
mais elle peut être un outil précieux pour la simplification des codes et Se focaliser sur les mêmes sources n'est jamais une bonne idée ! et ce n’est pas une raison pour oublier la récursivité!

personnellement j'ai jamais utiliser la récursivité dans mes programmes mais sa empêche pas que dans ce code le resultat est tres vite!!

voir ici..

@+