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)
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)
Écrivez le programme intervalle.cc qui :
- demande à l'utilisateur d'entrer un réel ;
- enregistre la réponse de l'utilisateur dans une variable x de type réel ;
- 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 :
-
pour les points (1) et (2), vous pouvez utiliser le code suivant :
#include <iostream> using namespace std; int main() { double x ; // déclaration cout << "Entrez un réel : " ; // demande à l'utilisateur d'entrer un réel cin >> x ; // enregistre la réponse dans x return 0; }
Exercice 3 : Expressions conditionnelles (niveau 2)
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)
- ;
- ;
- ;
- .
Écrivez un programme formules.cc qui :
- demande à l'utilisateur d'entrer un réel ;
- enregistre la réponse de l'utilisateur dans une variable x de type réel ;
-
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
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) |
Exercice 5 : Résolution d'une équation du 3e degré
(variables, expressions arithmétiques, branchements conditionnels;
niveau 2)
(pages 23 et 206 dans la 2e édition).
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 = | |
R = | |
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 est la fonction acos de C++, fournie par <cmath> - i.e. il faut inclure ce fichier en début de programme | ||
z1 = | ||
z2 = | Pour π, 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 #ifndef M_PI #define M_PI 3.14159265358979323846 #endif |
|
z3 = |
S = | la racine cubique de x est obtenue en C++11 par "cbrt(x)" . |
|
T = |
Si D=0 et S+T != 0, il y a 2 racines :
z1 = | ||
z2 = | (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.