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