Séance d'exercices 2, Programmation I
Sciences et Technologies du Vivant, Semestre 1

Remarques importantes

Créez un répertoire si besoin

Si vous n'avez pas pu créer un répertoire où sauver vos fichiers pour ce cours la semaine dernière, tapez dans une fenêtre Terminal:

cd
cd myfiles
mkdir programmation1
cd programmation1

La première commande permet de vous déplacer dans votre home directory, la seconde dans le répertoire myfiles qui permet de conserver des fichiers d'une session à l'autre, la troisième de créer le répertoire programmation1 où sauver vos fichiers, et la dernière de se déplacer dans le fichier que vous venez juste de créer.

Si vous avez déjà créé ce répertoire programmation1 dans myfiles, faites simplement:

cd
cd myfiles/programmation1

pour que les fichiers créés cette séance soit sauvés dans ce répertoire.

Exercice 1 - Correction d'erreurs de programmation

  1. Dans cet exercice, vous allez devoir corriger les erreurs de syntaxe du programme qui vous est donné. Ouvrez une nouvelle fenêtre emacs en tapant la commande
    emacs erreurs.cpp &
    

    Tapez le programme suivant dans emacs, qui contient plusieurs erreurs. Vous pouvez le copier directement de la fenêtre Firefox à la fenêtre Emacs en sélectionnant d'abord le texte dans la fenêtre Firefox à la souris en appuyant sur le bouton gauche, dplacez ensuite la souris sur la fenêtre Emacs, et cliquez sur le bouton du milieu.

          #include iostream
    
          using namespace sdt;
    
          int main(int argc, char **argv)
          (
          flat yyy ; ymultipliepar2;
          
          yyyy = 4;
          ymultipliepar2 = yyy * 2;
    
          cout "2 yyyy = " << ymultipliepar2 << endl;
    
          return 0
          )
    

  2. Sauvez le programme sous erreurs.cpp.
  3. Compilez le programme avec: g++ -Wall erreurs.cpp -o erreurs g++ doit retourner plusieurs messages d'erreur.
  4. Trouvez et corrigez les erreurs jusqu'à ce que le programme puisse être compilé et exécuté correctement. Rappelez-vous de commencer par corriger la première erreur de la liste, puisqu'une erreur peut en entraîner d'autres.

