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