Genie logiciel bts 2024
Thème :
Junior
1 vues ·2/4 leçons

Corrigé Complet & Méthodologique : Gestion INFOREPAR

Pour maîtriser ce genre d’exercice, il ne suffit pas de connaître le code, il faut comprendre la méthodologie de conception. Voici une décomposition pédagogique de la résolution, divisée par étapes logiques.


ÉTAPE 1 : La Phase de Réflexion (Analyse des structures)

III.1 Avantages et inconvénients : Vecteurs vs Listes Chaînées

Structure Avantages Inconvénients
Vecteur (Tableau) • Accès direct et rapide via l’indice.
• Gestion mémoire simple et contiguë.
• Taille fixe (statique) définie à l’avance.
• Insertion/suppression coûteuse (décalage).
Liste Chaînée • Taille dynamique (s’adapte aux besoins).
• Insertion/suppression très facile.
• Accès séquentiel uniquement (parcours lent).
• Consomme plus de mémoire (données + pointeurs).

💡 Rappel de cours :

  • Vecteur (Tableau) : C’est comme un immeuble de 50 appartements numérotés. On connaît la taille exacte dès le début. Si on veut le 10ème, on y va directement.
  • Liste Chaînée : C’est comme une chasse au trésor. Chaque indice (nœud) contient un objet ET un papier indiquant où se trouve l’indice suivant.

🛠️ Technique de résolution : Le comparatif “Accès vs Flexibilité”

  • Pourquoi le tableau pour les clients ? L’énoncé dit “maximum 50”. C’est une limite fixe. Le tableau est parfait pour une taille connue.
  • Pourquoi la liste pour les matériels ? On ne sait pas combien de matériels seront réparés. La liste est “élastique” (dynamique) : elle grandit selon les besoins.

ÉTAPE 2 : La Phase de Modélisation (Définition des types)

III.2 Déclarations des structures de données

// 1. Structure pour l'adresse (Enregistrement imbriqué)
Type Adresse = Enregistrement;
    code_postal : Chaîne;
    quartier : Chaîne;
    ville : Chaîne;
FinEnregistrement;

// 2. Structure pour le Client
Type Client = Enregistrement;
    code : Entier;
    nom : Chaîne;
    prenom : Chaîne;
    adresse : Adresse; // Imbrication de l'enregistrement Adresse
    telephone : Chaîne;
FinEnregistrement;

// 3. Structure pour le Matériel (pour la Liste Chaînée)
Type Materiel = Enregistrement;
    code : Entier;
    designation : Chaîne;
    type : Chaîne;
    marque : Chaîne;
    num_serie : Chaîne;
    code_client_proprio : Entier;
    suivant : Pointeur vers Materiel; // INDISPENSABLE pour la liste
FinEnregistrement;

// Variables Globales
Variables
    Tableau_Clients : Tableau[1..50] de Client;
    Liste_Materiels : Pointeur vers Materiel; // Tête de la liste
    nb_clients_actuels : Entier;

💡 Rappel de cours :

  • Enregistrement (Record) : Un conteneur qui regroupe des données de types différents.
  • Imbrication : C’est mettre un enregistrement à l’intérieur d’un autre.
  • Pointeur : Une variable qui contient une adresse mémoire (le lien vers l’élément suivant).

🔍 Analyse pas à pas (Le “Pourquoi”) :

  1. L’adresse : L’énoncé dit que l’adresse est composée de 3 éléments. On crée donc un type Adresse.
  2. Le Client : Il possède une adresse. On utilise l’imbrication : son champ adresse est de type Adresse.
  3. Le Matériel : Pour que ce soit une liste chaînée, chaque matériel DOIT avoir un champ suivant qui est un Pointeur. Sans ce pointeur, les éléments ne sont pas reliés entre eux.

ÉTAPE 3 : L’Algorithmique (Écriture des programmes)

III.3 Procédure pour créer un vecteur de N Clients

Procédure Creer_Vecteur_Clients(N : Entier, VAR T : Tableau[1..50] de Client, VAR taille : Entier);
Variables
    i : Entier;
Début
    Si (N > 50) Alors
        Ecrire("Erreur : Maximum 50 clients.");
        taille <- 0;
    Sinon
        taille <- N;
        Pour i de 1 à N Faire
            Ecrire("Saisie du client n°", i);
            Lire(T[i].code, T[i].nom, T[i].prenom);
            // Accès imbriqué pour l'adresse
            Lire(T[i].adresse.code_postal, T[i].adresse.quartier, T[i].adresse.ville);
            Lire(T[i].telephone);
        FinPour;
    FinSi;
