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


Exercice 1 - Complexes

Dans cet exercice, vous allez écrire quelques fonctions permettant la manipulation de nombres complexes. Déclarez le type Complexe, qui sera une structure représentant un nombre complexe. Cette structure aura donc deux champs de type float, que nous appelerons re et im, et qui contiendront respectivement les parties réelles et imaginaire du nombre complexe.

    struct Complexe {
      float re, im;
    };

  1. Ecrivez les fonctions init_comp et afficher_comp qui initialise et affiche respectivement une variable de type Complexe. Ces fonctions auront l'en-tête suivant:
          Complexe init_comp(float re, float im)
    

    et

          void afficher_comp(Complexe c)
    

  2. Ecrivez une fonction main permettant de tester les deux fonctions que vous venez d'écrire.

  3. Ajoutez la fonctions add_comp permettant de calculer la somme de deux complexes, qui aura comme en-tête
          Complexe add_comp(Complexe C1, Complexe C2)
    

  4. Ajoutez les fonctions
          Complexe mult_comp(Complexe C1, Complexe C2)
          Complexe mult_scal_comp(float s, Complexe C)
          Complexe sqrt_comp(float r)
    

    qui renvoient respectivement

  5. Finalement, ajoutez la fonction module qui renvoie le module d'un complexe passé en paramètre.

Exercice 2 - Fractions

Nous allons définir une structure Fraction, qui permettra de représenter des fractions:

    struct Fraction
    {
      int numerateur;
      int denominateur;
    };

qui correspondra à la fraction $ \frac{\text{numerateur}}{\text{
denominateur}}$ .

Nous voulons que les fractions soient toujours irréductibles, même après un calcul. Par exemple, le produit des fractions $ \frac{4}{25}$ et $ \frac{15}{2}$ devra donner la fraction $ \frac{6}{5}$ , et non pas la fraction $ \frac{60}{50}$ . Pour cela, on pourra utiliser la fonction pgcd:

    int pgcd(int a, int b) {
      int m;
      if (a < b)
      m = a;
      else
      m = b;

      while ((a % m != 0) || (b % m != 0))
      m--;

      return m;
    }

Ainsi, la fonction init_frac s'écrit:

    Fraction init_frac(int num, int den)
    {
      int div = pgcd(num, den);
      Fraction resultat;

      resultat.numerateur = num / div;
      resultat.denominateur = den / div;

      return resultat;
    }

Comme pour l'exercice sur les complexes, écrivez les fonctions afficher_frac, add_frac, mult_frac, mult_scal_frac, dont le but est, respectivement, d'afficher une fraction, d'additioner 2 fractions, de multiplier 2 fractions et de multiplier une fraction par un scalaire..

En utilisant la fonction init_frac, les fonctions add_frac, mult_frac, mult_scal_frac peuvent s'écrire très simplement, en une seule ligne.

Exercice 3 - Base de données

Dans cet exercice, vous allez écrire un programme permettant de gérer une petite base de données de numéros de téléphone.

  1. Commencez par définir une structure Personne dont les champs seront une chaîne de caractères pour le nom et une autre pour le numéro de téléphone.
  2. Déclarez une variable de type Personne dans main puis initialisez-la en demandant à l'utilisateur d'entrer un nom et un numéro de téléphone. Faites afficher ensuite le nom et le numéro de téléphone contenus dans la structure:
          Le numero de Pierre est 123456.
    

  3. Ecrivez maintenant une fonction nouveau_numero qui reçoit un pointeur sur Personne en paramètre. La fonction doit demander à l'utilisateur d'entrer un nouveau nom ainsi que le numéro de téléphone correspondant. Elle placera les nouvelles valeurs dans le pointeur passé en paramètre. Il faut aussi s'assurer que le nom commence bien par une majuscule, et modifier le nom en conséquence si ce n'est pas le cas.
  4. Ecrivez maintenant une fonction recherche qui reçoit un tableau de Personne ainsi que sa taille en paramètres. La fonction doit demander à l'utilisateur le nom qu'il désire chercher puis effectuer une recherche dans le tableau de personne. Si le nom est trouvé, la fonction affichera le numéro de téléphone de la personne, sinon elle imprimera un message d'erreur.
  5. Ecrivez une troisième fonction, nommée liste, qui prend un tableau de Personne ainsi que la taille du tableau en paramètres. Comme son nom l'indique, cette fonction affichera la liste de toutes les valeurs présentes dans le tableau.
  6. Finalement, écrivez la fonction main (vous pouvez supprimer le code écrit au point 2). Il vous faudra tout d'abord déclarer un tableau de Personne qui sera votre base de données. Ensuite, une boucle while affichera le menu suivant
          1) Nouveau numero
          2) Recherche
          3) Liste
          4) Quitter
    

    et attendra une entrée de l'utilisateur. Une fois que l'utilisateur a entré son choix, il ne vous restera plus qu'à appeler la bonne fonction.

    Indices:


Retour