47 lines
1.7 KiB
Markdown
47 lines
1.7 KiB
Markdown
|
|
# 04 — L'Annuaire
|
||
|
|
|
||
|
|
**Algorithmes :** Tri par insertion + Recherche dichotomique
|
||
|
|
**Difficulté :** Moyen
|
||
|
|
**Durée estimée :** 1h — 1h15
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Contexte
|
||
|
|
|
||
|
|
Vous créez un mini-annuaire de contacts. Il doit toujours rester **trié par nom** pour que la recherche dichotomique fonctionne.
|
||
|
|
|
||
|
|
Chaque fois qu'on ajoute un contact, on l'insère directement à la bonne place (comme dans le tri par insertion). Chaque fois qu'on cherche, on utilise la dichotomie.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Étapes
|
||
|
|
|
||
|
|
### Étape 1 — Afficher l'annuaire
|
||
|
|
Lancez le starter, vérifiez que `afficher_annuaire()` fonctionne.
|
||
|
|
|
||
|
|
### Étape 2 — Implémenter `ajouter_contact(annuaire, contact)`
|
||
|
|
Cette fonction insère le nouveau contact **à la bonne position** pour maintenir l'ordre alphabétique.
|
||
|
|
|
||
|
|
> **Indication** : c'est le principe du tri par insertion, mais appliqué à un seul élément. On parcourt depuis la fin et on décale les contacts dont le nom est alphabétiquement après le nouveau.
|
||
|
|
>
|
||
|
|
> Pour comparer des chaînes alphabétiquement en Python : `"Dupont" < "Martin"` → `True`
|
||
|
|
|
||
|
|
### Étape 3 — Implémenter `rechercher(annuaire, nom)`
|
||
|
|
Recherche dichotomique : retourne le contact (dictionnaire complet) si trouvé, `None` sinon.
|
||
|
|
|
||
|
|
### Étape 4 — Menu interactif
|
||
|
|
Complétez la boucle `menu()` pour que l'utilisateur puisse :
|
||
|
|
- `1` — Afficher tous les contacts
|
||
|
|
- `2` — Ajouter un contact
|
||
|
|
- `3` — Rechercher un contact par nom
|
||
|
|
- `4` — Quitter
|
||
|
|
|
||
|
|
### Étape 5 — Extension (si vous avez le temps)
|
||
|
|
Ajoutez une option `5` pour supprimer un contact par nom (cherchez-le d'abord avec la dichotomie, puis supprimez-le de la liste).
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Ce que vous devez rendre
|
||
|
|
- Le programme avec le menu fonctionnel
|
||
|
|
- Réponse : dans quel cas la dichotomie est-elle inutilisable directement ?
|