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 ;