Exercices sur les structures imbriquées
Structure imbriquée simple (tableau et record).
- Copiez l'acteur tennis.ads et tennis.adb
- Copiez le programme vide mission1.adb
Question 1
- Écrire une procédure Afficher qui reçoit en argument un classement (de type T_Classement) et qui affiche tous les joueurs de ce classement de la manière suivante :

1 : Novak Djokovic SRB = 2 : Andy Murray GBR = 3 : Roger Federer SUI = 4 : David Ferrer ESP + 1 5 : Rafael Nadal ESP -1 6 : Tomas Berdych CZE = 7 : Jo-Wilfried Tsonga FRA + 1 8 : Juan Martin Del Potro ARG -1 9 : Richard Gasquet FRA = 10 : Stanislas Wawrinka SUI = 11 : Tommy Haas GER + 3 12 : Marin Cilic CRO -1 etc.
- Lorsque l'évolution (Move) vaut 0, afficher un égal (=). Bien mettre un + lorsque c'est positif.
- Pour tester, afficher les deux tableaux contenus dans l'acteur.
Question 2
- Écrire une fonction Chercher qui reçoit en argument un classement (de type T_Classement) et un pays (une chaîne) et qui renvoie une valeur de type T_Resultat .
- La fonction renvoie le numéro du premier joueur de la liste provenant du pays demandé. Si aucun joueur n'est trouvé, la fonction renvoie une valeur T_Resultat avec Succes valant False. Sinon, la fonction renvoie une valeur T_Resultat contenant le numéro du joueur et Succes valant True.
- La fonction doit être efficace et ne pas parcourir toute la liste lorsque le joueur est trouvé.
- Mettez au point une procédure de test que l'on pourrait invoquer comme ceci :
Tester_Chercher(Tennis.Joueurs, "FRA") ;et qui afficherait les résultats suivants :
Tester_Chercher(Tennis.Joueurs, "USA") ;
Tester_Chercher(Tennis.Joueuses, "ITA") ;
Tester_Chercher(Tennis.Joueuses, "INSA") ;Chercher un joueur de FRA Trouvé : 7 Jo-Wilfried Tsonga Chercher un joueur de USA Trouvé : 19 Sam Querrey Chercher un joueur de ITA Trouvé : 5 Sara Errani Chercher un joueur de INSA Introuvable.
Question 3
- Écrire une fonction Precede qui reçoit en argument un classement (T_Classement) et qui renvoie un nouveau tableau de type T_Classement correspondant au classement précédant le classement en cours.
- Pour construire le classement précédent, utiliser les informations Move de chaque joueur indiquant de combien de places il s'est amélioré.
- Certains joueurs étant sortis du classement, les cases indéterminées seront remplies avec un joueur au nom indéterminé (voir la constante Inconnu définie dans l'acteur Tennis)
- Dans le tableau retourné, mettre la valeur de Move à 0 pour tous les joueurs.
- Tester en affichant les classements précédant les deux classements donnés dans l'acteur.
La solution ne vous sera utile que si vous vous êtes suffisamment confrontés au problème. La voici : mission4.adb
Structure imbriquée complexe.
- Copiez les deux fichiers de l'acteur calendrier.ads et calendrier.adb
- Copiez le programme vide mission1.adb
Question 1 : compter le nombre de jours
- Écrivez une fonction Compter qui reçoit en argument un calendrier (de type T_Annee) et compte le nombre total de jours de ce calendrier.
- Testez avec l'année 2042 (la seule fournie dans l'acteur) et affichez le résultat. Vous savez ainsi si votre fonction est correcte.
Question 2 : trouver les solstices
- Écrivez une fonction duree_plus_grande qui reçoit en argument deux durées et qui renvoie le booléen vrai si la première durée est strictement supérieure à la seconde durée.
- Définir un type T_Date qui contient un numéro de jour et un numéro de mois.
- Écrivez une procédure Afficher_Date qui reçoit en argument une date et l'affiche.
- Écrivez une fonction Plus_Long qui reçoit en argument un calendrier et qui renvoie le jour (de type T_Date) le plus long de l'année
- Testez en affichant, vous devriez trouver le jour du solstice d'été (à quelques jours près, dû aux arrondis à la minute).
- Faites de même pour trouver le jour le plus court.

Question 3 : affichage
- Écrivez une procédure Afficher_Jour qui affiche un T_Jour (y compris la durée du jour). Si la lune est dans une phase remarquable, le préciser.
- Écrivez une procédure Afficher_Mois qui affiche un T_Mois (y compris tous les jours du mois).
- Écrivez une procédure Afficher_Annee qui affiche un T_Annee (y compris tous les jours de l'année).
- Essayez de soigner l'affichage.
Question 4 : algorithme de recherche
- Écrivez une fonction Chercher_Lune qui reçoit en argument un calendrier, un jour de départ (de type T_Date), et une phase de la lune (de type T_Lune), et qui renvoie le premier jour trouvé après le jour de départ correspondant à la phase de lune indiquée.
- Par exemple, Chercher_Lune( (14,07), Pleine_Lune) doit renvoyer la date de la première pleine lune après le 14 juillet.
- Si aucun jour ne convient, renvoyer le jour (0,0).
- Vous aures besoin d'utiliser use Calendrier ; au début de votre programme ou avant le begin de votre fonction.
Solution utile si vous avez été pugnace face au problème : mission5.adb




