TP1
This commit is contained in:
commit
aca877f0f2
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
*/.ycm_extra_conf.py
|
1
TP1/.gitignore
vendored
Normal file
1
TP1/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
annu1
|
9
TP1/Makefile
Normal file
9
TP1/Makefile
Normal file
|
@ -0,0 +1,9 @@
|
|||
all: $(patsubst %.c,%,$(shell ls *.c))
|
||||
|
||||
%: %.c
|
||||
clang -Wall -Wextra $< -o $@
|
||||
|
||||
.PHONY: all clean
|
||||
|
||||
clean:
|
||||
rm *.exe
|
18
TP1/annu.txt
Executable file
18
TP1/annu.txt
Executable file
|
@ -0,0 +1,18 @@
|
|||
Zebulon
|
||||
Michel
|
||||
03
|
||||
04
|
||||
1980
|
||||
0321420156
|
||||
Alibaba
|
||||
Arthur
|
||||
10
|
||||
12
|
||||
1980
|
||||
0452136521
|
||||
Martin
|
||||
Martine
|
||||
25
|
||||
03
|
||||
1985
|
||||
0215329545
|
165
TP1/annu1.c
Normal file
165
TP1/annu1.c
Normal file
|
@ -0,0 +1,165 @@
|
|||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#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;
|
||||
}
|
||||
|
||||
|
Reference in a new issue