|
|
|
Bonjour, je dois faire un programme avec la boucle for à partir de cette entêt
: /** Fonction maSomme * @param n un entier * @return un réél qui est la somme des 1/k pour k entre 1 et n si n est plu grand que 1, 0 sinon **/ Voila ce que j'ai fais : Code : float maSomme(int n){ int s=0; cout << "Entrer votre entier"<<endl; cin>>n; for(int k=1; k<=n; k++){ if(n>1){ return s=s+1/k; }else{return 0; } } } Le problème est que le prgm me donne à chaque fois en sortie 1 et non l résultat de la somme, des idées svp ? |
|
|
|
Bonjour,
Le 02/03/2020 à 18:17, ThePoke a écrit : [..] > if(n>1){ > return s=s+1/k; > }else{return 0; > } > } > } > résultat de la somme, des idées svp ? Je ne suis pas spécialiste mais il me semble que return te fais sortir de la fonction. |
|
|
Le lundi 02 Mars 2020 à 18:17 par ThePoke :
[..] > if(n>1){ > return s=s+1/k; > }else{return 0; > } > } > } > non le résultat de la somme, des idées svp ? Merci je l'ai remarquer, mais je ne vois pas ou le placer. |
|
|
Le lundi 02 Mars 2020 à 18:44 par Michel__D :
> Bonjour, > Le 02/03/2020 à 18:17, ThePoke a écrit : > Je ne suis pas spécialiste mais il me semble que return te fais sortir > de la fonction. Bonjour, vous avez raison mais je vois tout de même pas ou le placer :/ |
|
|
Dans le message <upudnaQr1Ik-osDDnZ2dnUU798zNnZ2d>, le
02/03/2020 à 18:17, j'ai écrit : [..] > if (n > 1) { > return s = s + 1 / k; > } else { > return 0; > } > } > } > Le problème est que le prgm me donne à chaque fois en sortie 1 et non le > résultat de la somme, des idées svp ? [J'ai réindenté ton code pour que ce soit lisible.] 1. Tu dois retourner un réel mais tu retournes s qui est un int. 2. Tu lances une boucle qui n'est exécutée qu'une fois puisque quoi qu'il arrive tu fais un return à la première itération. 3. 1 / k avec k == 1, ça fait toujours 1 donc s + 1 ça fait 1. 4. Ta fonction prend un argument mais tu ne l'utilises pas. 5. Que ce passe-t-il si n < 1 ? |
|
|
Le lundi 02 Mars 2020 à 19:32 par Benoit Izac :
[..] > 5. Que ce passe-t-il si n < 1 ? > -- > Benoit Izac 1) Je dois donc changer la nature de mon S car je l'ai mis en entier alors qu l'on demande un réel. 2)Oui je l'avais compris je dois déplacer ce return mais je ne vois pas ou :/ 3)Oui dans ce cas ci c'est logique à cause de mon return la boucle s'execut qu'une seule fois. 4) L'argument n ? Je pense pourtant l'utiliser dans la condition car (5) si n< on doit afficher 0 |
|
|
Le 02/03/2020 20:06, thepoke répondait à Benoit Izac :
Quelle horreur ! Benoît avait réindenté le code pour qu'il soit lisible. Comment se fait-il que tout ce travail soit perdu ? >>> [...] > 1) Je dois donc changer la nature de mon S car je l'ai mis en entier alors que > l'on demande un réel. Oui. > 2)Oui je l'avais compris je dois déplacer ce return mais je ne vois pas ou :/ Ce sont les deux « return » qui doivent être mis hors de la boucle. Tu dois avoir un « return 0; » *avant* d'entrer dans la boucle si n est plus petit que 1. Et un « return s; » *après* avoir terminé toute la boucle qui calcule la valeur de s. |
|
|
Bonjour,
Le 02/03/2020 à 20:06, thepoke a écrit dans le message <QpydnaR_3N66xMDDnZ2dnUU798zNnZ2d> : > 1) Je dois donc changer la nature de mon S car je l'ai mis en entier > alors que l'on demande un réel. Oui. > 2)Oui je l'avais compris je dois déplacer ce return mais je ne vois pas ou :/ Tu calcules la somme dans la boucle. Tu fais ton return une fois que la boucle est finie (au passage ça réglera le problème 5 auquel tu n'as pas répondu). > 3)Oui dans ce cas ci c'est logique à cause de mon return la boucle > s'execute qu'une seule fois. Oui. > 4) L'argument n ? Je pense pourtant l'utiliser dans la condition car > (5) si n<1 on doit afficher 0 float maSomme(int n) ^^^^^ Je parle du n quand tu appelles ta fonction : cout << maSomme(-3) << endl; // -3 est écrasé par la saisie cout << maSomme(42) << endl; // 42 est écrasé par la saisie En fait il peut être utilisé si l'utilisateur saisie autre chose qu'un nombre, ainsi « cin >> n; » ne modifiera pas n. Mais c'est quand même tordu. Donc soit : float maSomme() { int n; // ... cin >> n; } Soit : foat maSomme(int n) { // pas de cin >> n; // ... } |
|
|
Le 02/03/2020 à 19:27, thepoke a écrit :
> Le lundi 02 Mars 2020 à 18:44 par Michel__D : > Bonjour, vous avez raison mais je vois tout de même pas ou le placer :/ Un truc dans ce genre : float maSomme() { int n=0; float s=0; cout << "Entrer votre entier"<<endl; cin>>n; for(int k=1; k<=n; k++) s += (float) 1/k; return s; } |
|
|
Le lundi 02 Mars 2020 à 20:35 par Olivier Miakinen :
[..] > boucle qui calcule la > valeur de s. > Olivier Miakinen Pour le return s; je l'ai mis après la boucle for (avant la dernière {) mais je n'ai pas bien compris pour le return 0; … Car j'ai une boucle si n plus grand que 1, ensuite j'ai mon else pour si n plu petit que 1 mais je ne vois pas ou je pourrais déplacer le return 0; |
|
Fuseau horaire GMT +2. Il est actuellement 08h14. | Privacy Policy
|