algo

Télécharger au format txt, pdf ou txt
Télécharger au format txt, pdf ou txt
Vous êtes sur la page 1sur 5

#include<stdio.

h>
#include<stdlib.h>
#include<string.h>

typedef struct livre {


char titre[100];
char auteur[100];
struct livre *suiv; // pointeur vers l'enregistrement suivant
} livre;

typedef struct categorie {


char nom[100];
livre *listes_livre; // liste d'enregistrements de livre
struct categorie *suiv; // pointeur vers la catégorie suivante
} categorie;

// Déclaration du type B
typedef categorie* B;

// Ajout d'un livre à une liste de livres


void ajouter_livre(livre **listes_livre) {
char rep[4];
livre *nouveau_livre; // pointeur de type livre pour la liste de livres
do {
// Allocation de mémoire pour le nouveau livre
nouveau_livre = (livre*)malloc(sizeof(livre));
printf("Entrez le titre du livre : ");
scanf("%s", nouveau_livre->titre);
printf("Entrez le nom de l'auteur du livre : ");
scanf("%s", nouveau_livre->auteur);
nouveau_livre->suiv = *listes_livre; // Ajout du nouveau livre en tête de
la liste
*listes_livre = nouveau_livre;
printf("Voulez-vous ajouter un autre livre ? (oui/non) : ");
scanf("%s", rep);
} while (strcmp(rep, "oui") == 0 || strcmp(rep, "non") == 0);
}

// Ajout d'une nouvelle catégorie


void insererCategorie(categorie *tete, char nom) {
categorie nouvelle_categorie = (categorie)malloc(sizeof(categorie));
strcpy(nouvelle_categorie->nom, nom);
nouvelle_categorie->listes_livre = NULL; // Initialisation de la liste de
livres à NULL
nouvelle_categorie->suiv = NULL;

if (*tete == NULL) {
*tete = nouvelle_categorie; // Si la liste est vide, la nouvelle catégorie
devient la tête
} else {
// Ajout de la nouvelle catégorie à la fin de la liste
categorie *temp = *tete;
while (temp->suiv != NULL) {
temp = temp->suiv;
}
temp->suiv = nouvelle_categorie;
}
}
// Création d'une bibliothèque avec un nombre donné de catégories
categorie* creer_bib(int nb_categorie) {
categorie* B = NULL;
int i;
for( i = 0; i < nb_categorie; i++) {
char nom_cat[100];
printf("Entrez le nom de la catégorie : ");
scanf("%s", nom_cat);
insererCategorie(&B, nom_cat);
ajouter_livre(&(B->listes_livre)); // Ajout de livres à la première
catégorie
}
return B;
}

// Recherche d'une catégorie par son nom


categorie* recherche_categorie(categorie *B, char *nom_categorie) {
categorie *p = B;
while(p != NULL) {
if(strcmp(p->nom, nom_categorie) == 0) {
return p;
}
p = p->suiv;
}
return NULL;
}

// Affichage des livres d'une catégorie donnée


void affiche_livres_categorie(categorie *B, char *nom_categorie) {
categorie *cat = recherche_categorie(B, nom_categorie);
if (cat == NULL) {
printf("La catégorie \"%s\" n'existe pas.\n", nom_categorie);
return;
}
printf("Livres de la catégorie \"%s\":\n", nom_categorie);
livre *liv = cat->listes_livre;
while (liv != NULL) {
printf("Titre : %s, Auteur : %s\n", liv->titre, liv->auteur);
liv = liv->suiv;
}
}

// Affichage de tous les livres de toutes les catégories


void affiche_bibliotheque(categorie *B) {
categorie *p = B;
while (p != NULL) {
affiche_livres_categorie(B, p->nom);
p = p->suiv;
}
}

