DissertationsEnLigne.com - Dissertations gratuites, mémoires, discours et notes de recherche
Recherche

Vieux Rapport

Dissertation : Vieux Rapport. Rechercher de 53 000+ Dissertation Gratuites et Mémoires
Page 1 sur 6

0 RESISTANCE 20 200 . . .

La fonction recup_fich() permet de récupérer les informations contenues dans de tels fichiers. Pour ce faire, on utilise un modèle de structure que l’on appelle composant : typedef struct { char *type; float valeur; int quantite; }composant; La fonction recup_fich() retourne l’adresse d’une zone mémoire (mem) contenant les différentes structures de type composant. Elle retourne également le nombre de références de composant répertoriées dans le fichier de départ. On souhaite créer une liste doublement chaînée et ordonnée par ordre alphabétique des types de composants se trouvant en mémoire à partir de l'adresse pointée par mem et pour chacun de ces types, créer une sous-liste des valeurs disponibles avec la quantité associée. A cette fin, on définit trois modèles de structure : type_compo, val_compo et liste (ces modèles sont fournis dans le fichier main.h).

2

Pour créer la liste des références de composant ordonnées par ordre alphabétique, on fait appel à la fonction creat_liste(). Cette fonction devra créer une variable type_compo pour chaque nouveau type de composant à insérer dans la liste principale (appel fonction creat_typecompo()). Par contre, si le type de composant a déjà été inséré dans la liste principale, on devra se contenter de créer une nouvelle variable val_compo dans la sous-liste des valeurs correspondant au type de composant considéré (appel fonction creat_valcompo()). Dans le cas où la valeur de ce composant existe déjà dans la sous-liste, on se contente d’actualiser la quantité. La figure 1 ci-après représente la liste principale et les sous-listes obtenues en appliquant la fonction creat_liste() sur le contenu de la mémoire après avoir récupéré le fichier exemple fourni au début de cet exercice. La liste comme les différentes sous-listes ne comportent pas d’élément fictif pour marquer la fin de la liste. On se contente pour la liste principale de mettre le pointeur prec du premier élément à la valeur NULL et le pointeur suiv du dernier élément à la valeur NULL. Dans le cas des sous-listes qui sont simplement chaînées, le pointeur suiv du dernier élément de la sous-liste est mis à la valeur NULL. Remarque importante : la zone mémoire pointée par mem n’est pas libérée à l’issue de l’exécution de la fonction creat_liste(). Le fichier main.h vous est fourni à l’annexe 2. Le début du fichier source (notamment la fonction main()) vous est fourni à l’annexe 3. La trame de la fonction creat_liste() vous est fournie à l’annexe 4.

Travail à réaliser :

1) Complétez la définition de la fonction init_liste()dans l’annexe 3. 2) Complétez la définition de la fonction liste_vide()dans l’annexe 3. 3) Complétez la définition de la fonction creat_typecompo()dans l’annexe 3. 4) Complétez la définition de la fonction creat_valcompo() dans l’annexe 3. 5) Complétez la définition de la fonction creat_liste() dans l’annexe 4. 6) Modifiez directement à l’annexe 3, la définition de la fonction edit_liste_gd() pour qu’elle devienne la fonction edit_liste_dg() permettant d’afficher la liste et ses sous-listes en parcourant la liste principale depuis la fin jusqu’au début. Ceci nous permet de vérifier que le double chaînage dans la liste principale a été fait correctement.

3

Liste Principale

"CAPACITE " 5 NULL

Sous-listes contenant les différentes valeurs pour chaque type de composant

2500

10

800

100

20010 NULL

" DIODE "

25 1200 50 400 NULL

"RESISTANCE "

20 200 2000 150 10000 2000 NULL

"SELF "

20 1000 50 100 NULL

"TRANSISTOR "

100 1000 200 500 NULL

" TRIAC "

100 800 NULL

NULL

Figure 1 : Résultat de l’application de la fonction creat_liste() sur l’exemple fourni

4

NOM de l’étudiant :

ANNEXE n°1

#include #include #include #include #include "concatChaines.h"

char * concatChaines(char *ptrChaine1, ...) { char *ptrTmp = NULL; char *ptrRes = NULL; int longueur; va_list listeDeChaines; if(ptrChaine1 == NULL) return NULL; longueur = va_start( ptrRes = if(ptrRes == NULL) { );

}

while (ptrTmp != NULL) {

} va_end( return ptrRes; } );

5

ANNEXE n°2

/*------------------------------------------------------------------------*/ /* FICHIER main.h */ /*------------------------------------------------------------------------*/ /* fichiers d’inclusion */ #include #include #include #include /* Définition des Modèles de structures */ typedef struct{ char *type; float valeur; int quantite; }composant; struct val{ float val; int quantite; struct val *suiv; } ; typedef struct val val_compo; struct type{ char *type; val_compo *debut; struct type *prec; struct type *suiv; }; typedef struct type type_compo; typedef struct{ type_compo *tete; type_compo *ec; type_compo *queue; }liste; /* Prototypes */ composant *recup_fich(int *ptnbcompo); liste *creat_liste(composant *mem, int nbcompo); type_compo *creat_typecompo(composant *comp); val_compo *creat_valcompo(composant *comp); void posit_tete(liste *lp); int liste_vide(liste *lp); int debut_liste(liste *lp); int fin_liste(liste *lp); void edit_liste_gd(liste *lp); void edit_liste_dg(liste *lp);

6

NOM de l’étudiant :

ANNEXE n°3

/*------------------------------------------------------------------------*/ /* FICHIER main.c */ /*------------------------------------------------------------------------*/ #include "main.h" void main() { composant *mem; int nbcompo = 0; liste *lp; /* appel fonction recup_fich() dont la définition ne vous est pas fournie */ mem = recup_fich(&nbcompo); /* appel fonction creat_liste() */ lp = creat_liste(mem, nbcompo); /* édition de la liste ordonnée de gauche à droite puis de droite à gauche */ edit_liste_gd(lp); edit_liste_dg(lp); /* suite du programme */ . . . } /********************************************************************/ liste *init_liste(void) /* initialisation de la liste */ {

} /********************************************************************/ type_compo *creat_typecompo(composant *comp) /* création d’un nouveau type de composant */ {

} /********************************************************************/ /* création d’une nouvelle valeur de composant */ val_compo *creat_valcompo(composant *comp) {

}

7

NOM de l’étudiant :

...

Télécharger au format  txt (10.4 Kb)   pdf (102.8 Kb)   docx (9.1 Kb)  
Voir 5 pages de plus »
Uniquement disponible sur DissertationsEnLigne.com