Vous êtes sur la page 1sur 4

L2 Informatique Algorithmique et Structures de Données 2016-2017

Test TP : Partie 2 (Programmation)


Durée 1H
Seulement le résumé de langage C est autorisé
Téléphone et PCs interdits
Matricule Nom Prénom Groupe

Enoncé : Soit FA une File d’Attente contenant une liste des étudiants où chaque étudiant est représenté
par : matricule (entier), nom, prénom, section (A, B ou C), numéro de groupe (1 à 6), sa moyenne
générale (entre 0 et 20). Cette file est implémentée de manière dynamique en utilisant une LLC (Liste
Linéaire Chaînée).

L’objectif de ce TP est de :
1. Créer une file à partir d’un fichier texte contenant la liste des étudiants.
2. Classer les étudiants selon l’ordre décroissant des moyennes en utilisant le tri par ABR.

La figure suivante résume les étapes de réalisation de ce projet.

Mme Aroussi Page 1


L2 Informatique Algorithmique et Structures de Données 2016-2017

Pour ce faire, on crée un projet nommé TestTP_LLC.cbp, qui contient les fichiers suivants : « main.c », «
ModeleLLC.h », « ModeleLLC.c », « ModeleFileD.h », « ModeleFileD.c », « ModeleABR.h » et «
ModeleABR.c ».
Il est demandé de
1. Compléter le fichier « ModeleFileD.h » qui correspond au fichier « ModeleFileD.h »:
Fichier « ModeleFileD.h » Fichier « ModeleFileD.c »
#ifndef MODELEFILED_H_INCLUDED #include <stdlib.h>
#define MODELEFILED_H_INCLUDED #include"ModeleFileD.h"
#include"ModeleLLC.h"
void Initfile (FileAttente* F)
typedef struct FileAttente { (*F).T = NULL; (*F).Q = NULL; }
{ maillon* T; maillon* Q;
} FileAttente; int FileVide (FileAttente F)
{ return(F.T==NULL);}
return(F.T==NULL);
void Initfile(FileAttente * F);
int FilePleine (FileAttente F)
int FileVide (FileAttente F); { return(0);}
return(0);

int FilePleine (FileAttente F); void Enfiler (FileAttente *F, Etudiant v)


{
void Enfiler (FileAttente *F, Etudiant v); maillon* P = allouer(); aff_val(P, v); aff_suiv(P, NULL);
if (!FileVide(*F)) aff_suiv((*F).Q, P);
void Defiler (FileAttente *F, Etudiant* v); else (*F).T = P;
(*F).Q = P;
#endif // MODELEFILED_H_INCLUDED }

void Defiler (FileAttente *F, Etudiant* v)


{
if (!FileVide(*F))
{ *v = valeur((*F).T); maillon* P=(*F).T;
(*F).T=suivant((*F).T); liberer(P);
}
}

2. En utilisant le modèle de la file, compléter la fonction creerFile qui permet de créer une file à
partir d’un fichier texte:
FileAttente creerFile(char* nomF){
FileAttente F;
Etudiant v;
FILE *fichier;
Initfile(&F);
fichier = fopen(nomF,"r");// Ouverture du fichier en lecture grâce à "r"
if (fichier != NULL)
{
fscanf(fichier,"%s %s %s %s %s %s\
%s\n", v.nom, v.nom, v.nom, v.nom, v.nom, v.nom);
while(!feof(fichier))

Mme Aroussi Page 2


{
fscanf(fichier,"%d %s %s %d %c %f\
%f\n",&v.matricule, &v.nom, &v.prenom, &v.groupe, &v.section,
&v.moyenne);
&v.moyenne);
Enfiler(&F, v);
}
fclose(fichier);
}
return (F); }
3. En utilisant le modèle d’ABR, rappeler la fonction récursive InsererABR qui permet d’insérer un
nœud dans un ABR :
Tnoeud* InsererABR (Tnoeud* R, Etudiant x){
if (R==NULL)
R=CreerNoeud(x);
else
if (Info(R).moyenne>x.moyenne)
aff_FG(R, InsererABR(FG(R), x));
else
aff_FD(R, InsererABR(FD(R), x));
return R;
}
4. En utilisant le modèle de File et la fonction InsererABR, compléter la fonction ConstruireABR
qui permet de construire un ABR à partir d’une file
Tnoeud* ConstruireABR (FileAttente * F) {
Etudiant x;
Tnoeud* R = NULL;
while (! FileVide(*F))
{
Defiler(F, &x);
R = InsererABR(R, x);
}
return (R); }
5. En utilisant le modèle de File et d’ABR, compléter la procédure récursive CreerFileOrdonnee qui
permet de créer une file ordonnée (selon l’ordre décroissant des moyennes des étudiants) à partir
d’un ABR.
void CreerFileOrdonnee (Tnoeud* R, FileAttente * F) {
Etudiant v;
if (R!=NULL)
{
CreerFileOrdonnee (FD(R), F);
v = Info(R);
//printf("%d %s %s %d %c %f\
%f\n",v.matricule, v.nom, v.prenom, v.groupe, v.section, v.moyenne);
Enfiler(F, v);
CreerFileOrdonnee (FG(R), F);
}
}
6. En utilisant le modèle de la file, compléter la fonction sauvegarderFile qui permet de sauvegarder
le contenu de la file dans un fichier texte:
void sauvegarderFile (FileAttente *P, char* nom){

Aroussi Page 3
Etudiant v;
FILE *fichier;
fichier = fopen(nom,"w");// Ouverture du fichier en écriture grâce à "w"
if (fichier != NULL)
{
fprintf(fichier,"Matricule Nom Prenom Groupe Section Moyenne \n");

while(! FileVide(*F))
FileVide(*F))
{
Defiler(F, &v);
fprintf(fichier,"%d %s %s %d %c %f\
%f\n",v.matricule, v.nom, v.prenom, v.groupe, v.section, v.moyenne);
}
fclose(fichier);
}
}

Bon courage

Aroussi Page 4

Vous aimerez peut-être aussi