# Exercice de tracés avec des caractères

## ▸Objectifs

- Écrire quelques procédures qui affichent des formes géométriques en utilisant le caractère dièse #. Par exemple, un pseudo-carré et un damier :

      #####
      #   #
      #   #
      #   #
      #####

        ##  ##  ##  ##
        ##  ##  ##  ##
      ##  ##  ##  ##  ##
      ##  ##  ##  ##  ##
        ##  ##  ##  ##
        ##  ##  ##  ##
      ##  ##  ##  ##  ##
      ##  ##  ##  ##  ##
        ##  ##  ##  ##
        ##  ##  ##  ##

- Ces exercices vous familiariseront avec les concepts des séances de TP à venir.

#### Prérequis

➪ Au moins quelques restes du semestre 1.

## ▸Étapes à suivre

- Le seul acteur dont vous aurez besoin est GAda.Text_IO.
- Créez un nouveau dossier Exos-Algo.
- Créez-y un fichier vide mission1.adb que vous complétez avec la structure d'usage (page 5 du livret du semestre 1).
  Si vraiment vous n'y parvenez pas, exclamez-vous : O cursed spite that ever I was born to set it right! (Hamlet, Act I, Scene 5) puis copiez le fichier mission1.adb qui se situe sur commetud (comme au premier TP du premier semestre).
- Dans votre programme, qui s'appelle déjà Mission1, ajoutez une procédure Tracer_Ligne qui reçoit en argument un entier Long et qui trace une ligne de Long symboles dièses puis passe à la ligne.
  Par exemple, si Long vaut 5, la procédure affiche`#####` Pour tester, invoquer la procédure dans le corps du programme principal avec les arguments 3, 8, puis 20. Vous obtenez alors le résultat suivant :

      ###
      ########
      ####################

  Corps de la procédure : 4 lignes Ada.
- Ajoutez maintenant à votre programme une procédure `Tracer_Rectangle` qui reçoit deux arguments : Largeur et Hauteur, et qui trace (toujours avec des dièses) les contours d'un rectangle des dimensions indiquées (en nombre de dièses). Pour tester, invoquer la procédure dans le corps du programme principal avec les paires d'arguments (5,5), (4,6), puis (14,2). Vous obtenez alors le résultat suivant (utiliser des espaces " " pour décaler les dièses les uns des autres quand c'est nécessaire.) :

      #####
      #   #
      #   #
      #   #
      #####

      ####
      #  #
      #  #
      #  #
      #  #
      ####

      ##############
      ##############

  Corps de la procédure : une dizaine de lignes Ada.

- #### ▸Pour tester si un nombre est pair

  On utilise le modulo :
  - `X mod 2` vaut 0 lorsque X est pair.
  - `X mod 2` vaut 1 lorsque X est impair.
  Ajoutez une procédure `Tracer_Quadrillage` qui reçoit aussi en argument une largeur et une hauteur. Invoquée avec la paire d'arguments (19, 11), votre procédure doit afficher ceci :

      ###################
      # # # # # # # # # #
      ###################
      # # # # # # # # # #
      ###################
      # # # # # # # # # #
      ###################
      # # # # # # # # # #
      ###################
      # # # # # # # # # #
      ###################

  Corps de la procédure : une dizaine de lignes Ada, un seul IF.
- Faites de même une procédure `Tracer_Damier` qui, invoquée avec les arguments (18,10) affiche ceci :

      # # # # # # # # #
       # # # # # # # # #
      # # # # # # # # #
       # # # # # # # # #
      # # # # # # # # #
       # # # # # # # # #
      # # # # # # # # #
       # # # # # # # # #
      # # # # # # # # #
       # # # # # # # # #

  Corps de la procédure : une dizaine de lignes Ada, un seul IF.
- FacultatifEt enfin, écrivez une procédure `Tracer_Gros_Damier` qui, invoquée avec les arguments (18,10) affiche ceci :

        ##  ##  ##  ##
        ##  ##  ##  ##
      ##  ##  ##  ##  ##
      ##  ##  ##  ##  ##
        ##  ##  ##  ##
        ##  ##  ##  ##
      ##  ##  ##  ##  ##
      ##  ##  ##  ##  ##
        ##  ##  ##  ##
        ##  ##  ##  ##

  Corps de la procédure : une dizaine de lignes Ada, un seul IF.

## ▸Bilan

- Vous avez compris que pour parcourir une structure à deux dimensions (damier, matrice), il faut deux boucles FOR imbriquées.
- Dans ces deux boucles FOR imbriquées, vous reconnaissez le compteur des lignes et le compteur des colonnes.