.
..
exo01a.adb (download) (view)
exo02a.adb (download) (view)
exo03.adb (download) (view)
exo04.adb (download) (view)

-- put et get
with Ada.Text_Io, Ada.Float_Text_Io;
use  Ada.Text_Io, Ada.Float_Text_Io;
-- abs
with Ada.Numerics.Elementary_Functions;
use  Ada.Numerics.Elementary_Functions;

procedure Exo01a is
   -- exo 1a
   type Complexe is record
     Reel : Float;
     Imag : Float;
   end record;

   -- exo 1b
   function Add(C1, C2 : Complexe) return Complexe is
      S : Complexe;
   begin
      S.Reel := C1.Reel + C2.Reel;
      S.Imag := C1.Imag + C2.Imag;
      return S;
   end;

   -- Nous pouvons aussi redéfinir l'opérateur + pour les complexes, ce
   -- qui permet d'écrire z1 + z2 :
   function "+"(C1, C2 : Complexe) return Complexe is
   begin
      return (Reel => C1.Reel + C2.Reel, Imag => C1.Imag + C2.Imag);
   end;

   -- exo 1b bonus(x)
   function "-"(C1, C2 : Complexe) return Complexe is
   begin
      return C1 + (Reel => -C2.Reel, Imag => -C2.Imag);
   end;

   -- exo 1c
   function "*"(C1, C2 : Complexe) return Complexe is
   begin
      return (C1.Reel * C2.Reel - C1.Imag * C2.Imag,
              C1.Imag * C2.Reel + C1.Reel * C2.Imag);
   end;

   -- exo 1d
   function Module(C : Complexe) return Float is
   begin
      return (Sqrt(C.Reel ** 2 + C.Imag ** 2));
   end;

   -- exo 1e
   procedure Get(C : out Complexe) is
   begin
      Get(C.Reel);
      Get(C.Imag);
   end;

   -- exo 1f
   procedure Put(C : in Complexe) is
   begin
      Put('(');
      Put(C.Reel, 0, 3, 0);
      if C.Imag >= 0.0 then
         Put(" + ");
      else
         Put(" - ");
      end if;
      Put(abs(C.Imag), 0, 3, 0);
      Put("i)");
   end;

   -- exo 1f bonus
   procedure Put_Line(C : in Complexe) is
   begin
      Put(C); New_Line;
   end;

   -- exo 1g
   function "**"(C : Complexe; N : Natural) return Complexe is
      Res : Complexe := (1.0, 0.0);
   begin
      for I in 1..N loop
         Res := Res * C;
      end loop;
      return Res;
   end;

   C1 : Complexe := (1.5, 0.0);
   C2 : Complexe := (1.5, 2.5);
begin
   Put(C1); Put(" + "); Put(C2); Put(" = "); Put_Line(C1 + C2);
   Put(C1); Put(" - "); Put(C2); Put(" = "); Put_Line(C1 - C2);

   Put(C1); Put(" * "); Put(C2); Put(" = "); Put_Line(C1 * C2);

   Put(C1); Put(" ** 0 = "); Put_Line(C1 ** 0);
   Put(C2); Put(" ** 0 = "); Put_Line(C2 ** 0);

   Put(C1); Put(" ** 1 = "); Put_Line(C1 ** 1);
   Put(C2); Put(" ** 1 = "); Put_Line(C2 ** 1);

   Put(C1); Put(" ** 2 = "); Put_Line(C1 ** 2);
   Put(C2); Put(" ** 2 = "); Put_Line(C2 ** 2);

   Put(C1); Put(" ** 3 = "); Put_Line(C1 ** 3);
   Put(C2); Put(" ** 3 = "); Put_Line(C2 ** 3);

   Put('|'); Put(C1); Put("| = "); Put(Module(C1)); New_Line;
   Put('|'); Put(C2); Put("| = "); Put(Module(C2)); New_Line;
end;
 
Webmaster : pierrefrancois.leon@laposte.net

Valid XHTML 1.0 Strict Valid CSS!