Exercice : Transformation de séquence

- 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
Avant 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 utiliserT_Direction'Image
). - Pour tester : avant le begin du programme principal, définissez une séquence
Up, Up, Right, None
et affichez-la. Écrivez une fonction
Calcule_Position
respectant le prototype suivant :On 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.
É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.La 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 êtreothers => 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