Fonction factorielle dans Delphi (!)

Résolu
JacKrauser Messages postés 31 Date d'inscription lundi 14 mai 2012 Statut Membre Dernière intervention 21 août 2012 - 17 juin 2012 à 17:29
cs_walidlam Messages postés 107 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.

13 réponses

cs_walidlam Messages postés 107 Date d'inscription lundi 30 mai 2011 Statut Membre Dernière intervention 29 avril 2013 1
17 juin 2012 à 18:43
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;

@+
3
cs_walidlam Messages postés 107 Date d'inscription lundi 30 mai 2011 Statut Membre Dernière intervention 29 avril 2013 1
17 juin 2012 à 19:05
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;

@+
3
cs_walidlam Messages postés 107 Date d'inscription lundi 30 mai 2011 Statut Membre Dernière intervention 29 avril 2013 1
18 juin 2012 à 00:34
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;

@+
3
JacKrauser Messages postés 31 Date d'inscription lundi 14 mai 2012 Statut Membre Dernière intervention 21 août 2012
17 juin 2012 à 21:00
Comment l'utiliser ?
Je dois créer une nouvelle "Unité" ?
Merci.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
JacKrauser Messages postés 31 Date d'inscription lundi 14 mai 2012 Statut Membre Dernière intervention 21 août 2012
18 juin 2012 à 09:08
Ca marche !
Merci walidlam, je clôture le post.
0
Utilisateur anonyme
19 juin 2012 à 21:49
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
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
20 juin 2012 à 10:47
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
0
cs_walidlam Messages postés 107 Date d'inscription lundi 30 mai 2011 Statut Membre Dernière intervention 29 avril 2013 1
20 juin 2012 à 13:27
salut!!
@ Francky23012301
mauvais en terme de performance
c'set une fonction de récursivité..


@+
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
20 juin 2012 à 15:12
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).
0
cs_walidlam Messages postés 107 Date d'inscription lundi 30 mai 2011 Statut Membre Dernière intervention 29 avril 2013 1
21 juin 2012 à 20:35
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 @+
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
21 juin 2012 à 21:16
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 ! »
0
Utilisateur anonyme
21 juin 2012 à 23:36
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
0
cs_walidlam Messages postés 107 Date d'inscription lundi 30 mai 2011 Statut Membre Dernière intervention 29 avril 2013 1
22 juin 2012 à 20:37
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..

@+
0
Rejoignez-nous