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#####Procedure Tracer_Ligne 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 si vous y parvenez.
  • 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). Procedure Tracer_Rectangle 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.
  • 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 si vous y parvenez.
  • 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 si vous y parvenez.
  • 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 si vous y parvenez.

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.