From 93ada685e7e8a370890a2600e09459abbf32a2f4 Mon Sep 17 00:00:00 2001 From: Geoffrey Frogeye Date: Fri, 17 Mar 2017 18:10:26 +0100 Subject: [PATCH] TP7 --- TP7/.gitignore | 3 ++ TP7/Makefile | 13 +++++++ TP7/accompttp7.c | 30 +++++++++++++++ TP7/exemple.txt | 1 + TP7/listechaines.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++ TP7/listechaines.h | 41 ++++++++++++++++++++ TP7/tp7.c | 47 +++++++++++++++++++++++ 7 files changed, 229 insertions(+) create mode 100644 TP7/.gitignore create mode 100644 TP7/Makefile create mode 100644 TP7/accompttp7.c create mode 100644 TP7/exemple.txt create mode 100644 TP7/listechaines.c create mode 100644 TP7/listechaines.h create mode 100644 TP7/tp7.c diff --git a/TP7/.gitignore b/TP7/.gitignore new file mode 100644 index 0000000..19327d9 --- /dev/null +++ b/TP7/.gitignore @@ -0,0 +1,3 @@ +*.o +*.a +tp7 diff --git a/TP7/Makefile b/TP7/Makefile new file mode 100644 index 0000000..9114813 --- /dev/null +++ b/TP7/Makefile @@ -0,0 +1,13 @@ +tp7: tp7.o liblistechaines.a + gcc $^ -o $@ + +%.o: %.c + gcc -c $^ -o $@ + +lib%.a: %.o + ar rcs $@ $^ + +.PHONY: clean + +clean: + rm -r lib*.a *.o tp7 diff --git a/TP7/accompttp7.c b/TP7/accompttp7.c new file mode 100644 index 0000000..1440508 --- /dev/null +++ b/TP7/accompttp7.c @@ -0,0 +1,30 @@ +//PA, fichiers fournis pour le tp7. + +//ajout d'un mot dans une liste chainee triee +void ajout_alphab(Liste *pl, char mot[MAXSIZE]) +{ + if ( (*pl==NULL) || (strcmp(mot, (*pl)->val) < 0) ) { // empty list or mot < head => new head + ajout_tete(pl,mot); + } + else + { + if (strcmp(mot, (*pl)->val) > 0) // mot > head => add in next's + { + ajout_alphab(&(*pl)->suiv,mot); + } // else mot already in list + } +} + + +//chargement à partir d'un fichier de mots. -> liste ordonnee +void charge_fichier(FILE *fp, Liste *pl) +{ + char mot[MAXSIZE]; + fscanf(fp, "%s", mot); + + while (!feof(fp)) + { + ajout_alphab(pl,mot); + fscanf(fp, "%s", mot); + } +} diff --git a/TP7/exemple.txt b/TP7/exemple.txt new file mode 100644 index 0000000..9ae4782 --- /dev/null +++ b/TP7/exemple.txt @@ -0,0 +1 @@ +Tu es un pirate ! diff --git a/TP7/listechaines.c b/TP7/listechaines.c new file mode 100644 index 0000000..3bcbee6 --- /dev/null +++ b/TP7/listechaines.c @@ -0,0 +1,94 @@ +#include +#include +#include +#include + +#include + +//Affichage de la liste en ligne +void afficher_liste(Liste l) { + while (l != NULL) { + printf("%s\n", l->val); + l = l->suiv; + } +} + +//Ajout d'un mot en tete de la liste +void ajout_tete(Liste *l, char *mot) { + Cellule* p; + p = malloc(sizeof(Cellule)); + strncpy(p->val, mot, MAXSIZE); + p->suiv = *l; + *l = p; +} + +//Suppression du mot en tete de la liste +void supp_tete(Liste *l) { + Cellule * p; + p = (*l)->suiv; + free(*l); + *l = p; +} + +//Ajout un mot dans une liste supposee +// triee dans l'ordre alphabetique +void ajout_alphab(Liste *p, char *mot) { + Cellule* l = *p; + if (l == NULL) { + ajout_tete(p, mot); + return; + } + while (l->suiv != NULL && l->val < mot) { + p = &l->suiv; + l = l->suiv; + } + int ret = strcmp(l->val, mot); + if (ret == 0) { + return; + } else if (ret < 0) { + p = &l->suiv; + } + ajout_tete(p, mot); +} + +//Dit si un mot donne est dans la liste +//pas forcement triee +bool appartient(Liste l ,char *mot) { + while (l != NULL) { + if (strcmp(l->val, mot) == 0) { + return true; + } + l = l->suiv; + } + return false; +} + +//Donne la taille de la liste. +int taille(Liste l) { + int taille = 0; + while (l != NULL) { + taille++; + l = l->suiv; + } + return taille; +} + +//construit une liste triee a partir d'un fichier +void charge_fichier(FILE * fp, Liste *l) { + char mot[MAXSIZE]; + while (fscanf(fp, "%s", mot) != EOF) { + ajout_alphab(l, mot); + } +} + +//Destruction de Liste. +void detruire_liste(Liste* l) { + Cellule* next; + Cellule* current = *l; + while (current != NULL) { + next = current->suiv; + free(current); + current = next; + } +} + diff --git a/TP7/listechaines.h b/TP7/listechaines.h new file mode 100644 index 0000000..8c5d8da --- /dev/null +++ b/TP7/listechaines.h @@ -0,0 +1,41 @@ +#include +#include +#include +#include + +#define MAXSIZE 30 + +//Declaration de liste chainee de chaines de caracteres +typedef struct cell { + char val[MAXSIZE]; + struct cell * suiv; +} Cellule; + +typedef Cellule * Liste; + +//Affichage de la liste en ligne +void afficher_liste(Liste); + +//Ajout d'un mot en tete de la liste +void ajout_tete(Liste *, char *mot); + +//Suppression du mot en tete de la liste +void supp_tete(Liste *); + +//Ajout un mot dans une liste supposee +// triee dans l'ordre alphabetique +void ajout_alphab(Liste *, char *); + +//Dit si un mot donne est dans la liste +//pas forcement triee +bool appartient(Liste ,char *); + +//Donne la taille de la liste. +int taille(Liste); + +//construit une liste triee a partir d'un fichier +void charge_fichier(FILE *, Liste *); + +//Destruction de Liste. +void detruire_liste(Liste*); + diff --git a/TP7/tp7.c b/TP7/tp7.c new file mode 100644 index 0000000..62b594e --- /dev/null +++ b/TP7/tp7.c @@ -0,0 +1,47 @@ +#include +#include +#include + +int main(int argc, char* argv[]) { + Liste l = NULL; + + if (argc == 2) { + printf("Chargement du fichier proposé.\n"); + printf("(pour charger la liste intégrée, utilisez : %s)\n", argv[0]); + FILE *fp; + fp = fopen(argv[1], "r"); + if (fp == NULL) { + printf("Impossible d'ouvrir le fichier %s.\n", argv[1]); + return EXIT_FAILURE; + } + charge_fichier(fp, &l); + } else { + printf("Chargement de la liste intégrée."); + printf("(pour charger votre propre liste, utilisez : %s FICHIER_ENTREE)\n", argv[0]); + + ajout_alphab(&l, "allez"); + ajout_alphab(&l, "vous"); + ajout_alphab(&l, "comment"); + ajout_alphab(&l, "Bonjour"); + ajout_alphab(&l, "?"); + } + + + supp_tete(&l); + + printf("\n"); + afficher_liste(l); + printf("\n"); + + if (appartient(l, "Bonjour")) { + printf("La liste a dit Bonjour.\n"); + } else { + printf("La liste n'a pas dit Bonjour.\n"); + } + + printf("La liste contient %d éléments.\n", taille(l)); + + detruire_liste(&l); + + return EXIT_SUCCESS; +}