TD1

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;