0% ont trouvé ce document utile (0 vote)
65 vues11 pages

Solutions TP3 Files Statique Dynamique

Le document présente des exercices sur la gestion des files en C, incluant des implémentations de files statiques et dynamiques. Il couvre également des fonctionnalités comme l'enfilage, le défilage, l'affichage, ainsi que la sauvegarde et le chargement de données depuis un fichier. Enfin, un menu interactif permet de manipuler une file dynamique dans un système complet.

Transféré par

yelmaoui
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
65 vues11 pages

Solutions TP3 Files Statique Dynamique

Le document présente des exercices sur la gestion des files en C, incluant des implémentations de files statiques et dynamiques. Il couvre également des fonctionnalités comme l'enfilage, le défilage, l'affichage, ainsi que la sauvegarde et le chargement de données depuis un fichier. Enfin, un menu interactif permet de manipuler une file dynamique dans un système complet.

Transféré par

yelmaoui
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

TP3 – Solutions des exercices sur les Files en C

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define MAX 100

//==============================//

// EXERCICE 1 : File Statique //

//==============================//

typedef struct {

int tab[MAX];

int debut;

int queue;

} FileS;

void initialiserFileS(FileS* f) {

f->debut = 0;

f->queue = -1;

int estVideS(FileS* f) {

return f->debut > f->queue;

int estPleineS(FileS* f) {

return f->queue == MAX - 1;

}
void enfilerS(FileS* f, int val) {

if (!estPleineS(f)) {

f->queue++;

f->tab[f->queue] = val;

printf("%d ajouté à la file statique.\n", val);

} else {

printf("File statique pleine.\n");

int defilerS(FileS* f) {

if (!estVideS(f)) {

int val = f->tab[f->debut++];

return val;

} else {

printf("File statique vide.\n");

return -1;

void afficherFileS(FileS* f) {

if (!estVideS(f)) {

printf("File statique : ");

for (int i = f->debut; i <= f->queue; i++) {

printf("%d ", f->tab[i]);


}

printf("\n");

} else {

printf("File statique vide.\n");

//====================================//

// EXERCICE 2 : Simulation de guichet //

//====================================//

void simulationGuichet() {

FileS file;

initialiserFileS(&file);

enfilerS(&file, 101);

enfilerS(&file, 102);

afficherFileS(&file);

printf("Client servi : %d\n", defilerS(&file));

afficherFileS(&file);

//==============================//

// EXERCICE 3 : File Dynamique //

//==============================//

typedef struct Elem {

int info;

struct Elem* suiv;


} Elem;

typedef struct {

Elem* debut;

Elem* queue;

} FileD;

void initFileD(FileD* f) {

f->debut = f->queue = NULL;

int estVideD(FileD* f) {

return f->debut == NULL;

void enfilerD(FileD* f, int val) {

Elem* nouveau = (Elem*)malloc(sizeof(Elem));

nouveau->info = val;

nouveau->suiv = NULL;

if (estVideD(f)) {

f->debut = f->queue = nouveau;

} else {

f->queue->suiv = nouveau;

f->queue = nouveau;

printf("%d ajouté à la file dynamique.\n", val);


}

int defilerD(FileD* f) {

if (!estVideD(f)) {

Elem* temp = f->debut;

int val = temp->info;

f->debut = f->debut->suiv;

if (f->debut == NULL)

f->queue = NULL;

free(temp);

return val;

} else {

printf("File dynamique vide.\n");

return -1;

void afficherFileD(FileD* f) {

Elem* temp = f->debut;

printf("File dynamique : ");

while (temp != NULL) {

printf("%d -> ", temp->info);

temp = temp->suiv;

printf("NULL\n");

}
void libererFileD(FileD* f) {

while (!estVideD(f)) {

defilerD(f);

//=====================================================//

// EXERCICE 4 : File Dynamique avec Structure Client //

//=====================================================//

typedef struct {

int id;

char nom[30];

} Client;

typedef struct Cellule {

Client info;

struct Cellule* suiv;

} Cellule;

typedef struct {

Cellule* debut;

Cellule* queue;

} FileClient;

void enfilerClient(FileClient* f, Client c) {


Cellule* nouveau = (Cellule*)malloc(sizeof(Cellule));

nouveau->info = c;

nouveau->suiv = NULL;

if (f->debut == NULL)

f->debut = f->queue = nouveau;

else {

f->queue->suiv = nouveau;

f->queue = nouveau;

Client defilerClient(FileClient* f) {

Client c = {-1, ""};

if (f->debut != NULL) {

Cellule* temp = f->debut;

c = temp->info;

f->debut = f->debut->suiv;

if (f->debut == NULL) f->queue = NULL;

free(temp);

return c;

void afficherClients(FileClient* f) {

Cellule* temp = f->debut;

printf("File Clients : \n");


while (temp) {

printf("ID: %d, Nom: %s\n", temp->[Link], temp->[Link]);

temp = temp->suiv;

//============================================================//

// EXERCICE 5 : Sauvegarde et Chargement depuis un fichier //

//============================================================//

void sauvegarderFileD(FileD* f, const char* nomFichier) {

FILE* fp = fopen(nomFichier, "w");

if (!fp) {

printf("Erreur d'ouverture du fichier.\n");

return;

Elem* temp = f->debut;

while (temp) {

fprintf(fp, "%d\n", temp->info);

temp = temp->suiv;

fclose(fp);

printf("File dynamique sauvegardée avec succès.\n");

void chargerFileD(FileD* f, const char* nomFichier) {

FILE* fp = fopen(nomFichier, "r");


if (!fp) {

printf("Erreur de lecture du fichier.\n");

return;

int val;

while (fscanf(fp, "%d", &val) != EOF) {

enfilerD(f, val);

fclose(fp);

printf("File dynamique chargée avec succès.\n");

//=====================================================//

// EXERCICE 6 : - Système Complet //

//=====================================================//

void menuFileSystem() {

FileD f;

initFileD(&f);

int choix, val;

char nomFichier[] = "[Link]";

do {

printf("\n--- MENU ---\n");

printf("1. Enfiler\n");

printf("2. Défiler\n");

printf("3. Afficher\n");
printf("4. Sauvegarder\n");

printf("5. Charger\n");

printf("0. Quitter\n");

printf("Votre choix : ");

scanf("%d", &choix);

switch (choix) {

case 1:

printf("Entrez la valeur : ");

scanf("%d", &val);

enfilerD(&f, val);

break;

case 2:

val = defilerD(&f);

if (val != -1) printf("Valeur retirée : %d\n", val);

break;

case 3:

afficherFileD(&f);

break;

case 4:

sauvegarderFileD(&f, nomFichier);

break;

case 5:

chargerFileD(&f, nomFichier);

break;

case 0:
libererFileD(&f);

printf("Fin du programme.\n");

break;

default:

printf("Choix invalide.\n");

} while (choix != 0);

Vous aimerez peut-être aussi