Objectifs

  • Manipulation de tableau : parcours, et création d'un nouveau tableau.
  • Manipulation de types énumérés.

Prérequis

  • Les notions du poly (ou du cours) sur les tableaux.
  • Les notions du poly sur les types énumérés (y compris bloc case).

Exercices

Exercice : Transformation de séquence
Directions
  • Créez un dossier pour effectuer les exercices complémentaires.
    Copiez-y l'acteur mouv.ads et le programme mission1.adb (l'acteur n'a pas de fichier .adb car il ne contient que des définitions de types).
  • Examinez les types définis dans l'acteur Mouv.
  • Définissez une procédure Affiche_Pos qui reçoit en argument une position (de type T_Pos) et qui l'affiche de la manière suivante :
    X = 8, Y = 12
    Procedure Affiche_PosAvant le begin du programme principal, définissez une variable Pos_Depart de type T_Pos dans laquelle X = 4 et Y = 2.
    Dans le corps du programme principal, afficher la valeur de Pos_Depart (en utilisant Affiche_Pos évidemment) et vérifiez l'affichage.
  • Définissez une procédure Affiche_Sequence qui reçoit en argument une séquence de type T_Sequence et qui l'affiche de la manière suivante :
    Gauche Gauche Haut Bas Haut Droite Rien Rien Droite Haut
    Notez que les messages sont affichés en français (on ne peut donc pas utiliser T_Direction'Image). Procedure Affiche_Sequence
  • Pour tester : avant le begin du programme principal, définissez une séquence Up, Up, Right, None et affichez-la.
  • StarÉcrivez une fonction Calcule_Position respectant le prototype suivant : Function Calcule_PositionOn imagine un point situé initialement sur la position Origine. Le point se déplace selon les directions contenues dans la séquence Seq et la fonction renvoie la position du point à la fin de la séquence.
    Ainsi la séquence Up Up Right appliquée au point (4,2) doit retourner (5, 4) soit deux fois vers le haut et une fois à droite.
  • Pour tester, afficher la position finale avec la séquence que vous avez déjà définie ci-dessus et l'origine située en Pos_Depart. Effectuez plusieurs tests différents.
  • StarÉcrivez maintenant une fonction Transforme qui reçoit en argument une chaîne de caractères (String) et qui renvoie une séquence de type T_Sequence. Function TransformeLa séquence renvoyée a la même taille que la chaîne de caractères. Les caractères U, D, L, R deviennent les directions Up, Down, Left, Right (respectivement). Les autres caractères deviennent None. Par exemple, si la fonction reçoit en argument la chaîne UDUDLZZUR, elle renvoie :
    Up Down Up Down Left None None Up Right
    Si vous utilisez un bloc case, le dernier cas de la liste devra être others => B où B est un bloc.
  • Testez dans le corps du programme en demandant à l'utilisateur de taper une chaîne, en affichant la séquence correspondante, puis en affichant les coordonnées du point final. Voici un exemple d'exécution complète du programme :
    Origine : 
    X =  4, Y =  2
               
    Haut Haut Droite 
    X =  5, Y =  4
               
    Entrez maintenant votre propre séquence : UDzzzLLLULUDLzR
    Haut Bas Rien Rien Rien Gauche Gauche Gauche Haut Gauche Haut Bas Gauche Rien Droite 
    X =  0, Y =  3
  • Si vous avez bien travaillé, et que vous n'avez pas cédé à la tentation de regarder la solution tout de suite, vous pouvez examiner cette solution : mission1.adb

Acteurs utilisés

Bilan

Vous savez :

  • Effectuer un calcul en itérant sur toutes les cases d'un tableau (par exemple somme ou moyenne).
  • Créer un tableau de la même taille qu'un autre tableau, et appliquer une transformation à chaque case.