Exercice 18
Énoncé
Calculer la somme des n premiers termes de la « série harmonique », c’est-à-dire la
somme :
1 + 1/2 + 1/3 + 1/4 + ..... + 1/n
La valeur de n sera lue en donnée.
#include
using namespace std ;
main()
{
int nt ; /* nombre de termes de la série harmonique */
float som ; /* pour la somme de la série */
int i ;
do
{ cout << "combien de termes : " ;
cin >> nt ;
}
while (nt<1) ;
for (i=1, som=0 ; i<=nt ; i++) som += (float)1/i ;
cout << "Somme des " << nt << " premiers termes = "<< som ;
}
1. Rappelons que dans :
som += (float)1/i
l’expression de droite est évaluée en convertissant d’abord 1 et i en float.
Il faut éviter d’écrire :
som += 1/i
auquel cas, les valeurs de 1/i seraient toujours nulles (sauf pour i=1) puisque
l’opérateur /, lorsqu’il porte sur des entiers, correspond à la division entière.
De même, en écrivant :
som += (float) (1/i)
le résultat ne serait pas plus satisfaisant puisque la conversion en flottant n’aurait
lieu qu’après la division (en entier).
En revanche, on pourrait écrire :
som += 1.0/i ;
2. Si l’on cherchait à exécuter ce programme pour des valeurs élevées de n (en
prévoyant alors une variable de type float ou double), on constaterait que la valeur de
la somme semble « converger » vers une limite (bien qu’en théorie la série
43
Énoncé
Calculer la somme des n premiers termes de la « série harmonique », c’est-à-dire la
somme :
1 + 1/2 + 1/3 + 1/4 + ..... + 1/n
La valeur de n sera lue en donnée.
#include
using namespace std ;
main()
{
int nt ; /* nombre de termes de la série harmonique */
float som ; /* pour la somme de la série */
int i ;
do
{ cout << "combien de termes : " ;
cin >> nt ;
}
while (nt<1) ;
for (i=1, som=0 ; i<=nt ; i++) som += (float)1/i ;
cout << "Somme des " << nt << " premiers termes = "<< som ;
}
1. Rappelons que dans :
som += (float)1/i
l’expression de droite est évaluée en convertissant d’abord 1 et i en float.
Il faut éviter d’écrire :
som += 1/i
auquel cas, les valeurs de 1/i seraient toujours nulles (sauf pour i=1) puisque
l’opérateur /, lorsqu’il porte sur des entiers, correspond à la division entière.
De même, en écrivant :
som += (float) (1/i)
le résultat ne serait pas plus satisfaisant puisque la conversion en flottant n’aurait
lieu qu’après la division (en entier).
En revanche, on pourrait écrire :
som += 1.0/i ;
2. Si l’on cherchait à exécuter ce programme pour des valeurs élevées de n (en
prévoyant alors une variable de type float ou double), on constaterait que la valeur de
la somme semble « converger » vers une limite (bien qu’en théorie la série
43
