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

Messages postés
31
Date d'inscription
lundi 14 mai 2012
Statut
Membre
Dernière intervention
21 août 2012
- - Dernière réponse : cs_walidlam
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Statut
Membre
Dernière intervention
29 avril 2013
- 22 juin 2012 à 20:37
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.
Afficher la suite 

13 réponses

Meilleure réponse
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Statut
Membre
Dernière intervention
29 avril 2013
1
3
Merci
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;

@+

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 202 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_walidlam
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Statut
Membre
Dernière intervention
29 avril 2013
1
3
Merci
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;

@+

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 202 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_walidlam
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Statut
Membre
Dernière intervention
29 avril 2013
1
3
Merci
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;

@+

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 202 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_walidlam
Messages postés
31
Date d'inscription
lundi 14 mai 2012
Statut
Membre
Dernière intervention
21 août 2012
0
Merci
Comment l'utiliser ?
Je dois créer une nouvelle "Unité" ?
Merci.
Commenter la réponse de JacKrauser
Messages postés
31
Date d'inscription
lundi 14 mai 2012
Statut
Membre
Dernière intervention
21 août 2012
0
Merci
Ca marche !
Merci walidlam, je clôture le post.
Commenter la réponse de JacKrauser
0
Merci
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
Commenter la réponse de Utilisateur anonyme
Messages postés
4716
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
10
0
Merci
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
Commenter la réponse de cs_cantador
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Statut
Membre
Dernière intervention
29 avril 2013
1
0
Merci
salut!!
@ Francky23012301
mauvais en terme de performance
c'set une fonction de récursivité..


@+
Commenter la réponse de cs_walidlam
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13
0
Merci
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).
Commenter la réponse de Caribensila
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Statut
Membre
Dernière intervention
29 avril 2013
1
0
Merci
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 @+
Commenter la réponse de cs_walidlam
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13
0
Merci
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 ! »
Commenter la réponse de Caribensila
0
Merci
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
Commenter la réponse de Utilisateur anonyme
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Statut
Membre
Dernière intervention
29 avril 2013
1
0
Merci
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..

@+
Commenter la réponse de cs_walidlam