From 5dbf29e0cd66ba60bfc41b30b8f9ab3cf1663d04 Mon Sep 17 00:00:00 2001 From: Geoffrey Frogeye Date: Tue, 14 Mar 2017 11:18:57 +0100 Subject: [PATCH] =?UTF-8?q?TP4=20R=C3=A9organisation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TP4/.gitignore | 4 +- TP4/listeNonTriees.c | 85 --------------------- TP4/listeTriees.c | 110 --------------------------- TP4/listeTrieesFichier.c | 99 ------------------------ TP4/questions.c | 158 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 159 insertions(+), 297 deletions(-) delete mode 100644 TP4/listeNonTriees.c delete mode 100644 TP4/listeTriees.c delete mode 100644 TP4/listeTrieesFichier.c create mode 100644 TP4/questions.c diff --git a/TP4/.gitignore b/TP4/.gitignore index fbdcb9a..938cb24 100644 --- a/TP4/.gitignore +++ b/TP4/.gitignore @@ -1,3 +1 @@ -listeNonTriees -listeTriees -listeTrieesFichier +questions diff --git a/TP4/listeNonTriees.c b/TP4/listeNonTriees.c deleted file mode 100644 index 2d22c81..0000000 --- a/TP4/listeNonTriees.c +++ /dev/null @@ -1,85 +0,0 @@ -#include -#include -#include - -// 2.1.1 -struct Cellule { - struct Cellule* suiv; - int val; -}; -typedef struct Cellule Cellule; - -// 2.1.2 -void ajout_tete(Cellule** l, int val) { - Cellule* p; - p = malloc(sizeof(Cellule)); - p->val = val; - p->suiv = *l; - *l = p; -} - -// 2.1.3 -void imprimer(Cellule* l) { - if (l == NULL) { - return; - } - while (l->suiv != NULL) { - printf("%d\n", l->val); - l = l->suiv; - } - printf("%d\n", l->val); -} - -// 2.1.4 -bool est_trie(Cellule* l) { - if (l == NULL) { - return true; - } - int temp; - while (l->suiv != NULL) { - temp = l->val; - l = l->suiv; - if (l->val < temp) { - return false; - } - } - return true; -} - -// 2.1.5 -void supprimer_tete(Cellule** l) { - Cellule* p; - p = (*l)->suiv; - free(*l); - *l = p; -} - -// 2.1.6 -void desallouer(Cellule** l) { - if (l == NULL) { - return; - } - desallouer(&(*l)->suiv); - free(*l); -} - -void desallouer2(Cellule** l) { - while ((*l)->suiv != NULL) { - supprimer_tete(l); - } - free(*l); -} - -int main() { - - // 2.1.7 - Cellule* l = NULL; - ajout_tete(&l, 42); - ajout_tete(&l, 43); - ajout_tete(&l, 40); - imprimer(l); - printf("Est triée : %d\n", est_trie(l)); - supprimer_tete(&l); - imprimer(l); - desallouer2(&l); -} diff --git a/TP4/listeTriees.c b/TP4/listeTriees.c deleted file mode 100644 index d7f9db9..0000000 --- a/TP4/listeTriees.c +++ /dev/null @@ -1,110 +0,0 @@ -#include -#include -#include - -struct Cellule { - struct Cellule* suiv; - int val; -}; -typedef struct Cellule Cellule; - -void ajout_tete(Cellule** l, int val) { - Cellule* p; - p = malloc(sizeof(Cellule)); - p->val = val; - p->suiv = *l; - *l = p; -} - -void imprimer(Cellule* l) { - while (l != NULL) { - printf("%d\n", l->val); - l = l->suiv; - } -} - -bool est_trie(Cellule* l) { - if (l == NULL) { - return true; - } - int temp; - while (l->suiv != NULL) { - temp = l->val; - l = l->suiv; - if (l->val < temp) { - return false; - } - } - return true; -} - -void supprimer_tete(Cellule** l) { - Cellule* p; - p = (*l)->suiv; - free(*l); - *l = p; -} - -void desallouer(Cellule** l) { - while ((*l)->suiv != NULL) { - supprimer_tete(l); - } - free(*l); -} - -// 2.2.1 -void inserer(Cellule** p, int val) { - Cellule* l = *p; - if (l == NULL) { - ajout_tete(p, val); - return; - } - while (l->suiv != NULL && l->val < val) { - p = &l->suiv; - l = l->suiv; - } - if (l->val == val) { - return; - } else if (l->val < val) { - p = &l->suiv; - } - ajout_tete(p, val); -} - -int main() { - // Création de la liste - Cellule* l = NULL; - ajout_tete(&l, 59); - ajout_tete(&l, 53); - ajout_tete(&l, 47); - ajout_tete(&l, 43); - ajout_tete(&l, 41); - ajout_tete(&l, 37); - ajout_tete(&l, 31); - ajout_tete(&l, 29); - ajout_tete(&l, 23); - ajout_tete(&l, 19); - ajout_tete(&l, 17); - ajout_tete(&l, 13); - ajout_tete(&l, 11); - ajout_tete(&l, 7); - ajout_tete(&l, 5); - ajout_tete(&l, 3); - ajout_tete(&l, 2); - if (!est_trie(l)) { - printf("C'est pas trié !\n"); - } - - // Test début, millieu et fin - inserer(&l, 0); - inserer(&l, 30); - inserer(&l, 70); - // Test redondance début, millieu et fin - inserer(&l, 2); - inserer(&l, 7); - inserer(&l, 59); - - imprimer(l); - - desallouer(&l); -} diff --git a/TP4/listeTrieesFichier.c b/TP4/listeTrieesFichier.c deleted file mode 100644 index 99c6b39..0000000 --- a/TP4/listeTrieesFichier.c +++ /dev/null @@ -1,99 +0,0 @@ -#include -#include -#include - -struct Cellule { - struct Cellule* suiv; - int val; -}; -typedef struct Cellule Cellule; - -void ajout_tete(Cellule** l, int val) { - Cellule* p; - p = malloc(sizeof(Cellule)); - p->val = val; - p->suiv = *l; - *l = p; -} - -void imprimer(Cellule* l) { - while (l != NULL) { - printf("%d\n", l->val); - l = l->suiv; - } -} - -bool est_trie(Cellule* l) { - if (l == NULL) { - return true; - } - int temp; - while (l->suiv != NULL) { - temp = l->val; - l = l->suiv; - if (l->val < temp) { - return false; - } - } - return true; -} - -void supprimer_tete(Cellule** l) { - Cellule* p; - p = (*l)->suiv; - free(*l); - *l = p; -} - -void desallouer(Cellule** l) { - while ((*l)->suiv != NULL) { - supprimer_tete(l); - } - free(*l); -} - -void inserer(Cellule** p, int val) { - Cellule* l = *p; - if (l == NULL) { - ajout_tete(p, val); - return; - } - while (l->suiv != NULL && l->val < val) { - p = &l->suiv; - l = l->suiv; - } - if (l->val == val) { - return; - } else if (l->val < val) { - p = &l->suiv; - } - ajout_tete(p, val); -} - -int main(int argc, char* argv[]) { - if (argc != 2) { - printf("Usage : %s FICHIER_ENTREE\n", argv[0]); - return EXIT_FAILURE; - } - - FILE* fp; - fp = fopen(argv[1], "r"); - if (fp == NULL) { - printf("Impossible d'ouvrir le fichier %s.\n", argv[1]); - return EXIT_FAILURE; - } - - Cellule* l = NULL; - int val; - while (fscanf(fp, "%d", &val) != EOF) { - inserer(&l, val); - } - - imprimer(l); - if (!est_trie(l)) { - printf("Erreur: La liste n'est pas correctement triée.\n"); - return EXIT_FAILURE; - } - - return EXIT_SUCCESS; -} diff --git a/TP4/questions.c b/TP4/questions.c new file mode 100644 index 0000000..dccb852 --- /dev/null +++ b/TP4/questions.c @@ -0,0 +1,158 @@ +#include +#include +#include + +// 2.1.1 +struct Cellule { + struct Cellule* suiv; + int val; +}; +typedef struct Cellule Cellule; + +// 2.1.2 +void ajout_tete(Cellule** l, int val) { + Cellule* p; + p = malloc(sizeof(Cellule)); + p->val = val; + p->suiv = *l; + *l = p; +} + +// 2.1.3 +void imprimer(Cellule* l) { + while (l != NULL) { + printf("%d\n", l->val); + l = l->suiv; + } +} + +// 2.1.4 +bool est_trie(Cellule* l) { + if (l == NULL) { + return true; + } + int temp; + while (l->suiv != NULL) { + temp = l->val; + l = l->suiv; + if (l->val < temp) { + return false; + } + } + return true; +} + +// 2.1.5 +void supprimer_tete(Cellule** l) { + Cellule* p; + p = (*l)->suiv; + free(*l); + *l = p; +} + +// 2.1.6 +// Méthode itérative +void desallouer(Cellule** l) { + Cellule* next; + Cellule* current = *l; + while (current != NULL) { + next = current->suiv; + free(current); + current = next; + } +} + +// Méthode itérative, réutilise supprimer_tete +void desallouer2(Cellule** l) { + if (*l == NULL) { + return; + } + while ((*l)->suiv != NULL) { + supprimer_tete(l); + } + free(*l); +} + +// Méthode réccursive +void desallouer3(Cellule** l) { + if (*l == NULL) { + return; + } + desallouer(&(*l)->suiv); + free(*l); +} + + +// 2.2.1 +void inserer(Cellule** p, int val) { + Cellule* l = *p; + if (l == NULL) { + ajout_tete(p, val); + return; + } + while (l->suiv != NULL && l->val < val) { + p = &l->suiv; + l = l->suiv; + } + if (l->val == val) { + return; + } else if (l->val < val) { + p = &l->suiv; + } + ajout_tete(p, val); +} + +// 2.2.2 +Cellule* lire_fichier(FILE * fp) { + Cellule* l = NULL; + int val; + while (fscanf(fp, "%d", &val) != EOF) { + inserer(&l, val); + } + return l; +} + +int main(int argc, char* argv[]) { + if (argc != 2) { + printf("Mode test de la partie 2.1.\n"); + printf("(pour tester la partie 2.2, utilisez : %s FICHIER_ENTREE)\n", argv[0]); + + // 2.1.7 + Cellule* l = NULL; + ajout_tete(&l, 42); + ajout_tete(&l, 40); + ajout_tete(&l, 43); + imprimer(l); + printf("Est triée : %d\n", est_trie(l)); + supprimer_tete(&l); + imprimer(l); + printf("Est triée : %d\n", est_trie(l)); + desallouer(&l); + + } else { + printf("Mode test de la partie 2.2.\n"); + printf("(pour tester la partie 2.1, 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; + } + + Cellule * l = lire_fichier(fp); + + fclose(fp); + + imprimer(l); + if (est_trie(l)) { + printf("La liste est correctement triée.\n"); + } else { + printf("Erreur: La liste n'est pas correctement triée.\n"); + return EXIT_FAILURE; + } + desallouer(&l); + } + + return EXIT_SUCCESS; +}