Introduction à l'informatique
2007/2008
TP n° 2 But
Utilisation des boucles, fonctions et fonctions récursives.
Rappels Une boucle while permet d'exécuter plusieurs fois des INSTRUCTIONS tant qu'une CONDITION 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é.
Boucle while
Exemple 1 :
#include using namespace std; int main() { char c = 'Z'; while (c != 'Q') { cout << "Tapez le caractere 'Q' pour quitter" << endl; cin >> c; } } 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).
Boucle for
Tab.
boucle while
1 Équivalence entre for et while boucle for
int i=0 ; while (i<10){ /*CODE*/ i = i+1; }
for(int i=0;i<10;i=i+1){ /*CODE*/ }
Exemple 2 :
#include 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 Écrire un programme triangle.cpp qui ache N caractères sur une ligne. Voici un exemple d'exécution :
Question 1.1
Entrez un caractere : * Entrez un nombre : 6 ****** Question 1.2
Modier ce programme pour qu'il ache un triangle :
Entrez un caractere : * Entrez un nombre : 6 * ** *** **** ***** ****** Écrire un programme entiers.cpp qui ache les N premiers entiers, en allant à la ligne tous les k entiers achés :
Question 1.3
Entrez N : 10 Entrez k : 4 1 2 3 4 5 6 7 8 9 10
Exercice 2 : suite de Fibonacci La suite de Fibonacci est une suite de nombres entiers dénie par :
un = un−1 + un−2
(n ≥ 2),
u(0) = 0,
u(1) = 1.
Écrire un programme fibonacci.cpp qui ache les N premiers nombres de cette suite. Voici un exemple d'exécution : Question 2.1
Entrez u(0) = u(1) = u(2) = u(3) = u(4) = u(5) = u(6) =
N > 2 : 6 0 1 1 2 3 5 8
uN 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 Question 2.2
Modier ensuite le programme pour calculer et acher le quotient
Exercice 3 : calcul de π On considère la suite double
un + vn , √ 2 vn un+1 , vn+1 = √ 27 On admet que ces deux suites sont adjacentes de limite . π un+1
=
2
u0 = 1, v0 = 2.
Écrire un programme pi.cpp qui calcule et ache les N premiers termes des suites (un ) et (vn ). Voici un exemple d'exécution :
Question 3.1
Entrez u(0) = v(0) = u(1) = u(2) = u(3) = u(4) = u(5) = u(6) =
N : 6 1 2 1.5 v(1) = 1.73205 1.61603 v(2) = 1.67303 1.64453 v(3) = 1.65872 1.65162 v(4) = 1.65517 1.6534 v(5) = 1.65428 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 É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 | < ε.
Question 3.3
Entrez epsilon : 0.001
Exercice 4 : Représentations des nombres Voici une fonction récursive (c'est-à-dire une fonction qui s'appelle elle-même) qui étant donné un entier positif n ache son écriture binaire :
Question 4.1
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. En utilisant une boucle, écrire une fonction binairenonrec équivalente à la fonction binaire ci-dessus, mais qui soit non-récursive. Tester cette fonction.
Question 4.2
3