// Fonction principale
int main() {
categorie *B = NULL;
int choix;
char nom_cat[100];
char nom_cat_livre[100];
char nom_categorie[100];
do {
// Affichage du menu
printf("\nMenu :\n");
printf("1. Ajouter une catégorie\n");
printf("2. Ajouter un livre à une catégorie existante\n");
printf("3. Afficher les livres d'une catégorie\n");
printf("4. Afficher toute la bibliothèque\n");
printf("0. Terminer le programme\n");
printf("Votre choix : ");
scanf("%d", &choix);

switch (choix) {
case 1:

printf("Entrez le nom de la catégorie : ");


scanf("%s", nom_cat);
insererCategorie(&B, nom_cat);
break;
case 2:

printf("Entrez le nom de la catégorie pour ajouter un livre : ");


scanf("%s", nom_cat_livre);
affiche_livres_categorie(B, nom_cat_livre);
break;
case 3:
// Demander le nom de la catégorie à afficher

printf("Entrez le nom de la catégorie : ");


scanf("%s", nom_categorie);
affiche_livres_categorie(B, nom_categorie);
break;
case 4:
affiche_bibliotheque(B);
break;
case 0:
printf("Fin du programme.\n");
break;
default:
printf("Choix invalide. Veuillez choisir une option valide.\n");
}
} while (choix != 0);

return 0;
}
**********************************
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct vol {
char ind[30]; // Indicatif du vol
int mal;
};

struct cellule {
struct vol v;
struct cellule *suce; // Pointeur sur la cellule suivante dans la file
};
struct file {
struct cellule *tete;
struct cellule *queue;
};

// Fonction pour saisir un vol


struct vol Saisie_vol() {
struct vol v;
printf("Indicatif du vol : ");
scanf("%s", v.ind);
if(strcmp(v.ind,"0")!=0){
printf("Présence de malade (1 pour oui, 0 pour non) : ");
scanf("%d", &v.mal);}
return v;
}

void Creer_file(struct file *F) {


struct vol v;
printf("Saisie des vols (s'arrête si l'indicatif est zéro) :\n");
do {
v = Saisie_vol();
if (strcmp(v.ind, "0") != 0) {
struct cellule* nouveau = (struct cellule*)malloc(sizeof(struct cellule));
nouveau->v = v;
nouveau->suce = NULL;
if (F->queue == NULL) {
F->tete = F->queue = nouveau;
} else {
F->queue->suce = nouveau;
F->queue = nouveau;
}
}
} while (strcmp(v.ind, "0") != 0);
}

// Fonction pour afficher les vols de la file et leur nombre


void Affiche(struct file F) {
printf("Vols dans la file :\n");
int nombre_vols = 0;
struct cellule *courant = F.tete;
while (courant != NULL) {
nombre_vols++;
printf("Indicatif : %s, Malade : %s\n", courant->v.ind, (courant->v.mal ?
"Oui" : "Non"));
courant = courant->suce;
}
printf("Nombre total de vols : %d\n", nombre_vols);
}
void Enfiler(struct file *F, struct vol v) {
struct cellule *nouvelle_cellule = (struct cellule *)malloc(sizeof(struct
cellule));
if (nouvelle_cellule == NULL) {
printf("Erreur : mémoire insuffisante\n");
return;
}
nouvelle_cellule->v = v;
nouvelle_cellule->suce = NULL;
if (F->tete == NULL) {
F->tete = nouvelle_cellule;
F->queue = nouvelle_cellule;
} else {
F->queue->suce = nouvelle_cellule;
F->queue = nouvelle_cellule;
}
}
// Fonction pour créer une file de priorité contenant les vols avec malade à bord
struct file Priorite(struct file F) {
struct file FP;
FP.tete = FP.queue = NULL;
struct cellule *courant = F.tete;
while (courant != NULL) {
if (courant->v.mal == 1) {
Enfiler(&FP,courant->v);
}
courant = courant->suce;
}
return FP;
}

int main() {
struct file F;
F.tete = F.queue = NULL;

// Création de la file de vols


printf("=== Création de la file de vols ===\n");
Creer_file(&F) ;
Affiche(F);

// Création de la file de priorité


printf("\n=== Création de la file de priorité ===\n");
struct file FP = Priorite(F);
Affiche(FP);

return 0;
}

Vous aimerez peut-être aussi