Problème calcul de somme avec boucle for [HELP PLZ]
9 réponses
ThePoke
Bonjour, je dois faire un programme avec la boucle for à partir de cette entête :
/** 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 plus grand que 1, 0 sinon
**/
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Michel__D
Bonjour, Le 02/03/2020 à 18:17, ThePoke a écrit :
Bonjour, je dois faire un programme avec la boucle for à partir de cette entête : /** 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 plus 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 le 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.
Bonjour,
Le 02/03/2020 à 18:17, ThePoke a écrit :
Bonjour, je dois faire un programme avec la boucle for à partir de cette entête
:
/** 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 plus
grand que 1, 0 sinon
**/
Bonjour, je dois faire un programme avec la boucle for à partir de cette entête : /** 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 plus 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 le 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.
thepoke
Le lundi 02 Mars 2020 à 18:17 par ThePoke :
Bonjour, je dois faire un programme avec la boucle for à partir de cette entête : /** 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 plus 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 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:17 par ThePoke :
> Bonjour, je dois faire un programme avec la boucle for à partir de cette
> entête :
> /** 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 plus 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 le résultat de la somme, des idées svp ?
Merci je l'ai remarquer, mais je ne vois pas ou le placer.
Bonjour, je dois faire un programme avec la boucle for à partir de cette entête : /** 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 plus 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 le résultat de la somme, des idées svp ?
Merci je l'ai remarquer, mais je ne vois pas ou le placer.
thepoke
Le lundi 02 Mars 2020 à 18:44 par Michel__D :
Bonjour, Le 02/03/2020 à 18:17, ThePoke a écrit :
Bonjour, je dois faire un programme avec la boucle for à partir de cette entête : /** 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 plus 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 le 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.
Bonjour, vous avez raison mais je vois tout de même pas ou le placer :/
Le lundi 02 Mars 2020 à 18:44 par Michel__D :
> Bonjour,
>
> Le 02/03/2020 à 18:17, ThePoke a écrit :
>> Bonjour, je dois faire un programme avec la boucle for à partir de
>> cette entête
>> :
>> /** 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 plus
>> 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 le
>> 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.
Bonjour, vous avez raison mais je vois tout de même pas ou le placer :/
Bonjour, je dois faire un programme avec la boucle for à partir de cette entête : /** 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 plus 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 le 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.
Bonjour, vous avez raison mais je vois tout de même pas ou le placer :/
Benoit Izac
Dans le message , le 02/03/2020 à 18:17, j'ai écrit :
Bonjour, je dois faire un programme avec la boucle for à partir de cette entête : /** 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 plus 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 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 ? -- Benoit Izac
Dans le message <upudnaQr1Ik-osDDnZ2dnUU798zNnZ2d@giganews.com>, le
02/03/2020 à 18:17, j'ai écrit :
Bonjour, je dois faire un programme avec la boucle for à partir de
cette entête :
/** 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 plus
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 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 ?
Dans le message , le 02/03/2020 à 18:17, j'ai écrit :
Bonjour, je dois faire un programme avec la boucle for à partir de cette entête : /** 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 plus 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 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 ? -- Benoit Izac
thepoke
Le lundi 02 Mars 2020 à 19:32 par Benoit Izac :
Dans le message 02/03/2020 à 18:17, j'ai écrit :
Bonjour, je dois faire un programme avec la boucle for à partir de cette entête : /** 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 plus 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 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 ? -- Benoit Izac
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. 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'execute qu'une seule fois. 4) L'argument n ? Je pense pourtant l'utiliser dans la condition car (5) si n<1 on doit afficher 0
Le lundi 02 Mars 2020 à 19:32 par Benoit Izac :
> Dans le message
> 02/03/2020 à 18:17, j'ai écrit :
>
>> Bonjour, je dois faire un programme avec la boucle for à partir de
>> cette entête :
>>
>> /** 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 plus
>> 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 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 ?
>
> --
> Benoit Izac
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.
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'execute qu'une seule fois.
4) L'argument n ? Je pense pourtant l'utiliser dans la condition car (5) si n<1 on doit afficher 0
Bonjour, je dois faire un programme avec la boucle for à partir de cette entête : /** 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 plus 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 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 ? -- Benoit Izac
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. 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'execute qu'une seule fois. 4) L'argument n ? Je pense pourtant l'utiliser dans la condition car (5) si n<1 on doit afficher 0
Olivier Miakinen
Le 02/03/2020 20:06, thepoke répondait à Benoit Izac :
[...] 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; } } }
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. -- Olivier Miakinen
Le 02/03/2020 20:06, thepoke répondait à Benoit Izac :
[...]
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;
}
}
}
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.
Le 02/03/2020 20:06, thepoke répondait à Benoit Izac :
[...] 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; } } }
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. -- Olivier Miakinen
Benoit Izac
Bonjour, Le 02/03/2020 à 20:06, thepoke a écrit dans le message :
Bonjour, je dois faire un programme avec la boucle for à partir de cette entête : /** 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 plus 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 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 ?
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; // ... } -- Benoit Izac
Bonjour,
Le 02/03/2020 à 20:06, thepoke a écrit dans le message
<QpydnaR_3N66xMDDnZ2dnUU798zNnZ2d@giganews.com> :
Bonjour, je dois faire un programme avec la boucle for à partir de
cette entête :
/** 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 plus
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 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 ?
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;
// ...
}
Bonjour, Le 02/03/2020 à 20:06, thepoke a écrit dans le message :
Bonjour, je dois faire un programme avec la boucle for à partir de cette entête : /** 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 plus 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 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 ?
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; // ... } -- Benoit Izac
Michel__D
Le 02/03/2020 à 19:27, thepoke a écrit :
Le lundi 02 Mars 2020 à 18:44 par Michel__D :
Bonjour, Le 02/03/2020 à 18:17, ThePoke a écrit :
Bonjour, je dois faire un programme avec la boucle for à partir de cette entête : /** 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 plus 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 le 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.
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 02/03/2020 à 19:27, thepoke a écrit :
Le lundi 02 Mars 2020 à 18:44 par Michel__D :
Bonjour,
Le 02/03/2020 à 18:17, ThePoke a écrit :
Bonjour, je dois faire un programme avec la boucle for à partir de
cette entête
:
/** 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 plus
grand que 1, 0 sinon
**/
Bonjour, je dois faire un programme avec la boucle for à partir de cette entête : /** 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 plus 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 le 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.
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; }
thepoke
Le lundi 02 Mars 2020 à 20:35 par Olivier Miakinen :
Le 02/03/2020 20:06, thepoke répondait à Benoit Izac :
[...] 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; } } }
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. -- 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 plus petit que 1 mais je ne vois pas ou je pourrais déplacer le return 0;
Le lundi 02 Mars 2020 à 20:35 par Olivier Miakinen :
> Le 02/03/2020 20:06, thepoke répondait à Benoit Izac :
>>>>
>>>> [...]
>>>>
>>>> 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;
>>>> }
>>>> }
>>>> }
>>>>
>>>>
>>>
>>
> 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.
>
>
> --
> 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 plus petit que 1 mais je ne vois pas ou je pourrais déplacer le return 0;
Le lundi 02 Mars 2020 à 20:35 par Olivier Miakinen :
Le 02/03/2020 20:06, thepoke répondait à Benoit Izac :
[...] 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; } } }
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. -- 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 plus petit que 1 mais je ne vois pas ou je pourrais déplacer le return 0;