Méthode du tri à bulle et recherche dichotomique sur un tableau.
-- Crieloue -- Gilles -- TD1 : Programme en ADA with Gnat.Io; use Gnat.Io; procedure td1 is type tableau is array(1..99) of integer ; entree : tableau; choix, indice, compteur, j, valeur_recherchee, nombre_valeurs : integer; procedure tri(montableau : in out tableau ; compteur : out integer) is -- methode du tri a bulles sauvegarde : integer; n : integer; begin n := nombre_valeurs; compteur := 0; while n>1 loop for i in 1..n-1 loop if montableau(i) >= montableau(i+1) then sauvegarde := montableau(i); montableau(i) := montableau(i+1); montableau(i+1) := sauvegarde; compteur := compteur +1; end if; end loop; n := n-1; end loop; end; procedure recherche(montableau : in tableau; valeur : in integer; j : out integer) is -- recherche dichotomique borne_inf, borne_sup, milieu : integer; begin j := 0; borne_inf := 1; borne_sup := nombre_valeurs; while borne_inf <= borne_sup AND j=0 loop milieu := (borne_inf + borne_sup) /2; if montableau(milieu)=valeur then j := milieu; else if valeur > montableau(milieu) then borne_inf := milieu +1 ; else borne_sup := milieu -1; end if; end if; end loop; if j /= 0 then j := 1; end if; end; begin Put("Nous allons créer le vecteur :"); new_line; indice:=1; nombre_valeurs := 0; put("Veuillez entrer un nombre (0 pour quitter)"); while choix /= 0 loop get(entree(indice)); nombre_valeurs:=nombre_valeurs+1; -- on compte le nombre de valeurs entrées par l'utilisateur indice := indice +1; put("Veuillez entrer un nombre (0 pour quitter)"); get(choix); end loop; tri(entree,compteur); put(" voici votre tableau trié :"); new_line; for i in 1..nombre_valeurs loop put(entree(i)); new_line; end loop; put("Nombre de changements effectués : "); put(compteur); new_line; put("Entrez une valeur à rechercher : "); get(valeur_recherchee); recherche(entree, valeur_recherchee, j); if j = 0 then put("Absent"); else put("Présent"); end if; new_line; end;