[Programme C] Produit des doubles des n premiers entiers [Résolu/Fermé]

Signaler
Messages postés
6
Date d'inscription
jeudi 10 juin 2010
Statut
Membre
Dernière intervention
8 mai 2014
-
Messages postés
3089
Date d'inscription
jeudi 28 janvier 2010
Statut
Membre
Dernière intervention
21 novembre 2020
-
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 :

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

Messages postés
3089
Date d'inscription
jeudi 28 janvier 2010
Statut
Membre
Dernière intervention
21 novembre 2020
134
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;
}
}
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Messages postés
6
Date d'inscription
jeudi 10 juin 2010
Statut
Membre
Dernière intervention
8 mai 2014

Bonsoir et merci de ta réponse mais il me semble que ça ne répond pas à mes attentes puisque le but de ce programme serait de calculer un produit. Pour l'exemple (1*2)*(2*2)*(3*2).
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 736
Ya d'autres remarques à tenir compte ;-)))
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 736
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,
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 736
J'ai relu par hasard ton post. Il manque d'autres éléments
Petite question : dans le titre, tu parles du produits, ensuite tu parles de sommes ?
Ensuite tu parles de "nombre premier"... Où as-tu mis cette partie dans ton programme ?
Messages postés
6
Date d'inscription
jeudi 10 juin 2010
Statut
Membre
Dernière intervention
8 mai 2014

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.
Messages postés
6
Date d'inscription
jeudi 10 juin 2010
Statut
Membre
Dernière intervention
8 mai 2014

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.
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 736
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
Messages postés
3089
Date d'inscription
jeudi 28 janvier 2010
Statut
Membre
Dernière intervention
21 novembre 2020
134
Ah mince j'avais mal lus.

Content de voir que ça t'as quand même aidé^^