Série 4 :
Boucles conditionnelles et itérations

But

Le but de cette série d'exercice est de vous faire pratiquer les structures de contrôle en C++.

Préliminaires :

Les fichiers de cette série devront se trouver dans le répertoire ~/Desktop/myfiles/cpp/serie04. Si ce n'est pas déjà fait, créez un sous-répertoire serie04 dans le répertoire ~/Desktop/myfiles/cpp.

Rappelez-vous le fonctionnement de ces séries : elles ont des niveaux et le but n'est pas de tout faire. Revoir si nécessaire les instructions à ce sujet données la semaine passée.

Par ailleurs, remarquez qu'il n'est pas nécessaire d'imprimer systématiquement les séries; la forme électronique (dans votre navigateur) permet d'utiliser les liens, ainsi que le copier-coller avec le bouton central de la souris.
De plus, si vraiment vous préférez lire un énoncé sur papier, vous avez tout intéret à utiliser le livre d'exercices C++ par la pratique; vous gagnerez un temps considérable pendant les TPs en évitant d'imprimer les séries et votre lecture sera facilitée par la mise en page nettement plus soignée (vous bénéficierez en plus des ajouts qu'offre le livre par rapport aux séries).


Exercice 1 : Les tables de multiplication (itération for, niveau 1)

Exercice n°3 (pages 19 et 199) de l'ouvrage C++ par la pratique.
Exercice n°7 du MOOC (semaine 3)

Objectif

Écrivez un programme tables.cc affichant les tables de multiplication de 2 à 10.

Votre programme devra produire la sortie suivante à l'écran :

Tables de multiplication

Table de 2 :
  1 * 2 = 2
  ...
  10 * 2 = 20
...
Table de 5 :
  1 * 5 = 5
  2 * 5 = 10
  ...
...
Table de 10 :
  1 * 10 = 10
  ...

Méthode :

Utilisez deux structures d'itération for imbriquées l'une dans l'autre.


Exercice 2 : Rebonds de balles (itération for, niveau 2)

Exercice n°6 (pages 21 et 202) de l'ouvrage C++ par la pratique.
Exercice n°8 du MOOC (semaine 3)

Objectif :

L'objectif de cet exercice est de résoudre le problème suivant :

Lorsqu'une balle tombe d'une hauteur initiale h, sa vitesse à l'arrivée au sol est v=sqrt(2*h*g). Immédiatement après le rebond, sa vitesse est v1=eps*v (où eps est une constante et v la vitesse avant le rebond). Elle remonte alors à la hauteur h=(v1*v1)/2*g.

Le but est d'écrire un programme (rebonds1.cc) qui calcule la hauteur à laquelle la balle remonte après un nombre nbr de rebonds.

Méthode :

On veut résoudre ce problème, non pas du point de vue formel (équations) mais par simulation du système physique (la balle).

Utilisez une itération for et des variables v, v1, (les vitesses avant et après le rebond), et h, h1 (les hauteurs au début de la chute et à la fin de la remontée).

Tâches :

Écrivez le programme rebonds1.cc qui affiche la hauteur après le nombre de rebonds spécifié.

Votre programme devra utiliser la constante g, de valeur 9,81 et demander à l'utilisateur d'entrer les valeurs de

Essayez les valeurs H0 = 25, eps = 0.9, NBR = 10. La hauteur obtenue devrait être environ 3.04.

Remarque :


Exercice 3 : Rebonds de balles - le retour. (boucles do...while, niveau 2)

Exercice n°7 (pages 22 et 203) de l'ouvrage C++ par la pratique.
(pages 21 et 203 dans la 2e édition).
Exercice n°9 du MOOC (semaine 3)

On se demande maintenant combien de rebonds fait cette balle avant que la hauteur à laquelle elle rebondit soit plus petite que (ou égale à) une hauteur donnée h_fin.

Écrivez le programme rebonds2.cc qui affiche le nombre de rebonds à l'écran.

Il devra utiliser une boucle do...while, et demander à l'utilisateur d'entrer les valeurs de :

Essayez les valeurs H0=10, eps=0.9, h_fin=2. Vous devriez obtenir 8 rebonds.


Exercice 4 : Nombres premiers (structures de contrôle, niveau 2)

Exercice n°9 (pages 22 et 205) de l'ouvrage C++ par la pratique.
Exercice n°10 du MOOC (semaine 3)

Écrivez le programme premier.cc qui demande à l'utilisateur d'entrer un entier n strictement plus grand que 1, puis décide si ce nombre est premier ou non.

Algorithme :

  1. Vérifier si le nombre n est pair (si oui, il n'est pas premier sauf si c'est 2).

  2. Pour tous les nombres impairs inférieurs ou égaux à la racine carrée de n, vérifier s'ils divisent n. Si ce n'est pas le cas, alors n est premier.

Tâches :

Testez votre programme avec les nombres : 2, 16, 17, 91, 589, 1001, 1009, 1299827 et 2146654199. Indiquez ceux qui sont premiers.

Les résultats devraient ressembler à ceci :

2 est premier
16 n'est pas premier, car il est divisible par 2
17 est premier
91 n'est pas premier, car il est divisible par 7
589 n'est pas premier, car il est divisible par 19
1001 n'est pas premier, car il est divisible par 7
1009 est premier
1299827 est premier
2146654199 n'est pas premier, car il est divisible par 46327

Exercice 5 : Une histoire de prêt (boucle, niveau 2)

Une version plus explicite est disponible en pages 22 et 204 (exercice n°8) de l'ouvrage C++ par la pratique.
Exercice supplémentaire n°2 du MOOC (semaine 3)

L'objectif de cet exercice est de résoudre le problème suivant :

Une banque prête une somme S0 à une personne X. Chaque mois, X rembourse un montant r (sur la somme empruntée) et paye par ailleurs (en plus) un intérêt ir*S, où S est la somme restant à rembourser (avant déduction du remboursement mensuel).

Quelle est la somme des intérêts encaissés par la banque quand X a remboursé la totalité de son prêt ?

Écrivez le programme pret.cc qui calcule la somme des intérêts encaissés et la durée en mois du remboursement, puis qui affiche ces informations à l'écran !

Contraintes :

Testez votre programme avec les valeurs suivantes : S0=30000, r=1200, ir=0.01 (i.e. 1%). La somme des intérêts encaissés (sur 25 mois) est alors de 3900.


Exercice 6 : Suite et série (niveau 2)

Exercice supplémentaire n°3 du MOOC (semaine 3)

a) Écrivez un programme qui calcule les 10 premiers termes de la suite Un telle que:

