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 99 100 101 102 103
| with Ada.Text_IO, Ada.Integer_Text_IO;
use Ada.Text_IO, Ada.Integer_Text_IO;
procedure Prog is
-- Déclaration des types et sous-types
subtype Entiers is Integer range -50..50;
type Element;
type Liste is access Element;
type Element is record
Valeur: Entiers;
Suivant: Liste;
end record;
-- Sous-programme qui range une valeur donnée dans une liste: les élements négatifs à gauche, les positifs à droite
procedure Ranger_Dans_Liste (Ma_Valeur: in Entiers; Ma_Liste: in out Liste) is
Aux: Liste := Ma_Liste;
begin
if Ma_Liste = null then
Ma_Liste := new Element'(Ma_Valeur,null);
else
if Ma_Valeur < 0 then
if Aux.All.Valeur > 0 then
Aux := new Element'(Ma_Valeur,Aux);
elsif Aux.All.Valeur < 0 then
Aux := new Element'(Ma_Valeur, Aux.All.Suivant);
end if;
elsif Ma_Valeur > 0 then
if Aux.All.Valeur > 0 then
Aux := new Element'(Ma_Valeur, Aux.All.Suivant);
elsif Aux.All.Valeur < 0 then
Aux := new Element'(Ma_Valeur, Aux);
end if;
end if;
end if;
end Ranger_Dans_Liste;
-- Sous-programme d'affichage de la liste (ordre de saisie)
procedure Afficher_Liste (Ma_Liste: in Liste) is
Aux: Liste := Ma_Liste;
begin
Put("Valeurs contenues dans la liste: ");
new_line(2);
while Aux /= null loop
Put(Aux.All.Valeur,0);
new_line;
Aux := Aux.All.Suivant;
end loop;
end Afficher_Liste;
-- Declaration du programme general
Ma_Liste: Liste;
begin
Ma_Liste := new Element'(-3,new Element'(-1, new Element'(4,null)));
Ranger_Dans_Liste(-2, Ma_Liste);
Afficher_Liste(Ma_Liste);
end Prog; |
Partager