PRREL

TP n°4 - Exercice 1

Énoncé

typedef enum { IOSI, MATH, INFO, SCPH, BC, MECA, AUDIO, GEII, GCAU } Filiere;

À chacune des 9 filières est associée une valeur entière correspondant à un nombre d'inscrits compris entre 10 et 120 et une autre valeur entière arrondie correspondant à un indice de satisfaction compris entre 0 et 10.

  1. Écrire un programme qui affiche chacun des rangs des valeurs du type Filiere.
  2. Définir les 2 types supplémentaires Inscrits et Satisfaction.
  3. On veut calculer les moyennes réelles des deux valeurs entières.
    1. Déclarer les 5 objets nécessaires en C pour résoudre le problème avec notamment une variable de type Filiere, une variable de type Inscrits et une varible de type Satisfaction.
    2. Écrire le programme de calcul en C des moyennes en utilisant un schéma TQ et en utilisant une variable compteur de type Filiere.
    3. Proposer une solution avec un POUR.

N.B. En C, le type énuméré est un sous-ensemble des entiers et donc on peut faire des additions et soustractions ... notamment pour passer à la valeur suivante.

Correction

#include <stdio.h>
#include <stdlib.h>

// Il y a une erreur dans l'énoncé, il faut donner
// un nom au type qu'on définit *et* à l'énumération.
typedef enum Blop {
  IOSI,
  MATH,
  INFO,
  SCPH,
  BC,
  MEDIA,
  AUDIO,
  GEII,
  GCAU
} Filiere;


// -----------------------------------
// Question n°2
typedef int Inscrits[9];
typedef int Satisfaction[9];

int main() {
  Filiere f;

  // ---------------------------------
  // Question n°1
  for (f = IOSI; f <= GCAU; f++) {
    printf("Eh bien le bonjour: %d\n", f);
  }

  // ---------------------------------
  // Question n°3.1
  // + Filiere f déjà définie ligne 25
  int somme_inscrits     = 0,
      somme_satisfaction = 0;

  Inscrits inscrits          = {10, 20, 30, 10, 40, 20, 110, 90, 35};
  Satisfaction satisfactions = {8, 3, 3, 5, 4, 6, 1, 8, 9};

  // ---------------------------------
  // Question n°3.2
  f = IOSI;
  while (f <= GCAU) {
    somme_inscrits     = somme_inscrits + inscrits[f];
    somme_satisfaction = somme_satisfaction + satisfactions[f];

    f++;
  }

  // ---------------------------------
  // Question n°3.3
  for (f = IOSI; f <= GCAU; f++) {
    somme_inscrits     = somme_inscrits + inscrits[f];
    somme_satisfaction = somme_satisfaction + satisfactions[f];
  }

  // Et à la fin, pour afficher les moyennes, il suffit de faire:
  // float moyenne_inscrits      = somme_inscrits / 9.0;
  // float moyenne_satisfactions = somme_satisfactions / 9.0;

  return 0;
}