U0  =   1,   Un+1  =   Un
n+1
Vous devez trouver:

U0  =   1
U1  =   1
U2  =   0.5
U3  =   0.1666667
U4  =   0.0416667
U5  =   0.0083333
U6  =   0.0013889
U7  =   0.000198413
U8  =   2.48016e-5
U9  =   2.75573e-06
U10  =   2.75573e-07

b) Modifiez votre programme pour qu'il calcule simultanément la suite Un et la série Vn, où

Vn  =   n Ui .
i = 0

Vérifiez que Vn converge vers e = exp(1) = 2.71828...


Exercice 7 : Figures en mode texte (niveau 1)

Exercice supplémentaire n°4 du MOOC (semaine 3)

a) Ecrivez un programme qui affiche les valeurs 1 à 9 en ligne, à l'aide d'une boucle for:

  123456789

b) Modifiez le programme pour qu'il affiche 9 lignes similaires, à l'aide de 2 boucles for:

  123456789 
  123456789 
  . 
  . 
  .  
  123456789

c) Comment modifier le programme pour qu'il affiche un triangle ?

  1 
  12 
  123 
  1234 
  12345 
  123456 
  1234567
  12345678
  123456789

d) Modifiez une dernière fois votre programme, pour qu'il affiche une pyramide inversée:

          1 
         12 
        123 
       1234 
      12345 
     123456 
    1234567 
   12345678
  123456789

Exercice 8 : Triangle (niveau 2)

Exercice supplémentaire n°5 du MOOC (semaine 3)

Utilisez des boucles afin de construire un triangle isocèle formé par le caractère étoile (*). Affichez-en n lignes, où n sera entré au clavier par l'utilisateur.

Exemple: pour n = 5 :

    *
   ***
  *****
 *******
*********

Dernière mise à jour le 3 octobre 2016
Last modified: Mon Oct 3, 2016