Choisissez votre style : colorisé, impression

Série 3
Expressions conditionnelles
Branchements conditionnels

But

Le but de cette série d'exercice est de vous faire pratiquer les expressions conditionnelles et les premières structures de contrôle en C++ (branchements conditionnels).

Préliminaires :

Les fichiers de cette série devront se trouver dans le répertoire ~/myfiles/cpp/serie03. Si ce n'est pas déjà fait, créez un sous-répertoire serie03 dans le répertoire ~/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 0 : Résolution de polynômes de degré 2 (niveau 0)

Cet exercice est disponible en page 16 de l'ouvrage C++ par la pratique

Le but de cet exercice est de reprendre et d'étendre l'exemple du cours illustrant l'utilisation de structures de contrôle.

Cliquez ici si vous voulez faire cet exercice.


Exercice 1 : Expressions conditionnelles (niveau 1)

Ecrivez un programme C++ qui lit un nombre entier et indique s'il est positif, négatif ou s'il vaut zéro et s'il est pair ou impair.
Exemple d'exécution:

Entrez un nombre entier: 5
Le nombre est positif et impair

Entrez un nombre entier: -4
Le nombre est négatif et pair

Entrez un nombre entier: 0
Le nombre est zéro (et il est pair)

Exercice 2 : Expressions conditionnelles (niveau 2)

Exercice n°4 (première partie, pages 20 et 199) de l'ouvrage C++ par la pratique.
Exercice n°4 du MOOC
Soit I l'intervalle [-1,1[ dans l'ensemble des réels.

Écrivez le programme intervalle.cc qui :

  1. demande à l'utilisateur d'entrer un réel ;
  2. enregistre la réponse de l'utilisateur dans une variable x de type réel ;
  3. teste l'appartenance de x à l'ensemble I et affiche le message «x appartient à I» si c'est le cas, et «x n'appartient pas à I» dans le cas contraire.

Testez votre programme en l'exécutant plusieurs fois de suite en donnant successivement à x les valeurs -2.5, -1, 0.5, 1, et 1.5.

Indications :


Exercice 3 : Expressions conditionnelles (niveau 2)

Exercice n°4 (seconde partie, page 20 et 200) de l'ouvrage C++ par la pratique.
Exercice n°5 du MOOC

Le but de cet exercice est de vous faire pratiquer l'écriture des expressions logiques.

Reprenez pour cela le problème de l'exercice précédent avec : I = [2,3[ U ]0,1] U [-10,-2] et en utilisant uniquement les opérateurs relationnels < et ==. Tous les opérateurs logiques sont, par contre, autorisés.

Notez que, en logique élémentaire, «non(A et B)» peut aussi s'écrire «(non A) ou (non B)».

Testez avec les valeurs -20, -10, -2, -1, 0, 1, 1.5, 2, 3 et 4.


Exercice 4 : Expressions arithmétiques (niveau 3)

Exercice n°5 (pages 20 et 200) de l'ouvrage C++ par la pratique.
Exercice n°6 du MOOC
[lire la donnée en entier avant de poser des questions !] Soient les expressions suivantes : On rappelle que le logarithme est défini sur les réels strictement positifs, la racine carrée sur les réels positifs ou nuls, la fraction 1/x sur les réels non nuls. Les autres fonctions sont définies sur l'ensemble des réels.

Écrivez un programme formules.cc qui :

  1. demande à l'utilisateur d'entrer un réel ;
  2. enregistre la réponse de l'utilisateur dans une variable x de type réel ;
  3. teste pour chacune des expressions ci-dessus si elle est définie pour x :
    • si oui, le programme calcule le résultat de l'expression puis l'affiche ;
    • sinon, le programme affiche : «Expression indéfinie : i» où i est le numéro de l'expression considérée.

Testez votre programme avec les valeurs : -1, 0, 1, 2, 3, 8

Voici différents exemples d'exécution du programme :

./formules
Entrez un nombre réel : -1
Expression 1 : -1.58198
Expression 2 : indéfinie
Expression 3 : -0.666667
Expression 4 : indefinie

./formules
Entrez un nombre réel : 0
Expression 1 : indéfinie
Expression 2 : indéfinie
Expression 3 : -0
Expression 4 : indefinie

