Browse Source

TP1

master
Geoffrey Frogeye 3 years ago
commit
aca877f0f2
5 changed files with 194 additions and 0 deletions
  1. +1
    -0
      .gitignore
  2. +1
    -0
      TP1/.gitignore
  3. +9
    -0
      TP1/Makefile
  4. +18
    -0
      TP1/annu.txt
  5. +165
    -0
      TP1/annu1.c

+ 1
- 0
.gitignore View File

@@ -0,0 +1 @@
*/.ycm_extra_conf.py

+ 1
- 0
TP1/.gitignore View File

@@ -0,0 +1 @@
annu1

+ 9
- 0
TP1/Makefile View File

@@ -0,0 +1,9 @@
all: $(patsubst %.c,%,$(shell ls *.c))

%: %.c
clang -Wall -Wextra $< -o $@

.PHONY: all clean

clean:
rm *.exe

+ 18
- 0
TP1/annu.txt View File

@@ -0,0 +1,18 @@
Zebulon
Michel
03
04
1980
0321420156
Alibaba
Arthur
10
12
1980
0452136521
Martin
Martine
25
03
1985
0215329545

+ 165
- 0
TP1/annu1.c View 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;
}