Fin;

🛠️ Technique : Utiliser une boucle POUR car on connaît le nombre d’itérations ($N$). ⚠️ Piège à éviter : L’utilisation du mot-clé VAR dans les paramètres.

  • Pourquoi ? Si vous passez un tableau sans VAR, la procédure travaille sur une copie. Quand elle s’arrête, le tableau original reste vide. VAR permet de modifier l’original.

III.4 Procédure pour ajouter un matériel dans la Liste Chaînée

Procédure Ajouter_Materiel(M_nouveau : Materiel, VAR tete : Pointeur vers Materiel);
Début
    M_nouveau.suivant <- tete;
    tete <- M_nouveau;
    Ecrire("Matériel ajouté.");
Fin;

🔍 Analyse pas à pas : Imaginez une chaîne de personnes qui se tiennent la main.

  1. Le nouveau membre ($M$) doit d’abord attraper la main de la première personne actuelle (M.suivant <- tete).
  2. Ensuite, la “tête” de la file devient $M$ (tete <- M). 🚀 Pourquoi cette méthode ? C’est l’insertion en tête. C’est la plus rapide car on ne perd pas de temps à chercher la fin de la liste.

III.5 Procédure pour afficher les matériels d’un client

Procédure Afficher_Materiels_Par_Client(C_code : Entier, T : Tableau[1..50] de Client, taille_T : Entier, tete_M : Pointeur vers Materiel);
Variables
    i : Entier;
    client_existe : Booleen;
    courant : Pointeur vers Materiel;
Début
    // 1. Vérifier si le client existe (Filtre sur le Tableau)
    client_existe <- Faux;
    Pour i de 1 à taille_T Faire
        Si (T[i].code = C_code) Alors
            client_existe <- Vrai;
            Interrompre;
        FinSi
    FinPour;

    Si (client_existe = Faux) Alors
        Ecrire("Erreur : Client inconnu.");
    Sinon
        // 2. Filtrer les matériels (Filtre sur la Liste)
        courant <- tete_M;
        TantQue (courant != NULL) Faire
            Si (courant.code_client_proprio = C_code) Alors
                Ecrire("Matériel : ", courant.designation);
            FinSi
            courant <- courant.suivant;
        FinTantQue;
    FinSi;
Fin;

🛠️ Technique de résolution : “Le filtre successif”

  1. Étape 1 (Le filtre Client) : On parcourt le tableau. On utilise un “drapeau” (booléen client_existe) pour mémoriser si on a trouvé le client.
  2. Étape 2 (Le filtre Matériel) : Si le drapeau est “Vrai”, on parcourt la liste avec une boucle TantQue.
  3. Le pointeur de parcours : On utilise une variable courant. Pourquoi ? Si on modifiait directement tete, on perdrait l’adresse du début de la liste et elle deviendrait inaccessible ! courant est notre “doigt” qui se déplace.

III.6 Fonction pour retourner le nombre de matériels

Fonction Compter_Nombre_Materiels(tete : Pointeur vers Materiel) : Entier;
Variables
    compteur : Entier;
    courant : Pointeur vers Materiel;
Début
    compteur <- 0;
    courant <- tete;
    TantQue (courant != NULL) Faire
        compteur <- compteur + 1;
        courant <- courant.suivant;
    FinTantQue;
    Retourner compteur;
Fin;

🛠️ Technique : C’est un algorithme de “compteur”.

  1. On part du début.
  2. On avance tant qu’on n’est pas dans le vide (NULL).
  3. À chaque pas, on fait +1.

📝 Résumé de la méthodologie pour vos prochains examens

Problème Ce qu’il faut chercher dans l’énoncé Technique à utiliser
Taille fixe/max “Maximum de…”, “Taille de…” Tableau / Vecteur
Taille inconnue “Liste de…”, “Nombre indéfini” Liste Chaînée
Plusieurs infos liées “Caractérisé par…”, “Décrit par…” Enregistrement
Éléments dans des éléments “L’adresse est composée de…” Imbrication
Parcours de liste “Parcourir la liste…” TantQue (courant != NULL)
Modification de l’original “Créer un vecteur…”, “Ajouter…” Paramètre VAR

Prêt à passer à la suite ?

Vous avez terminé cette leçon sur Corrigé Complet & Méthodologique : Gestion INFOREPAR. Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.