TP7
This commit is contained in:
parent
1e9f628d4c
commit
93ada685e7
3
TP7/.gitignore
vendored
Normal file
3
TP7/.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
*.o
|
||||
*.a
|
||||
tp7
|
13
TP7/Makefile
Normal file
13
TP7/Makefile
Normal 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
30
TP7/accompttp7.c
Normal 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
1
TP7/exemple.txt
Normal file
|
@ -0,0 +1 @@
|
|||
Tu es un pirate !
|
94
TP7/listechaines.c
Normal file
94
TP7/listechaines.c
Normal 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
41
TP7/listechaines.h
Normal 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
47
TP7/tp7.c
Normal 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;
|
||||
}
|
Reference in a new issue