bonjour
je cherche a programmer une fonction qui a pour role de caluculer factoriel de n mais cette fonction est
particuliere par ex pour n=7, elle fera
1*3*5*7 et pour n=4 elle fera 2*4
c est en C++ si qqun peut m aider
merci Dan
bonjour
je cherche a programmer une fonction qui a pour role de caluculer factoriel de n mais cette fonction est
particuliere par ex pour n=7, elle fera
1*3*5*7 et pour n=4 elle fera 2*4
c est en C++ si qqun peut m aider
merci Dan
Ce n'est donc pas la fonction factorielle de n si tu ne fais pas n*n-1*n-2..*2*1
Pour qu'on puisse aider explique nous comment tu sais quel multiplication tu dois faire
voila la fonction qui faut que je calcule est :
n!! = pour des nombres paires 2*4*6*8*........*n
= pour des nombres impaires 1*3*5*7*.....*n
voici ce que j ai fait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 #include <iostream> using namespace std; int dfac (int &n){ int fac=1, i; if (n%2==0){ for (i=0;i<=n;i++) fac=fac*n; n=n*2; } else { for (i=0;i<n;i++) fac=fac*n; n=n-2; } return fac; } int main(){ int n; cout << "Entre une veleur n dont tu veux calculer n!!:" << endl; cin >> n; int dfac (int &n); cout << n << "!!= " << dfac (n) << endl; return 0; } ca ne fonctionne pas expliquez moi svp mes erreurs en rouge merci Dan
Perso je ferai un truc du genre .. essais et tiens moi au courant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 int dfac (int &n) { int fac=1, i; if (n%2==0) // alors ton nombre est pair { for (i=2;i<=n;i+=2) // on commence a 2 .. car si on commence a 0 .. 0*n'importe quoi egal 0 fac=fac*n; } else { // le nombre est imair for (i=1;i<=n;i+=2) fac=fac*n; }
tu peux m explique ce qui ne vas pas chez moi ?
pourquoi tu mets & quand du declare la fonction a la variable ?
Merci
Pas besoin de if si tu pars de n... (attention quand même aux conditions aux limites -- pascompliqué pour autant)
(Prendre le paramètre par référence n'a aucun sens)
(Déclarer dfac dans le main() ne sert à rien. Il est déjà défini, contente-toi de l'utiliser)
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
Les & ne sont pas du tout necessaire ici .. tu peux les enlever !
L'appel a la fonction se ferait ainsi :
L'entete de la fonction serait
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 dfac (n);
Les & sont a utiliser avec precaution ! car c'est pour passer l'adresse memoire .. donc pour des int .. autant les passes directement !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 int dfac (int n)
Et pour le reste c'es comme je te l'ai mis avant !
j'ai pratiquement rien change .. sauf que au lieu de faire i++ dans le for .. j'ai fais i+=2
Ce qui veut dire qu'on increment i de 2 a chaque passage dans la boucle (c'est bien ce qu'on veut .. avoir que les nombres pairs ou que les nombre impair)
Bonjour,
j'ai pas tout lu, mais pourquoi pas une fonction récursive ?
si mes souvenirs sont bons, c'est pas le plus efficace en temps de calcul, mais c'est facile à programmer dans le cas présent.
Enjoy yourself !
non ?
je pensais à ça
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 unsigned int f(unsigned int n) { if (n<=1) return 1; unsigned int m = (n-2)>0 ? n-2 : 1; return n*f(m); }
Enjoy yourself !
Le deuxième test est inutile car englobé par le premier.
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
correct.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 unsigned int f(unsigned int n) { if (n<=1) return 1; return n*f(n-2); }
Enjoy yourself !
Si on veut aider le compilateur à optimiser la récursivité, il peut être utile de la transformer en récursivité terminale :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 unsigned int f(unsigned int n) { return f1 (n, 1); } unsigned int f1(unsigned int n, unsigned int a) { if (n<=1) return a; return f1(n-2, n*a); }
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.
tu peux m'expliquer ?
Enjoy yourself !
Bonjour,
je voulais juste dire que la fonction décrite par gruni1 n'est pas une factorielle simple mais une multi-factorielle. Plus précisément, dans le cas de gruni1, il s'agit d'une multi-factorielle sur les nombres paires ou impaires.
Factorielle simple : n! = (n)(n-1)(n-2)(n-3).....(1)
Multi-Factorielle paire : n!! = (n)(n-2)(n-4).....(2) avec n paire
Multi-Factorielle impaire : n!! = (n)(n-2)(n-4).....(1) avec n impaire
(notez bien le double emploi du point d'exclamation).
Voici un lien vers un site qui détaille les multi-factorielles et primorielle (factorielle de nombres premiers).
http://membres.lycos.fr/villemingera...r/primorie.htm
Voila.
Flo.
Par exempe : http://cermics.enpc.fr/polys/info1/main/node22.htmlEnvoyé par bigboomshakala
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.
merciEnvoyé par JolyLoic
![]()
Enjoy yourself !
Partager