Exercice 2 - Table de multiplications

  1. Ouvrez un nouveau fichier avec emacs:
          emacs table.cpp &
    

  2. Tapez le programme suivant dans emacs:
          #include <iostream>
    
          using namespace std;
    
          int main(int argc, char **argv)
          {
            cout << "5 multiplie par 1 vaut " << 5 * 1 << endl;
            cout << "5 multiplie par 2 vaut " << 5 * 2 << endl;
    
            return 0;
          }
    

    Attention: Les instructions placées APRÈS le return 0; ne sont pas exécutées !

  3. Complétez le programme pour qu'il affiche la table de 5 jusque 5 * 10. Vous pouvez utiliser la souris pour copier plusieurs fois une même ligne, mais il est plus rapide d'utiliser le clavier et les commandes d'emacs: Placez le curseur au début de la ligne cout ... dans la fenêtre emacs, et tapez Ctrl-k. La partie de la ligne après le curseur disparaît. Pour coller à nouveau cette partie, tapez Ctrl-y. Vous pouvez ainsi recopier plusieurs fois la même ligne.

    Pour compiler le programme, tapez dans la fenêtre Terminal:

          g++ -Wall -o table table.cpp
    

    Pour l'exécuter, tapez simplement le nom de l'exécutable créé:

          ./table
    

  4. Modifiez le programme pour qu'il demande à l'utilisateur quelle table le programme doit afficher. Pour cela, ajoutez au programme la déclaration d'une variable entière:
          int n;
    

    Ajoutez les instructions pour demander la table à l'utilisateur:

          cout << "Entrez le numero de la table a afficher: ";
          cin >> n;
    

    Modifiez les instructions {cout << "5 multiplie par .. en conséquence pour afficher la table.

    Remarquez qu'une même ligne est répétée dix fois, à peu de différences près. Nous verrons par la suite que des instructions de contrôle (instructions de boucles) permettent d'éviter cette répétition.

Exercice 3 - Calcul de moyenne

  1. Ecrivez un programme qui lit trois notes d'examen puis qui calcule et affiche la moyenne. Voici le début du programme, que vous devrez compléter:
          #include <iostream>
    
          using namespace std;
    
          int main(int argc, char **argv)
          {
            float note1, note2, note3;
            float moyenne;
    
            cout << "Entrez la note 1: ";
            cin >> note1;
    
            return 0;
          }
    

  2. Modifiez votre programme, afin qu'il calcule la moyenne de quatre notes
    1. en se servant de 5 variables;
    2. en se servant de 2 variables.

  3. Supposons maintenant que les notes soient forcément entières. Par souci de cohérence, on veut donc qu'une variable contenant une note soit de type int. En revanche, on veut que la moyenne reste une valeur flottante (la moyenne de 4, 4, 5 et 5 est 4.5). Comment modifier votre programme en conséquence ?

Exercice 4 - Résolution d'équation du deuxième degré

Ecrivez un programme qui demande à l'utilisateur les trois coefficients $a$, $b$, $c$ d'une équation du second degré

\begin{displaymath}
ax^2 + bx + c = 0
\end{displaymath} (1)

et qui calcule et affiche les deux racines de l'équation. Ne tenez pas compte pour l'instant du cas où le discriminant peut être négatif.

Vérifiez que votre programme est correct:

Rappel: Les racines peuvent être calculées suivant:

\begin{displaymath}
x_{1,2}=\frac{-b\pm\sqrt{\Delta}}{2a}
\end{displaymath} (2)

avec $\Delta=b^2-4ac$.

La fonction C qui calcule la racine carrée s'appelle sqrt. Pour pouvoir utiliser cette fonction, vous devez mettre la ligne #include <cmath> au début de votre programme.

Attention: il faut également ajouter l'option -lm au moment de la compilation pour pouvoir utiliser les fonctions mathématiques (ici sqrt). Par exemple, si votre programme s'appelle deuxieme_degre.cpp vous devez taper pour le compiler:

    g++ -Wall deuxieme_degre.cpp -o deuxieme_degre -lm

Exercice 5 - Précision

  1. Ecrivez un programme qui demande à l'utilisateur d'entrer un entier. Calculez la racine carrée de ce nombre. Affichez ensuite la différence ($\Delta$) entre le nombre original et la racine carrée élevée au carré.

    \begin{eqnarray*}
b & = & \sqrt{a}\\
\Delta & = & a - b^2 \\
\end{eqnarray*}

  2. Compilez votre programme et exécutez-le. Testez-le avec plusieurs nombres différents, dont 36 et 37. Vous remarquerez qu'avec 36, notamment, la différence $\Delta$ vaut 0, comme on pourrait s'y attendre. Avec d'autres nombres dont la racine carrée n'est pas un entier, on obtient une légère différence. Pouvez-vous expliquer ce phénomène?

Exercice 6 - Permutations

Le programme ci-dessous demande à l'utilisateur d'entrer 3 nombres, les affiche et les permute. Cependant, le code pour effectuer la permutation des variables est manquant. Copiez le code ci-dessous dans une fenêtre emacs et remplacez les points de suspension par le code approprié. Réalisez la permutation suivante: le contenu de $a$ va dans $b$, celui de $b$ va dans $c$ et celui de $c$ dans $a$.

    #include <iostream>

    using namespace std;

    int main(int argc, char **argv) {
      int a, b, c;

      cout << "Entrez la premiere valeur: ";
      cin >> a;
      cout << "Entrez la deuxieme valeur: ";
      cin >> b;
      cout << "Entrez la troisieme valeur: ";
      cin >> c;

      cout << "Les valeurs entrees sont: a = " << a << ", b = " << b << 
      " et c = " << c << endl;

      cout << "Permutation: a ==> b, b ==> c, c ==> a" << endl;

      ...

      cout << "Les valeurs permutees sont: a = " << a << ", b = " << b << 
      " et c = " << c << endl;

      return 0;
    }

Exercice 7 - Conversion décimal vers binaire ($\dag $)

Ecrivez un programme qui demande à l'utilisateur un nombre entier et qui affiche alors les premiers bits de l'écriture binaire de ce nombre. Par exemple, si l'utilisateur entre 12 qui s'écrit 1100 en binaire, le programme devra afficher:

    0
    0
    1
    1

Le programme devra être correct au moins pour les nombres de 0 à 15. Rappel: l'écriture binaire est constituée des restes des divisions successives par 2.


Retour