./formules
Entrez un nombre réel : 1
Expression 1 : -0.581977
Expression 2 : indéfinie
Expression 3 : indéfinie
Expression 4 : indefinie

./formules
Entrez un nombre réel : 2
Expression 1 : -0.313035
Expression 2 : 10.2434
Expression 3 : indéfinie
Expression 4 : 1.00691

./formules
Expression 1 : -0.157187
Expression 2 : 8.95901
Expression 3 : indéfinie
Expression 4 : indefinie

./formules
Entrez un nombre réel : 8
Expression 1 : -0.0026846
Expression 2 : 22.1371
Expression 3 : 1.33333
Expression 4 : 1.56522

information Pour utiliser les fonctions mathématiques, vous devez ajouter en début de programme la ligne :

#include <cmath>

(ce genre d'instructions seront expliquées plus tard dans le cours).
Vous pouvez alors utiliser les fonctions log pour le logarithme, sqrt pour la racine carré (SQuare RooT), exp pour l'exponentielle, et sin pour le sinus.
Pour l'élévation au carré, vous pouvez soit utiliser la multiplication, soit la fonction pow :

pow(x,2)
calcule (retourne) le carré de x.


Exercice 5 : Résolution d'une équation du 3e degré
(variables, expressions arithmétiques, branchements conditionnels; niveau 2)

Exercice n°10 (page 23 et 207) de l'ouvrage C++ par la pratique.
(pages 23 et 206 dans la 2e édition).
Exercice supplémentaire n°1 du MOOC

On veut maintenant faire un programme qui demande trois valeurs (a0, a1, a2) à l'utilisateur et affiche la (ou les) solution(s) réelle(s) z de l'équation :

z3 + a2 z2 + a1 z + a0 = 0

Indications - commencer par calculer :

Q =(3*a1-a2*a2)/9
R =(9*a2*a1-27*a0-2*a2^3)/54
D = Q3 + R2

Démonstration des formules à la page : http://mathworld.wolfram.com/CubicFormula.html

Si D < 0, on calcule les trois solutions réelles ainsi :

cos-1(R*(-Q)^{-1/3})cos-1 est la fonction acos de C++, fournie par <cmath> - i.e. il faut inclure ce fichier en début de programme
z1 = 2*sqrt(-Q)*cos(theta/3)-a2/3
z2 = 2*sqrt(-Q)*cos((theta+2*M_PI)/3)-a2/3Pour π, vous pouvez utiliser la constante M_PI souvent présente dans <cmath> Mais comme elle n'est pas officiellement dans le standard, il se peut que votre compilateur ne l'ajoute pas (surtout si on demande expressément un standard avec l'option -std=c++-11).
Ajoutez alors simplement la ligne suivante en tout début de votre programme, avant même les #include :

#define _USE_MATH_DEFINES

Si cela ne fonctionne pas non plus, une dernière solution consiste à simplement ajouter les lignes suivantes en début de votre programme, mais après les #include et le using namespace std; cette fois : ​

​#ifndef M_PI
​#define M_PI 3.14159265358979323846
​#endif
​
z3 = 2*sqrt(-Q)*cos((theta+4*M_PI)/3)-a2/3
Sinon, on calcule :
S = (R+sqrt(D))^(1/3) la racine cubique de x est obtenue en C++11 par "cbrt(x)" .
T = (R-sqrt(D))^(1/3)

Si D=0 et S+T != 0, il y a 2 racines :

z1 = S+T-a2/3
z2 = -(S+T)/2-a2/3 (racine double)

Sinon, il y a une racine unique : z1 ci-dessus.

Exemples d'exécution :

Entrez a2, puis a1, puis a0 :
-6 -13 42
Trois racines ( 7 , -3 , 2 )
ou
Entrez a2, puis a1, puis a0 :
1 -1 2
Une seule racine : -2

Exercice 6 : Devoir 2 du MOOC (niveau 2)

Les devoirs du MOOC, même s'il ne sont pas notés pour vous, sont un bon moyen de vous entraîner aussi. Vous pouvez les soumettre à un correcteur automatique (autant de fois que vous le souhaitez) et recevoir un feedback. Cette semaine vous pouvez faire le devoir de la semaine 2 pour vous entraîner à la formulation de tests logiques.


Dernière mise à jour : $Date: 2017/09/29 18:02:35 $   ($Revision: 1.19 $)