ED n·6-- Algorithmique et programmation---corrigé


Objectifs


Exercice 1

Enoncé

Tri par recherche séquentielle d'un tableau T(a..b) d'entiers : on suppose qu'une partie du tableau T(a..i-1) est triée. L'idée est de parcourir le tableau
T(i..b) de manière séquentielle à la recherche du plus petit élément (disons T(j)). Il suffit ensuite de permuter T(i) avec T(j) et de recommencer la recherche
sur le tableau T(i+1..b).
 

-- Tri par recherche séquentielle d'un tableau T(a..b)
-- Idée : on suppose que le tableau T(a..i) est trié
-- Il suffit de rechercher le plus petit élément dans T(i+1..b)
-- Soit T(j) cet élément, on le permute avec T(i+1)
--
--
-- Raisonnement
-- 1-INVARIANT : T(a..i-1) trie et T(i..b) non trie
-- 2-CAI i=b
-- 3-CORPS de BOUCLE
--  rechercher le plus petit élément dans T(i..b)->T(j)
--  permuter T(i) et T(j)
-- 4-INITIALISATION i=a (en considérant que le tableau trié est vide initialement ((i-1)-a)+1))
--

-- Algorithme du tri d'un tableau T
debut
    pour i=a à b-1 faire
        T(j)<- rechercherPlusPetit(T(i..b)
        permuter(T(j),T(i))
    fin pour;
fin;

-- Algorithme de recherche du plus petit élément d'un tableau T
debut
    min<-premier élément du tabeau T;
    pour  chaque élément du tableau T faire
        si cet élément est inférieur à min alors l'affecter à min; fin si;
    fin pour;
fin;

-- Programme
with Ada.Text_io;use Ada.Text_io;
with Ada.Integer_Text_io;use Ada.Integer_Text_io;

procedure triSeq is
 type Tableau is array(Integer range <>) of Integer;
 procedure permuter(x,y:in out Integer) is
 z:Integer:=x;
 begin
  x:=y;
  y:=z;
 end permuter;

 function rechercherPlusPetit(T:Tableau) return Integer is
  min:Integer:=T'first;
 begin
  for i in T'first..T'last loop
   if T(i)<T(min) then min:=i;end if;
  end loop;
  return min;
 end rechercherPlusPetit;

 procedure tri(T:in out Tableau) is
 begin
  for i in T'first..T'last loop
   declare
    IndiceDuPlusPetit:Integer:=rechercherPlusPetit(T(i..T'last));
   begin
    permuter(T(i),T(IndiceDuPlusPetit));
   end;
  end loop;
 end tri;

 procedure put(T:in Tableau) is
 begin
  put("(");
  for i in T'range loop
   put(T(i),width=>3);
  end loop;
  put(")");
 end put;

 tab:Tableau(1..5):=(4,7,1,9,2);

begin
 new_line;
 put(tab);
 new_line;
 tri(tab);
 put(tab);
 new_line;
end triSeq;