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 104
| with ada.integer_text_io;
with text_io;
use ada.integer_text_io;
use text_io;
procedure ordon_tab is
-- Action : Saisie d'un tableau par utilisateur (partielle ou totale) et tri par ordre croissant des valeurs de ce tableau.
-- Stratégie : Utilise une procédure de saisie au clavier , puis une procédure de tri à bulle.
Type T_VectEntier is array(1..5) of integer; -- Type du tableau à trier
Tab : T_VectEntier ; -- Tableau à trier
Indice_lastcase_affectee : integer; -- Indice de la dernière case affectée du tableau lors de la saisie
Procedure saisie_tab (Tab1 : in out T_VectEntier;indic_fin : out integer) is
-- Action : permet d'affecter un tableau de type T_vecentier partiellement ou totalement par saisie au clavier. Affecte à
-- indic_fin l'indice de la dernière case affectée de ce tableau
-- Sratégie : Parcours partiel du tableau, avec controle d'exécution par utilisateur.
sortie : character; -- Permet de controler la continuité ou l'arrêt de la saisie.
begin
indic_fin := 1;
sortie := 'O';
put ("saisissez des entiers , pour terminer la saisie appuyez sur N ");
new_line;
get (Tab1(indic_fin));
indic_fin := indic_fin+1;
put ("voulez vous continuer la saisie ? O/N ");
new_line;
get(sortie);
while (indic_fin<=5 and (sortie = 'o' xor sortie = 'O')) loop
put("entrez un autre nombre");
new_line;
get (Tab1(indic_fin));
new_line;
indic_fin := indic_fin+1;
if indic_fin>5
then put("Vous avez rempli le tableau vous ne pouvez plus saisir de nombre");
new_line;
else put ("voulez vous continuer la saisie ? O/N ");
new_line;
get (sortie);
end if;
end loop;
indic_fin := indic_fin-1;
End saisie_tab;
procedure affiche_tab (tab1: in T_VectEntier;Indic_fin :in integer) is
-- Pré-requis : Toute les cases de tab1 jusqu'a la case indicée par indic_fin sont affectées.
-- 1<Indic_fin<5
-- Action : Affiche toute les cases du tableau Tab1 jusqu'à la case indicée par indic_fin (dernière case affectée)
-- Stratégie : Parcours total du tableau jusqu'à indic_fin.
begin
for i in 1..indic_fin loop
put (Tab1(i));
end loop;
end affiche_tab;
procedure pgrde_valeur_tab (tab : in T_VectEntier; indic_fin : in integer; plus_grande_valeur : out integer;ind_plus_gde_valu:out integer )is
-- Pré-requis : Toutes les cases de tab jusqu'a la case indicée par indic_fin sont affectées. Indic_fin compris entre 1 et 5
-- Action : Parcours le tableau jusqu'à la case indicée par indic_fin et calcule la plus grande valeur trouvée dans cette
-- partie de tableau ainsi que l'indice de la case de cette valeur.
-- Stratégie : Parcours total du tableau de l'indice 1 à indic_fin.
begin
plus_grande_valeur := tab(1);
ind_plus_gde_valu := 1;
for i in 1..indic_fin loop
if tab(i) > plus_grande_valeur
then plus_grande_valeur := tab(i);
ind_plus_gde_valu := i;
end if;
end loop;
end pgrde_valeur_tab;
procedure tri_a_bulle (tab1 : in out T_VectEntier; indic_fin : in integer) is
-- Pré-requis : Toutes les cases de tab1 jusqu'à celle indicée par indic_fin sont affectées.
-- Action : Ordonne les valeurs de tab1 par ordre croissant
-- Stratégie : Parcours total du tableau jusqu'à la case indicée par indic_fin et tri à bulle de ce tableau.
max_tab1 : integer; -- Stocke la plus grande valeur trouvée jusqu'à l'indice de la case de tab1 egal à i.
ind_max_tab1 : integer; -- Stocke l'indice de la plus grande valeur trouvée jusqu'a l'indice de la case de tab1 égal a i
change_var : integer;
begin
for i in reverse 1..indic_fin loop
pgrde_valeur_tab(Tab1,i,max_tab1,ind_max_tab1);
change_var := tab1(i);
tab1(i) := max_tab1;
tab1(ind_max_tab1) := change_var;
end loop;
end tri_a_bulle ;
-- Instructions programme principal
BEGIN
saisie_tab(Tab,Indice_lastcase_affectee);
put("Vous avez affectes : ");
put (Indice_lastcase_affectee,0);
put (" cases du tableau");
new_line(3);
put("Voici le tableau tel que vous l'avez saisi ");
new_line;
affiche_tab(tab,Indice_lastcase_affectee);
new_line(5);
tri_a_bulle (Tab,Indice_lastcase_affectee);
put ("Voici le tableau range par ordre croissant ");
new_line;
affiche_tab(Tab,Indice_lastcase_affectee);
END; |
Partager