[Programme C] Produit des doubles des n premiers entiers

Résolu/Fermé
Icylph Messages postés 6 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 8 mai 2014 - 24 févr. 2014 à 19:36
cocodu67... Messages postés 3162 Date d'inscription jeudi 28 janvier 2010 Statut Membre Dernière intervention 20 novembre 2024 - 25 févr. 2014 à 10:05
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à....
A voir également:

3 réponses

cocodu67... Messages postés 3162 Date d'inscription jeudi 28 janvier 2010 Statut Membre Dernière intervention 20 novembre 2024 145
24 févr. 2014 à 20:05
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
Icylph Messages postés 6 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 8 mai 2014
24 févr. 2014 à 22:12
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).
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
24 févr. 2014 à 22:44
Ya d'autres remarques à tenir compte ;-)))
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
24 févr. 2014 à 21:01
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
24 févr. 2014 à 21:45
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 ?
0
Icylph Messages postés 6 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 8 mai 2014
Modifié par Icylph le 24/02/2014 à 23:04
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.
0
Icylph Messages postés 6 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 8 mai 2014
Modifié par Icylph le 24/02/2014 à 23:18
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.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
24 févr. 2014 à 23:37
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
0
cocodu67... Messages postés 3162 Date d'inscription jeudi 28 janvier 2010 Statut Membre Dernière intervention 20 novembre 2024 145
25 févr. 2014 à 10:05
Ah mince j'avais mal lus.

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