Les listes chaînées C.

cs_ayour Messages postés 1 Date d'inscription mercredi 13 novembre 2002 Statut Membre Dernière intervention 14 novembre 2002 - 14 nov. 2002 à 03:48
cs_thitoune Messages postés 124 Date d'inscription mardi 19 février 2002 Statut Membre Dernière intervention 7 mars 2004 - 15 nov. 2002 à 16:24
veuillez m evoyer une solution pour l ennonce suivant : merci a tt le monde.

Matière exercée: les listes chaînées.

Les services de renseignements possèdent les informations relatives aux pays visités et aux emplois occupés par leurs espions et espionnes. De plus, à chaque trimestre, de nouvelles informations sont mises à jour: mise hors service d'un espion (retraite ou décès), nouvel espion en service, nouvelle localisation d'un espion. Vous devez écrire un programme en C capable de traiter toutes ces informations.

Informations disponibles

Le fichier espion.txt contient les informations sur les espions (chaque ligne comporte trois champs distincts):

Champ 1 (colonnes 1-30) : nom de l'espion ou de l'espionne (maximum de 30 caractères)
Champ 2 (colonnes 31-50) : nom du pays visité (maximum de 20 caractères)
Champ 3 (colonnes 51-79) : emploi occupé (maximum de 29 cararactères)

Ce fichier ne contient aucune erreur. Voici un exemple de quelques lignes de données du fichier:

Bruce Twincam Congo Prof. invite (informatique)
Jef Van Den Nonante Guatemala Avocat de droit international
Callaghan Argentine Prof. invite (informatique)

