1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
| WITH Ada.Text_IO, Ada.float_Text_IO, ada.integer_text_io;
USE Ada.Text_IO, ada.float_Text_IO, ada.integer_text_io;
PACKAGE BODY Pack_Tab IS
---------------------------------------------------------------------------
PROCEDURE Afftab(Tab : T_Tabint) IS
BEGIN
FOR I IN T_Tabint'range LOOP
Put(Tab(I), Width => 0);
Put(" ");
END LOOP;
New_line;
END Afftab;
---------------------------------------------------------------------------
FUNCTION Remptab RETURN T_Tabint IS
Tab : T_Tabint;
Remp : Integer;
BEGIN
Put("rentrez un entier ");
Get(Tab(1));
FOR I IN T_tabint'first .. t_tabint'last-1 LOOP
Put("rentrez un entier ");
Get(Remp);
WHILE Remp < Tab(I) LOOP
Put("votre suite n'est pas croissante, recommencez ");
Get(Remp);
END LOOP;
Tab(I+1) := Remp;
END LOOP;
RETURN Tab;
END Remptab;
---------------------------------------------------------------------------
PROCEDURE Decale_Gauche( Tab : IN OUT T_Tabint; k : natural) IS
BEGIN
FOR I IN K..T_Tabint'last-1 LOOP
Tab(I):= Tab(I+1);
END LOOP;
END Decale_Gauche;
---------------------------------------------------------------------------
PROCEDURE Decale_Droite(Tab : IN OUT T_Tabint; K : Natural) IS
Mem1, Mem2: Integer := 0;
BEGIN
Mem1 := Tab(K);
FOR I IN K+1..T_Tabint'last LOOP
Mem2 := Tab(I);
Tab(I) := Mem1;
Mem1 := Mem2;
END LOOP;
Tab(K) := Mem1;
END Decale_Droite;
---------------------------------------------------------------------------
PROCEDURE Remplace_Int (Tab : IN OUT T_Tabint ; K : Integer) IS
Compt : Integer := T_Tabint'First;
BEGIN
WHILE K > Tab(Compt) LOOP
Compt:= Compt+1;
END LOOP;
IF Compt = T_Tabint'First THEN
Decale_Droite(Tab, Compt);
ELSE
Decale_Droite(Tab, Compt-1);
END IF;
Tab(Compt) := K;
END Remplace_Int;
---------------------------------------------------------------------------
PROCEDURE Tri_Selection(Tab : IN OUT T_Tabint) IS
Compt : Natural := T_Tabint'First;
Mini : Integer := Tab(T_Tabint'First);
Indmini : Natural ;
Memo : integer;
BEGIN
WHILE Compt < T_Tabint'Last LOOP
FOR I IN Tab(Compt)..T_Tabint'Last LOOP
IF Mini > T_Tabint'Last THEN
Mini := Tab(I);
Indmini := I;
END IF;
END LOOP;
IF Indmini /= T_Tabint'Last THEN
Memo := Tab(T_Tabint'Last);
END IF;
Afftab(Tab);
IF Indmini /= Compt THEN
Decale_Droite(Tab, Compt);
Afftab(Tab);
Tab(Compt) := Mini;
IF Indmini < T_Tabint'Last THEN
Tab(Indmini+1) := Memo;
Afftab(Tab);
END IF;
END IF;
Compt := Compt+1;
Mini := Tab(Compt);
END LOOP;
END Tri_Selection;
END Pack_Tab; |
Partager