On appelle « nombres triangulaires » les nombres entiers strictement positifs qui sont égaux à la somme de plusieurs entiers consécutifs à partir de \(1\). Par exemple:
\(21\) est un nombre triangulaire car \(21 = 1+2+3+4+5+6\)
\(7\) n’est pas un nombre triangulaire car \(1+2+3 < 7 < 1+2+3+4\)
Le premier nombre triangulaire est \(1\).
Le deuxième nombre triangulaire est \(3\) car \(1+2=3\).
Le troisième nombre triangulaire est \(6\) car \(1+2+3=6\). Etc.
On considère la fonction nombreTriangulaire
dont la documentation
est donnée ci-dessous:
/** Fonction nombreTriangulaire
* @param un entier n strictement positif
* @return le n-ième nombre triangulaire, somme des entiers de 1 à n
**/
Écrivez trois tests pour cette fonction:
/// BEGIN SOLUTION
CHECK( nombreTriangulaire(1) == 1 );
CHECK( nombreTriangulaire(2) == 3 );
CHECK( nombreTriangulaire(3) == 6 );
/// END SOLUTION
Écrivez un fragment de programme qui affiche à l’écran les dix
premiers nombres triangulaires, en utilisant la fonction
nombreTriangulaire
:
/// BEGIN SOLUTION
for ( int n = 1 ; n <= 10 ; n++ ) {
cout << nombreTriangulaire(n) << " ";
}
cout << endl ;
/// END SOLUTION
Complétez la définition de la fonction ci-dessous:
int nombreTriangulaire(int n) {
/// BEGIN SOLUTION
int somme = 0;
for (int k = 1 ; k <= n ; k++) {
somme = somme + k;
}
return somme;
/// END SOLUTION
}
\(\clubsuit\) Définissez une version récursive de cette fonction:
int nombreTriangulaireRécursive(int n) {
/// BEGIN SOLUTION
if ( n == 1 ){
return 1;
} else {
return n + nombreTriangulaireRécursive(n-1);
}
/// END SOLUTION
}
On cherche maintenant à déterminer si un nombre est triangulaire.
Définissez la fonction dont la documentation est donnée ci-dessous.
Cette fonction devra utiliser (appeler) la fonction
nombreTriangulaire
écrite précédemment.
/** Fonction estTriangulaire
* @param p un nombre entier
* @return true si p est un nombre triangulaire, false sinon.
**/
bool estTriangulaire(int p) {
/// BEGIN SOLUTION
int n;
for ( n=1; nombreTriangulaire(n) < p; n++ ) {
}
return nombreTriangulaire(n) == p;
/// END SOLUTION
}