-- put et get
with Ada.Text_Io, Ada.Integer_Text_Io;
use Ada.Text_Io, Ada.Integer_Text_Io;
procedure Exo03 is
-- declaration du tableau d'entiers
N : constant Natural := 10;
type T_TabNatural is array (1..N) of Natural;
type T_MinMax is record
Min : Natural;
Max : Natural;
end record;
-- exo 3a
procedure Get(T : out T_TabNatural) is
begin
for I in T'Range loop
Get(T(I));
end loop;
end;
-- exo 3bc
procedure Get(T : out T_TabNatural; Nb : out Natural) is
Val : Natural;
begin
Nb := 0;
-- version 1
-- for I in T'Range loop
-- Get(Val);
-- exit when Val = 0;
-- T(I) := Val;
-- Nb := I;
-- end loop;
-- version 2
loop
Get(Val);
exit when Val = 0;
Nb := Nb + 1;
T(Nb) := Val;
exit when Nb = T'Last;
end loop;
end;
-- exo 3d
procedure Put(T : in T_TabNatural; K : in Natural := T_TabNatural'Last) is
begin
for I in 1..K loop
Put(T(I));
end loop;
end;
-- exo 3e
function isIn(T : T_TabNatural;
X : Natural;
K : Natural := T_TabNatural'Last) return Boolean is
begin
for I in 1..K loop
if T(I) = X then
return True;
end if;
end loop;
return False;
end;
-- exo 3f
function countX(T : T_TabNatural;
X : Natural;
K : Natural := T_TabNatural'Last) return Natural is
Nb : Natural := 0;
begin
for I in 1..K loop
if T(I) = X then
Nb := Nb + 1;
end if;
end loop;
return Nb;
end;
-- exo 3g
function Somme(T : T_TabNatural; K : Natural := T_TabNatural'Last)
return Natural is
S : Natural := 0;
begin
for I in 1..K loop
S := S + T(I);
end loop;
return S;
end;
-- exo 3h
procedure MinMax(T : in T_TabNatural;
Min, Max : out Natural;
K : in Natural := T_TabNatural'Last) is
begin
if K < 1 then
return;
end if;
Min := T(1);
Max := T(1);
for I in 1..K loop
if T(I) > Max then
Max := T(I);
elsif T(I) < Min then
Min := T(I);
end if;
end loop;
end;
-- exo 3i
function MinMax(T : in T_TabNatural;
K : in Natural := T_TabNatural'Last) return T_MinMax is
Res : T_MinMax := (0, 0);
begin
if K < 1 then
return Res;
end if;
Res.Min := T(1);
Res.Max := T(1);
for I in 1..K loop
if T(I) > Res.Max then
Res.Max := T(I);
end if;
if T(I) < Res.Min then
Res.Min := T(I);
end if;
end loop;
return Res;
end;
Tbl : T_TabNatural;
Nb : Natural;
MM : T_MinMax;
Min, Max : Natural;
begin
-- version avec saisie du tableau entier
Get(Tbl);
Put("Affichage du tableau : ");
Put(Tbl);
New_Line;
Put("Somme : ");
Put(Somme(Tbl));
New_Line;
Put("Y a-t-il 1 dans le tableau : ");
Put(Boolean'Image(IsIn(Tbl, 1)));
New_Line;
Put("Nombre de 1 : ");
Put(Countx(Tbl, 1)); New_Line;
-- appel de la fonction minmax
MM := MinMax(Tbl);
Put("(fct) min et max : ");
Put(MM.Min); Put(MM.Max); New_Line;
-- utilisation de la procedure minmax
MinMax(Tbl, Min, Max);
Put("(proc) min et max : ");
Put(Min); Put(Max); New_Line;
-- version avec saisie fini par 0
Get(Tbl, Nb);
Put("Nombre de donnees saisies : ");
Put(Nb);
New_Line;
Put("Affichage du tableau : ");
Put(Tbl, Nb);
New_Line;
Put("Somme : ");
Put(Somme(Tbl, Nb));
New_Line;
Put("Y a-t-il 1 dans le tableau : ");
Put(Boolean'Image(IsIn(Tbl, 1, Nb)));
New_Line;
Put("Nombre de 1 : ");
Put(Countx(Tbl, 1, Nb));
end;