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

StarExercice 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
    ForbiddenPour 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.Procedure Tout_Afficher
  • 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.
StarStarExercice 1 bis : Extremum avec filtrage.
  • En restant sur l'acteur Rois de l'exercice 1, écrire une fonction Function Plus_Long_PeriodeCette 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.
StarStarExercice 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...)
    ForbiddenPour 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 :Procedure Afficher_VilleCette 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.Procedure Afficher_Departement
  • É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 :Function Fiche_DepartementCette 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

Acteurs utilisés

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.