This commit is contained in:
Geoffrey Frogeye 2017-03-17 18:10:26 +01:00
parent 1e9f628d4c
commit 93ada685e7
7 changed files with 229 additions and 0 deletions

3
TP7/.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
*.o
*.a
tp7

13
TP7/Makefile Normal file
View file

@ -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

30
TP7/accompttp7.c Normal file
View file

@ -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);
}
}

1
TP7/exemple.txt Normal file
View file

@ -0,0 +1 @@
Tu es un pirate !

94
TP7/listechaines.c Normal file
View file

@ -0,0 +1,94 @@
#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
#include<string.h>
#include <listechaines.h>
//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;
}
}

41
TP7/listechaines.h Normal file
View file

@ -0,0 +1,41 @@
#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
#include<string.h>
#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*);

47
TP7/tp7.c Normal file
View file

@ -0,0 +1,47 @@
#include <stdlib.h>
#include <stdio.h>
#include <listechaines.h>
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;
}