Le fichier esp2002.txt contient la mise à jour du fichier sur les espions (chaque ligne peut comporter jusqu'à quatre champs distincts):

Champ 1 (colonnes 1-30) : nom de l'espion ou de l'espionne (maximum de 30 caractères)
Champ 2 (colonnes 31-50) : nom du pays visité (maximum de 20 caractères); peut être vide si code est ?E?
Champ 3 (colonnes 51-79) : emploi occupé (maximum de 29 caractères); peut être vide si code est ?E?
Champ 4 (colonnes 80-80) : code de mise à jour (une lettre majuscule)

Le code ?E? indique que l'espion est hors service, le code ?R? indique qu'il s'agit d'un nouvel espion (absent du fichier espion.txt) et le code ?N? indique que l'espion ou l'espionne a été envoyé dans un nouveau pays (soit avec un nouvel emploi, soit avec un emploi déjà occupé).

Ce fichier aussi ne contient aucune erreur. Voici un exemple de quelques lignes de données du fichier:

John Caesar Alexander Beaumont E
Youri Leonide E
Jimmy Bond Madagascar Conseiller en communications R

Vous pouvez importer ces deux fichiers de notre site Web.

Difficultés

Il y a essentiellement deux difficultés.

La première difficulté concerne les données du fichier espion.txt; le nom d'un espion peut apparaître un nombre quelconque de fois. Il est aussi possible que cet espion (ou cette espionne) visite plusieurs fois le même pays ou occupe plusieurs fois le même emploi. Il faut veiller alors à ne pas insérer le pays dans la liste s'il a déjà été visité et/ou à ne pas insérer l'emploi dans la liste si cet emploi a déjà été enregistré pour cet espion (ou cette espionne).

La seconde difficulté concerne les données du fichier esp2002.txt; lorsqu'on rencontre le code ?E?, il faut enlever l'espion (ou l'espionne) de la liste. Il faut toutefois veiller à détruire correctement les sous-listes associées (la liste des pays visités ainsi que la liste des emplois occupés).

Résultats à produire

Après la lecture du fichier espion.txt, votre programme doit produire deux rapports:

? la liste alphabétique des espions (espionnes) avec chaque pays visité (les pays en ordre alphabétique);
? la liste alphabétique des espions (espionnes) avec chaque emploi occupé (les emplois en ordre alphabétique).

Voici un exemple du premier rapport:

ESPION PAYS

Algernon Solvency Chine
Grece
Haiti
Liban
Suede

Allan Barker Albanie
Allemagne
Ethiopie
Japon
Zambie
etc.

Voici un exemple du second rapport:

ESPION EMPLOI

Algernon Solvency Att. commercial (industrie)
Att. militaire (colonel)

Allan Barker Att. militaire (general)

Bruce Twincam Att. militaire (capitaine)
Ingenieur civil
etc.

Après la lecture du fichier esp2002.txt, votre programme doit produire les deux mêmes rapports, avec en plus:

? le nombre d'espions mis hors service;
? le nombre de nouveaux espions.

Ces quatre rapports (listes alphabétiques) différents, ainsi que les nombres concernant les espions hors service et les nouveau espions, doivent être produites dans un fichier appelé nbtries.txt.

Remise des résultats

Les résultats sont remis seulement de manière électronique étant donné la taille des résultats (sinon, ça risque de faire beaucoup trop de pages à imprimer). Ainsi, lors de la remise électronique, on ne doit pas oublier de copier dans le répertoire remise-tp4 le fichier contenant le programme, mais aussi le fichier de résultats infoesp.txt.

Exigences pédagogiques

Vous devez utiliser une liste chaînée pour traiter les informations sur les espions et espionnes. De plus, chaque élément de cette liste comporte aussi deux listes chaînées: une liste pour les pays visités et une liste pour les emplois occupés. Autrement dit, vous aurez la structure de données suivante:

typedef struct pays* PtrPays;
typedef struct pays
{
char nom[...]; /* nom du pays */
PtrPays suivant; /* pointeur sur le prochain pays */
} pays;

typedef struct emploi* PtrEmploi;
typedef struct emploi
{
char nom[...]; /* nom de l'emploi */
PtrEmploi suivant; /* pointeur sur le prochain emploi */
} Emploi;

typedef struct espion* PtrEspion;
typedef struct espion
{
char nom[...]; /* nom de l'espion(ne) */
PtrPays listePays; /* tête de liste des pays visités */
PtrEmploi listeEmploi; /* tête de liste des emplois occupés */
PtrEspion suivant; /* pointeur sur le prochain espion */
} Espion;

PtrEspion listeEspion; /* tête de liste des espions */

Pour trier l'information, il suffit simplement, lors de la lecture, d'insérer les nouvelles informatons au bon endroit (que ce soit pour la liste principale des espions ou des sous-listes associées concernant les pays ou les emplois).

Finalement, votre programme doit être composé d'au moins 10 fonctions (en ne comptant pas la fonction main).

Suggestions

Afin d'éviter les nombreux désagréments de la programmation, il est souhaitable de procéder par étapes. Voici quelques suggestions:

? une première étape est une version simplifiée qui lit les données du fichier espion.txt, et les imprime au fur et à mesure (c'est toujours rassurant d'avoir un programme qui correctement les données...);
? une seconde étape incorpore la construction des listes en découpant bien les étapes (recherche d'un élément dans une liste et insertion d'un élément dans une liste; il est conseillé de faire 3 fonctions de recherche et de faire 3 fonctions d'insertion puisqu'il y a 3 listes différentes);
? une troisième étape est une version simplifiée qui lit les données du fichier esp2002.txt, et les imprime au fur et à mesure (c'est toujours rassurant d'avoir un programme qui correctement les données...);
? finalement, une quatrième étape incorpore la mise-à-jour des listes selon le code spécifié (il faut ici prévoir la destruction d'un élément dans une liste en suivant la même approche que pour la recherche et l'insertion).

1 réponse

cs_thitoune Messages postés 124 Date d'inscription mardi 19 février 2002 Statut Membre Dernière intervention 7 mars 2004 2
15 nov. 2002 à 16:24
Tu ne te fouterai pas un peu de la gueule du monde en voulant sous traiter tes projets d'école sur un site web ?
0
Rejoignez-nous