# mission1.adb

    with Gada.Text_IO ;

    procedure Mission1 is

       package Txt renames GAda.Text_IO ;

       procedure Tracer_Ligne (Long : Integer) is
       begin
          -- Tracer n fois le caractère # puis passer à la ligne.
          for Colonne in 1..Long loop
             Txt.Put("#") ;
          end loop ;
          Txt.New_Line ;
       end Tracer_Ligne ;

       procedure Tracer_Rectangle (Largeur : Integer ; Hauteur : Integer) is
       begin
          -- Première ligne, pleine
          Tracer_Ligne(Largeur) ;

          -- Les lignes suivantes (de 2 à Hauteur-1) ne contiennent que
          -- le caractère # du début et celui de la fin.
          for Ligne in 2..Hauteur - 1 loop
             Txt.Put("#") ;

             -- Des espaces au milieu.
             for Col in 2..Largeur - 1 loop
                Txt.Put(" ") ;
             end loop ;

             Txt.Put("#") ;
             Txt.New_Line ;
          end loop ;

          -- La dernière ligne est pleine.
          Tracer_Ligne(Largeur) ;
          Txt.New_Line ;
       end Tracer_Rectangle ;

       procedure Tracer_Quadrillage (Largeur : Integer ; Hauteur : Integer) is
       begin
          -- On dessine ligne par ligne, colonne par colonne.
          for Ligne in 1..Hauteur loop
             for Col in 1..Largeur loop
                -- Il suffit de tracer les lignes impaires et les colonnes impaires.
                if (Ligne mod 2 = 1) or (Col mod 2 = 1) then
                   Txt.Put("#") ;
                else
                   Txt.Put(" ") ;
                end if ;
             end loop ;
             Txt.New_Line ;
          end loop ;
          Txt.New_Line ;
       end Tracer_Quadrillage ;

       procedure Tracer_Damier (Largeur : Integer ; Hauteur : Integer) is
       begin
          -- Même principe que Tester_Quadrillage
          for Ligne in 1..Hauteur loop
             for Col in 1..Largeur loop
                -- Il suffit de tracer les cases telles que x+y est pair.
                if (Ligne + Col) mod 2 = 0 then
                   Txt.Put("#") ;
                else
                   Txt.Put(" ") ;
                end if ;
             end loop ;
             Txt.New_Line ;
          end loop ;
          Txt.New_Line ;
       end Tracer_Damier ;

       procedure Tracer_Gros_Damier (Largeur : Integer ; Hauteur : Integer) is
       begin
          -- Même principe, mais en divisant les coordonnées par 2 pour faire des paquets de 2x2.
          for Ligne in 1..Hauteur loop
             for Col in 1..Largeur loop

                -- On soustrait 1 car sinon le damier commence au milieu d'un paquet de 2x2 et ce n'est pas joli.
                if ((Ligne-1)/2 + (Col-1)/2) mod 2 = 1 then
                   Txt.Put("#") ;
                else
                   Txt.Put(" ") ;
                end if ;
             end loop ;
             Txt.New_Line ;
          end loop ;
          Txt.New_Line ;
       end Tracer_Gros_Damier ;

    begin

       Txt.Put_Line("Test de Tracer_Ligne : ") ;
       Txt.New_Line ;

       Tracer_Ligne(3) ;
       Tracer_Ligne(8) ;
       Tracer_Ligne(20) ;

       Txt.New_Line ;
       Txt.Put_Line("Test de Tracer_Rectangle : ") ;
       Txt.New_Line ;

       Tracer_Rectangle(5, 5) ;
       Tracer_Rectangle(14, 2) ;
       Tracer_Rectangle(4, 6) ;

       Txt.New_Line ;
       Txt.Put_Line("Test de Tracer_Quadrillage : ") ;
       Txt.New_Line ;

       Tracer_Quadrillage(19, 11) ;

       Txt.New_Line ;
       Txt.Put_Line("Test de Tracer_Damier : ") ;
       Txt.New_Line ;

       Tracer_Damier(18, 10) ;

       Txt.New_Line ;
       Txt.Put_Line("Test de Tracer_Gros_Damier : ") ;
       Txt.New_Line ;

       Tracer_Gros_Damier(18, 10) ;

    end Mission1 ;