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 :

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

Pour les utilisateurs de QTCreator :

Si vous travaillez avec QTCreator, vous n'êtes pas obligé de créer un projet par exercice. Vous pouvez aussi:

  • Créer un seul projet pour la série: File > New file or project > Non-QT project > Plain C++ application et choisir serie3 comme nom de projet (en le créant dans un répertoire de Desktop/myfiles en en choisissant Cmake comme outil de compilation).
  • Pour chaque nouvel exercice, ajouter le fichier de l'exercice au projet: File > new File or Project > C/C++ > C/C++ Source files, choisissez le nom de votre programme par exemple formules.cc (il vous sera automatiquement proposé de le mettre dans le dossier du projet en cours, répondez par oui à la sollicitation de copier dans le clipboard, ce n'est pas important).
  • Ouvrez le fichier CmakeLists.txt dans QTCreator et ajoutez y la ligne
    add_executable(formule formules.cc)
    
    à la fin et sauvegarder (adapter les noms en fonction de l'exercice bien sûr)
  • Ceci vous permettra d'avoir un seul projet pour toute la série. Il vous suffit alors de choisir quel exercice vous voulez exécuter en cliquant sur le petit écran sur la barre latérale gauche (voir ici).

    Afin de pouvoir entrer des valeurs depuis le clavier, procéder à la configuration indiquée dans la section "install/installation-tutorial.php#input_in_qtcreator". Tout ceci est expliqué dans le guide d'utilisation de QTCreator, n'hésitez pas à consulter ce guide, notamment la FAQ).

    Pour re-ouvrir un ancien projet, il suffit de faire File > Open File or Project et ouvrir le fichier CmakeLists.txt de ce projet (comme expliqué ici).

    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 i : indéfinie» 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 décimal : -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 très 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 il est recommandé de faire le devoir de la semaine 2 pour vous entraîner à la formulation de tests logiques.


    Dernière mise à jour : 2025/09/18 12:52