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

JacKrauser 31 Messages postés lundi 14 mai 2012Date d'inscription 21 août 2012 Dernière intervention - 17 juin 2012 à 17:29 - Dernière réponse : cs_walidlam 111 Messages postés lundi 30 mai 2011Date d'inscription 29 avril 2013 Dernière intervention
- 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

Répondre au sujet
cs_walidlam 111 Messages postés lundi 30 mai 2011Date d'inscription 29 avril 2013 Dernière intervention - 17 juin 2012 à 18:43
+3
Utile
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;

@+
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_walidlam
cs_walidlam 111 Messages postés lundi 30 mai 2011Date d'inscription 29 avril 2013 Dernière intervention - 17 juin 2012 à 19:05
+3
Utile
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;

@+
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_walidlam
cs_walidlam 111 Messages postés lundi 30 mai 2011Date d'inscription 29 avril 2013 Dernière intervention - 18 juin 2012 à 00:34
+3
Utile
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;

@+
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_walidlam
JacKrauser 31 Messages postés lundi 14 mai 2012Date d'inscription 21 août 2012 Dernière intervention - 17 juin 2012 à 21:00
0
Utile
Comment l'utiliser ?
Je dois créer une nouvelle "Unité" ?
Merci.
Commenter la réponse de JacKrauser
JacKrauser 31 Messages postés lundi 14 mai 2012Date d'inscription 21 août 2012 Dernière intervention - 18 juin 2012 à 09:08
0
Utile
Ca marche !
Merci walidlam, je clôture le post.
Commenter la réponse de JacKrauser
Utilisateur anonyme - 19 juin 2012 à 21:49
0
Utile
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
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 20 juin 2012 à 10:47
0
Utile
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
cs_walidlam 111 Messages postés lundi 30 mai 2011Date d'inscription 29 avril 2013 Dernière intervention - 20 juin 2012 à 13:27
0
Utile
salut!!
@ Francky23012301
mauvais en terme de performance
c'set une fonction de récursivité..


@+
Commenter la réponse de cs_walidlam
Caribensila 2671 Messages postés jeudi 15 janvier 2004Date d'inscription 18 janvier 2018 Dernière intervention - 20 juin 2012 à 15:12
0
Utile
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
cs_walidlam 111 Messages postés lundi 30 mai 2011Date d'inscription 29 avril 2013 Dernière intervention - 21 juin 2012 à 20:35
0
Utile
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
Caribensila 2671 Messages postés jeudi 15 janvier 2004Date d'inscription 18 janvier 2018 Dernière intervention - 21 juin 2012 à 21:16
0
Utile
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
Utilisateur anonyme - 21 juin 2012 à 23:36
0
Utile
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
cs_walidlam 111 Messages postés lundi 30 mai 2011Date d'inscription 29 avril 2013 Dernière intervention - 22 juin 2012 à 20:37
0
Utile
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

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.