Exercices sur les structures imbriquées

[Collapse]Structure imbriquée simple (tableau et record).

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 :
    Tennis
     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") ;
    Tester_Chercher(Tennis.Joueurs, "USA") ;
    Tester_Chercher(Tennis.Joueuses, "ITA") ;
    Tester_Chercher(Tennis.Joueuses, "INSA") ;
    et qui afficherait les résultats suivants :
    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

[Collapse]Structure imbriquée complexe.

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.
Solstice

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