TP n° 2
Rappels
Boucle while Une boucle while permet d'exécuter plusieurs fois des INSTRUCTIONS tant qu'une CONDI-
TION soit satisfaite. Les INSTRUCTIONS sont placé entre accolades, et la CONDITION entre parenthèses (voir
exemple 1). Il est important de noter que la CONDITION est testée avant l'exécution des INSTRUCTIONS.
Ainsi si elle est fausse à l'entrée de la boucle, le code n'est jamais exécuté.
Exemple 1 :
#include <iostream>
using namespace std;
int main() {
char c = 'Z';
while (c != 'Q') {
cout << "Tapez le caractere 'Q' pour quitter" << endl;
cin >> c;
}
}
Boucle for Il existe une variante à la boucle while : c'est la boucle for. Toute boucle for peut se réécrire en
une boucle while (voir la table d'équivalence 1), mais on préfère l'utiliser pour parcourir des valeurs une par
une. Par exemple, pour faire la somme des nombres de 1 à 10, il est conseillé d'utiliser une boucle for (voir
exemple 2).
Exemple 2 :
#include <iostream>
using namespace std;
int main() {
int sum = 0;
for(int i=1;i<=10;i++) {
sum = sum + i;
}
cout << sum << endl;
}
1
Exercice 1 : des triangles
Question 1.1 Écrire un programme triangle.cpp qui ache N caractères sur une ligne.
Voici un exemple d'exécution :
Entrez un caractere : *
Entrez un nombre : 6
******
Question 1.3 Écrire un programme entiers.cpp qui ache les N premiers entiers, en allant à la ligne tous
les k entiers achés :
Entrez N : 10
Entrez k : 4
1 2 3 4
5 6 7 8
9 10
Question 2.1 Écrire un programme fibonacci.cpp qui ache les N premiers nombres de cette suite.
Voici un exemple d'exécution :
Entrez N > 2 : 6
u(0) = 0
u(1) = 1
u(2) = 1
u(3) = 2
u(4) = 3
u(5) = 5
u(6) = 8
uN
Question 2.2 Modier ensuite le programme pour calculer et acher le quotient des deux derniers
uN −1 √
1+ 5
termes calculés. Comparer ce quotient pour diérentes valeurs de N avec le nombre d'or .
2
Rappel : pour calculer des racines carrées, charger la librairie mathématique avec #include <cmath>
Exercice 3 : calcul de π
On considère la suite double
un + vn
un+1 = , u0 = 1,
√ 2
vn+1 = vn un+1 , v0 = 2.
√
27
On admet que ces deux suites sont adjacentes de limite .
π
2
Question 3.1 Écrire un programme pi.cpp qui calcule et ache les N premiers termes des suites (un ) et
(vn ). Voici un exemple d'exécution :
Entrez N : 6
u(0) = 1
v(0) = 2
u(1) = 1.5 v(1) = 1.73205
u(2) = 1.61603 v(2) = 1.67303
u(3) = 1.64453 v(3) = 1.65872
u(4) = 1.65162 v(4) = 1.65517
u(5) = 1.6534 v(5) = 1.65428
u(6) = 1.65384 v(6) = 1.65406
Question 3.2 Modier le programme précédent pour acher aussi une approximation de π à partir de uN .
approx pi = 3.14187
Question 3.3 Écrire un programme pi2.cpp pour calculer π à une tolérance d'erreur ε √ près donnée.
√ Il sut
pour cela de lui faire calculer les premiers termes des suites (un ) et (vn ) et d'arrêter dès que | 27 u1n − 27 v1n | < ε.
void binaire(int n) {
if (n<2)
cout << n;
else {
binaire(n/2);
cout << n%2;
}
}
Écrire une fonction récursive octale qui étant donné un entier n ache son écriture octale, c'est-à-dire son
écriture en base 8. Tester cette fonction avec un programme bases.cpp qui ache en octal des entiers saisis
par l'utilisateur.
Question 4.2 En utilisant une boucle, écrire une fonction binairenonrec équivalente à la fonction binaire
ci-dessus, mais qui soit non-récursive. Tester cette fonction.