Anda di halaman 1dari 3

Introduction à l'informatique 2007/2008

TP n° 2

But Utilisation des boucles, fonctions et fonctions récursives.

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).

Tab. 1  Équivalence entre for et while


boucle while boucle for
int i=0 ;
while (i<10){ for(int i=0;i<10;i=i+1){
/*CODE*/ /*CODE*/
i = i+1; }
}

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.2 Modier ce programme pour qu'il ache un triangle :


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

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.

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 | < ε.

Entrez epsilon : 0.001

Exercice 4 : Représentations des nombres


Question 4.1 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 :

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.

Anda mungkin juga menyukai