Sujet: Tri fusion De: animatrix30 (l' arobase) gmail.com Groupes: fr.comp.lang.ada Organisation:http://groups.google.com Date: 18. Mar 2008, 11:59:35
Bonjour,
Je dois réaliser un tri par fusion sur une liste chaînée.
Je l'ai codé et je pense qu'il est (presque) juste.
Sauf qu'en ADA j'atteri sur une boucle infini.
Voici la spécification des listes chaînées :
type adresse is access doublet; -- Type adresse
type doublet is record -- Type pointeur de doublet
el : Donnee;
suiv : adresse;
end record;
et mon code pour le tri :
function Tri_fusion_liste(Liste : adresse) return adresse is
a : adresse;
b : adresse;
liste2 : adresse:=null;
i : integer := 0;
taille : integer := 0;
begin
a := Liste;
if a /= null then
while a.suiv /= null loop
a := a.suiv;
taille := taille+1;
end loop;
a := Liste;
for i in 0..(taille/2) loop
a := a.suiv; end loop;
b:= a.suiv;
a.suiv := NULL;
Liste2 := Tri_Fusion_Liste(Liste);
b := Tri_Fusion_Liste(b);
Liste2 := Fusion_Liste(Liste2,b);
return Liste2;
end if;
end Tri_fusion_liste;
function Fusion_Liste(Liste1, Liste2 : adresse) return adresse is
a : adresse;
b : adresse;
val : Donnee;
begin
val := Liste1.el;
a := Liste1;
b := Liste1;
while a.suiv /= Null loop
a := a.suiv;
end loop;
a.suiv := Liste2;
while Liste1.suiv /= Null loop
val := Liste1.el;
a := Liste1;
while a.suiv /= Null loop
a:=a.suiv;
if a.el < val then
val := a.el;
a.el := Liste1.el;
Liste1.el := val;
end if;
end loop;
end loop;
return Liste2;
end Fusion_Liste;
SI vous pouviez m'indiquer où se trouve l'erreur, car pour l'instant
je n'arrive pas à la localiser.