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

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

Votre réponse

13 réponses

Meilleure réponse
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Dernière intervention
29 avril 2013
- 17 juin 2012 à 18:43
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;

@+

Merci cs_walidlam 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de cs_walidlam
Meilleure réponse
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Dernière intervention
29 avril 2013
- 17 juin 2012 à 19:05
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;

@+

Merci cs_walidlam 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de cs_walidlam
Meilleure réponse
Messages postés
111
Date d'inscription
lundi 30 mai 2011
Dernière intervention
29 avril 2013
- 18 juin 2012 à 00:34
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;

@+

Merci cs_walidlam 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de cs_walidlam
Messages postés
31
Date d'inscription
lundi 14 mai 2012
Dernière intervention
21 août 2012
- 17 juin 2012 à 21:00
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
Dernière intervention
21 août 2012
- 18 juin 2012 à 09:08
0
Merci
Ca marche !
Merci walidlam, je clôture le post.
Commenter la réponse de JacKrauser
- 19 juin 2012 à 21:49
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
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
- 20 juin 2012 à 10:47
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
Dernière intervention
29 avril 2013
- 20 juin 2012 à 13:27
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
2684
Date d'inscription
jeudi 15 janvier 2004
Dernière intervention
26 juillet 2018
- 20 juin 2012 à 15:12
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
Dernière intervention
29 avril 2013
- 21 juin 2012 à 20:35
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
2684
Date d'inscription
jeudi 15 janvier 2004
Dernière intervention
26 juillet 2018
- 21 juin 2012 à 21:16
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
- 21 juin 2012 à 23:36
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
Dernière intervention
29 avril 2013
- 22 juin 2012 à 20:37
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

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.