[Langage C]Comment faire...?

Fermé
Yuku Messages postés 199 Date d'inscription samedi 22 mars 2008 Statut Membre Dernière intervention 22 mars 2012 - 16 oct. 2008 à 20:06
saly_inf Messages postés 44 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 29 décembre 2008 - 16 oct. 2008 à 22:01
Bonjour,
Je dois créer un programme passant par une fonction qui demande à l'utilisateur un nombre k et fait la suite suivante :
1+ 1/2 + 1/3 + 1/4 + ...+1/k.

Voilà mon programme, or le résultat obtenu est toujours 1...

#include <stdio.h>
#include <stdlib.h>

using namespace std;


double SerieHarmonique(double k);


int main(int argc, char *argv[])
{
int K = 0;
double resultat = 0;
printf("Ce programme aditionne un nombre K de termes selon la suite suivante :\n1+(1/2)+(1/3)+...+(1/K)\n\nEntrez un nombre K... ");
scanf("%d", &K);
resultat = SerieHarmonique(K);
printf("\nLe resultat de la suite en fonction de K = %d est %.1lf.\n\n", K, resultat);
system("PAUSE");
return EXIT_SUCCESS;
}





double SerieHarmonique(double k)
{
int Compteur = 1;
double Resultat = 0;
do{
Resultat += (1.0/Compteur);
Compteur++;
}while(Compteur != k);

return Resultat;
}


Merci d'avance.
A voir également:

5 réponses

Yuku Messages postés 199 Date d'inscription samedi 22 mars 2008 Statut Membre Dernière intervention 22 mars 2012 4
16 oct. 2008 à 20:10
Oups au temps pour moi, l'erreur était là :

}while(Compteur <= k);

Encore désolé pour le dérangement !
-1
Alixx Messages postés 93 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 23 février 2023 16
16 oct. 2008 à 20:12
Bonjour,

Je ne suis pas une experte mais est-ce que le problème ne pourrait pas venir du fait que dans ta fonction SerieHarmonique, tu as mis : Resultat += (1.0/Compteur); et je me demande s'il ne reconnaît pas le "." comme un opérateur numérique et que du coup, il fait 1x0/Compteur.

Essaye d'enlever le ".0"
-1
Yuku Messages postés 199 Date d'inscription samedi 22 mars 2008 Statut Membre Dernière intervention 22 mars 2012 4
16 oct. 2008 à 21:16
Non, d'ailleurs parfois le 2.0 à la place du 2 par exemple peut être extrêmement utile lorsqu'il s'agit de définir un calcul en float/double et non en int !

Merci d'avoir essayé de m'aider quand même :)
-1
saly_inf Messages postés 44 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 29 décembre 2008 4
16 oct. 2008 à 21:25
salut...
comment pour ton programme ... il marche ou non?
@+
-1
Yuku Messages postés 199 Date d'inscription samedi 22 mars 2008 Statut Membre Dernière intervention 22 mars 2012 4
16 oct. 2008 à 21:34
Oui, tout fonctionne en remplaçant dans les dernières lignes le

}while(Compteur != k);


par

}while(Compteur <= k);




Du coup, voici le code exact :

#include <stdio.h>
#include <stdlib.h>

using namespace std;


double SerieHarmonique(double k);


int main(int argc, char *argv[])
{
int K = 0;
double resultat = 0;
printf("Ce programme aditionne un nombre K de termes selon la suite suivante :\n1+(1/2)+(1/3)+...+(1/K)\n\nEntrez un nombre K... ");
scanf("%d", &K);
resultat = SerieHarmonique(K);
printf("\nLe resultat de la suite en fonction de K = %d est %.1lf.\n\n", K, resultat);
system("PAUSE");
return EXIT_SUCCESS;
}





double SerieHarmonique(double k)
{
int Compteur = 1;
double Resultat = 0;
do{
Resultat += (1.0/Compteur);
Compteur++;
}while(Compteur <= k);

return Resultat;
} 
-1
saly_inf Messages postés 44 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 29 décembre 2008 4
16 oct. 2008 à 21:39
c trés bien ...
je veux seulement savoir pourqoi vous mettez double?
est_ce que "double==int"?
@+
-1
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844 > saly_inf Messages postés 44 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 29 décembre 2008
16 oct. 2008 à 21:48
Salut,
Non int représente les entiers et double les flottants doubles.
1/k est une fraction non entière. Il faut donc utiliser des réels et non des entiers.
-1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Yuku Messages postés 199 Date d'inscription samedi 22 mars 2008 Statut Membre Dernière intervention 22 mars 2012 4
16 oct. 2008 à 21:47
Non, justement non.

Un int correspond aux entiers, soit 1, 2, 3, 4...

Un double (ou long) correspond aux réels, soit 1, 2, 3, 4... mais aussi 2.5, 6.98, 9.13131, etc...

Donc explication des deux double principaux :

- Le double pour définir la variable Resultat correspond au fait que logiquement, cette variable a toutes les chances d'être un réel, sauf si K = 1. Il faut donc un réel, parce que si on met un int et k =3, on va avoir ça :

1/1 + 1/2 + 1/3 = 1 + 0.5 + 0.3 = 1.8 en vrai... = mais 1 à l'écran ! (les int ne prennent pas en compte les virgules !)

- Le double de la fonction SerieHarmonique correspond au fait qu'une fonction doit toujours être du type de ce qu'elle retourne. Or, comme elle retourne la variable Resultat (et je viens d'expliquer au dessus pourquoi c'est un double), alors elle est de type double :)
-1
saly_inf Messages postés 44 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 29 décembre 2008 4
16 oct. 2008 à 22:01
salut..
je vous remercie pour vos repenses ... elles contiennent plusieurs infos qui vont m'aider vraiment ...
merci bien autrefois.....
@+
0