commit aca877f0f29d55ecb439160a2d9303fd2f405b3f Author: Geoffrey Frogeye Date: Thu Feb 16 21:02:28 2017 +0100 TP1 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c13e005 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*/.ycm_extra_conf.py diff --git a/TP1/.gitignore b/TP1/.gitignore new file mode 100644 index 0000000..e468e91 --- /dev/null +++ b/TP1/.gitignore @@ -0,0 +1 @@ +annu1 diff --git a/TP1/Makefile b/TP1/Makefile new file mode 100644 index 0000000..a216135 --- /dev/null +++ b/TP1/Makefile @@ -0,0 +1,9 @@ +all: $(patsubst %.c,%,$(shell ls *.c)) + +%: %.c + clang -Wall -Wextra $< -o $@ + +.PHONY: all clean + +clean: + rm *.exe diff --git a/TP1/annu.txt b/TP1/annu.txt new file mode 100755 index 0000000..83be247 --- /dev/null +++ b/TP1/annu.txt @@ -0,0 +1,18 @@ +Zebulon +Michel +03 +04 +1980 +0321420156 +Alibaba +Arthur +10 +12 +1980 +0452136521 +Martin +Martine +25 +03 +1985 +0215329545 diff --git a/TP1/annu1.c b/TP1/annu1.c new file mode 100644 index 0000000..2fafbf4 --- /dev/null +++ b/TP1/annu1.c @@ -0,0 +1,165 @@ +#include +#include +#include + +#define TAILLE_CHAINE 100 +#define MAX_PERSONNES 10 + +typedef struct { + int j, m, a; +} Date; + +typedef struct { + char nom[TAILLE_CHAINE]; + char prenom[TAILLE_CHAINE]; + char telephone[TAILLE_CHAINE]; + Date naissance; +} Personne; + +typedef struct { + Personne personnes[MAX_PERSONNES]; + int nb; +} Annuaire; + +Date lire_date() { + Date d; + printf("Jour ? "); + scanf("%d", &d.j); + printf("Mois ? "); + scanf("%d", &d.m); + printf("Année ? "); + scanf("%d", &d.a); + return d; +} + +void affiche_date(Date d) { + printf("%2d/%2d/%4d\n", d.j, d.m, d.a); +} + +int lire_personne(Personne* p) { + printf("Nom ? "); + int res = scanf("%s", p->nom); + if (res == EOF) { + return 1; + } + printf("Prénom ? "); + scanf("%s", p->prenom); + printf("Date de naissance ?\n"); + p->naissance = lire_date(); + printf("N° de téléphone ? "); + scanf("%s", p->telephone); + return 0; +} + +void affiche_personne(Personne p) { + printf("Prénom : %s\n", p.prenom); + printf("Nom : %s\n", p.nom); + printf("Téléphone : %s\n", p.telephone); + printf("Naissance :"); + affiche_date(p.naissance); +} + +void construire_annuaire(Annuaire* a) { + int i, res; + for (i = 0; i < MAX_PERSONNES; i++) { + // res = lire_personne(&(*a)[i]); + res = lire_personne(&a->personnes[i]); + if (res != 0) { + a->nb = i; + break; + } + } +} + +void afficher_annuaire(Annuaire* a) { + int i; + for (i = 0; i < a->nb; i++) { + affiche_personne(a->personnes[i]); + } +} + +char compare_dates(Date d1, Date d2) { + if (d1.j == d2.j && d1.m == d2.m && d1.a == d2.a) { + return 0; + } else if (d1.a > d2.a || (d1.a == d2.a && (d1.m > d2.m || (d1.m == d2.m && d1.j > d2.j)))) { + return 1; + } else { + return -1; + } +} + +char compare_nom(Personne p1, Personne p2) { + int nomComp = strcmp(p1.nom, p2.nom); + if (nomComp == 0) { + return strcmp(p1.prenom, p2.prenom); + } else { + return nomComp; + } +} + +void triDate(Annuaire* annuaire) { + int i, j, trie; + Personne temp; + for (i = annuaire->nb - 1; i >= 1; i--) { + trie = 1; + for (j = 0; j <= i - 1; j++) { + if (compare_dates(annuaire->personnes[j+1].naissance, annuaire->personnes[j].naissance) < 0) { + temp = annuaire->personnes[j+1]; + annuaire->personnes[j+1] = annuaire->personnes[j]; + annuaire->personnes[j] = temp; + trie = 0; + } + } + if (trie) { + return; + } + } +} + +void triNom(Annuaire* annuaire) { + int i, j, trie; + Personne temp; + for (i = annuaire->nb - 1; i >= 1; i--) { + trie = 1; + for (j = 0; j <= i - 1; j++) { + if (compare_nom(annuaire->personnes[j+1], annuaire->personnes[j]) < 0) { + temp = annuaire->personnes[j+1]; + annuaire->personnes[j+1] = annuaire->personnes[j]; + annuaire->personnes[j] = temp; + trie = 0; + } + } + if (trie) { + return; + } + } +} + +int main() { + + // Date d; + // d = lire_date(); + // affiche_date(d); + + // Personne d; + // lire_personne(&d); + // affiche_personne(d); + + Annuaire a; + construire_annuaire(&a); + + printf("\n# Pas de tri\n"); + afficher_annuaire(&a); + + printf("\n# Trié par nom\n"); + triNom(&a); + afficher_annuaire(&a); + + printf("\n# Trié par date\n"); + triDate(&a); + afficher_annuaire(&a); + + return EXIT_SUCCESS; +} + +