[Programme C] Produit des doubles des n premiers entiers
Résolu
Icylph
Messages postés
6
Statut
Membre
-
cocodu67... Messages postés 3178 Date d'inscription Statut Membre Dernière intervention -
cocodu67... Messages postés 3178 Date d'inscription Statut Membre Dernière intervention -
Bonsoir à tous,
alors voila, comme le dit le titre j'ai un programme à écrire qui doit calculer la somme de n premiers entiers. Donc déjà voila ce que j'ai écrit :
Et je n'arrive pas du tout à comprendre pourquoi quand je le lance et que je lui demande pour les 3 premiers entiers il me renvoi 24 au lieu de 48.
Si vous pouviez m'apporter vos lumières ça serait grandiose parce que je commence à désespérer là....
alors voila, comme le dit le titre j'ai un programme à écrire qui doit calculer la somme de n premiers entiers. Donc déjà voila ce que j'ai écrit :
int prodoubl(int n){
if(n<1)return 0;
else for(n;n>1;n--)return 2*n*prodoubl(n-1);
}
int n;
main(){
printf("Entrez un nombre : ");
scanf("%d", &n);
printf("Le produit des doubles des %d premiers entiers est %d\n", n, prodoubl(n));
}
Et je n'arrive pas du tout à comprendre pourquoi quand je le lance et que je lui demande pour les 3 premiers entiers il me renvoi 24 au lieu de 48.
Si vous pouviez m'apporter vos lumières ça serait grandiose parce que je commence à désespérer là....
3 réponses
-
Lu'
Essaye avec ça
int prodoubl(int n) { int Resultat = 0; int i; if(n<1) return 0; else { for(i=0; i<=n;i++) Resultat = Resultat + i; return Resulat; } } -
Bonjour,
main()
Le prototype du main() sans argument est : int main(void)
int n;
A mettre dans main() pour deux raisons :
1/ On évite les variables globales
2/ Tu passes la variable en paramètre, donc tu ne te sers pas de la spécificité globale.
N'oublie pas le return 0; à la fin du main() pour dire que tout s'est bien déroulé.
else for(n;n>1;n--)return 2*n*prodoubl(n-1);
Tu mélanges deux algorithmes : l'approche récursive et l'approche itérative. Que souhaites-tu implémenter ?
Cdlt,-
-
OMG... A 19h30 j'étais déjà fatigué au point d'écrire n'importe quoi...
En fait je parlais bien de produits et des n premiers nombres entiers, pas des nombres premiers.
Au passage merci pour tes interventions : tes remarques dont je prendrais note pour mes futurs programmes et tes questions qui m'ont finalement permis de me rendre compte des mes erreurs dans ce programme.
Je m'en vais de ce pas poster la correction et aller me coucher avant d'écrire d'autres aberrations.
Icylph, ou comment créer des problèmes la ou il n'y en a pas.
-
-
Bon et bien grâce à mes deux sauveurs j'ai pu modifier mon programme de façon à ce qu'il soit fonctionnel. Je vous donne donc le code source au passage :
int prodoubl(int n){
int i=1;
if(n<1)return 0;
else for(n;n>0;n--)i=i*n*2;
return i;
}
int main(void){
int n;
printf("Entrez un nombre : ");
scanf("%d", &n);
printf("Le produit des doubles des %d premiers entiers est %d\n", n, prodoubl(n));
return 0;
}
Merci encore à fiddy et coco pour votre aide.-
Ah, c'est beaucoup mieux :-).
Deux derniers petits conseils :
for(n;n>0;n--)i=i*n*2;
Bizarre ton initialisation qui fait rien. Autant mettre : for(;n>0;n--) i=i*n*2;
J'irais même plus loin en te conseillant d'utiliser une bête boucle while.
Et ton i, tu pourrais même le déclarer dans le else pour en réduire sa portée.
Et là, c'est parfait ;-)
Cdlt -
-