▸Objectifs
- Parcours d'un ensemble de données (une collection).
- Algorithme classique : recherche d'extremum parmi une collection.
- Idem, en présence d'un type article.
▸Exercices
Exercice 1 : Affichage et recherche d'extremum, sans type article.
- Copiez chez vous le programme suivant : mission5.adb et les deux fichiers de l'acteur : rois.ads et rois.adb
Pour toute la suite, vous n'avez pas le droit de modifier l'acteur : ne touchez pas à rois.adb. - Écrivez une procédure sans argument
Tout_Afficher
qui affiche la liste de tous les rois avec leur date de règne.
- Testez en exécutant votre programme : il doit afficher
- Clodion le Chevelu 429 - 447
- Mérovée 447 - 456
- Childéric Ier 457 - 481
- ...
- Écrivez maintenant une fonction sans argument
Plus_Long
qui renvoie le numéro du roi ayant régné le plus longtemps. Votre fonction doit continuer à fonctionner si, à l'avenir, la liste des rois de France est remplacée par la liste des rois d'Angleterre. - Pour tester, affichez le nom et les dates du roi ayant régné le plus longtemps. Comme vous connaissez bien votre Histoire, vous devriez savoir à l'avance ce qui va être affiché.
- Écrire une fonction qui trouve le roi ayant régné le moins longtemps. Votre fonction doit continuer à fonctionner si, à l'avenir, la liste est modifiée.
Auto-correction
- Vérifiez que vos fonctions (qui renvoient le numéro du roi ayant régné le plus longtemps ou le moins longtemps) n'affichent rien et renvoient bien un entier représentant un numéro de roi et non pas la durée de son règne.
- Si vous avez suffisamment travaillé, comparez votre travail avec un début de solution : soluce5.adb.

Exercice 1 bis : Extremum avec filtrage.
- En restant sur l'acteur Rois de l'exercice 1, écrire une fonction
Cette fonction reçoit en argument deux années délimitant une période (par exemple 1620-1810).
On ne s'intéresse qu'aux rois ayant régné -ne serait-ce qu'un jour- pendant cette période (y compris si le règne a commencé avant la période, ou s'il a terminé après la période).
Parmi tous ces rois, renvoyer le nom de celui dont le règne a été le plus long (même si une partie de son règne est en dehors de la période).
Si la période ne contient aucun roi, renvoyer la chaîne "Aucun roi".
Auto-correction
- Entre 400 et 850, c'est Childebert Ier.
- Entre 559 et 850, c'est Charlemagne.
- Entre 800 et 1200, c'est Philippe 1er.
- Entre 1880 et 2020, aucun roi.
- Si vous avez suffisamment travaillé, comparez votre travail avec un début de solution : soluce4.adb.

Exercice 2 : Exercice complet sur une collection (avec type article).
- Copiez chez vous le programme suivant : mission5b.adb et les deux fichiers de l'acteur : villes.ads et villes.adb (clic-droit, enregistrer...)
Pour toute la suite, vous n'avez pas le droit de modifier l'acteur : ne touchez pas à villes.adb - Écrivez une procédure
Afficher_Ville
qui respecte le schéma suivant :
Cette procédure affiche les infos reçues en argument : nom de la ville, code postal, et population 2010. - Écrivez une procédure
Afficher_Departement
qui reçoit en argument un numéro de département et affiche les infos de toutes les communes du département.
- Écrivez une fonction sans argument
Desert
qui renvoie le numéro de la commune ayant le moins d'habitants en 2010. Pour tester, afficher les infos de cette commune (vous trouverez une commune de haute-garonne avec 5 habitants). - Exercice suprême : écrivez une fonction
Fiche_Departement
qui respecte le schéma suivant :
Cette fonction reçoit en argument un numéro de département et renvoie un article de type T_Fiche comprenant : - Le numéro du département
- Le code postal de la ville la plus peuplée du département, 0 si le département est inconnu.
- La population 2010 du département (la somme des populations des communes du département).
- La population 1999 du département.
- La surface du département.
- Les coordonnées moyennes du département, calculées en pondérant chaque coordonnée de commune par sa surface.
- Les altitudes les plus basses et les plus hautes de chaque département.
Pour tester, voyez la procédure suivante. - Écrivez une procédure
Tester_Departements
qui, pour tous les départements, affiche les informations recueillies par Fiche_Departement. Vous pourrez vérifier la vraisemblance des résultats sur wikipedia.
Auto-correction
- Vérifiez que la fonction Desert n'affiche rien et renvoie bien un entier représentant un numéro de ville.
- Voici un corrigé : soluce5b.adb
▸Bilan
- Vous savez exploiter les informations contenues dans une collection de données, y compris en présence d'un type article.
- Vous appliquez les algorithmes classiques sur cette collection : recherche d'un min, max, calcul d'une moyenne.