accès aux groupes de discussion, consultation et publication d'articles, recherche de "newsgroups"...
membres, identifiez-vous
é-mail Mot de passe
nouveau ? mot de passe oublié ?
Chargement... Chargement en cours...

Groupes français belges canadiens suisses internationaux Nétiquette
Échangez opinions et commentaires dans les forums de discussion.

Tri fusion

 [  Nouvelle Discussion Nouvelle discussion  |  Répondre au groupe Répondre au groupe  |  fr.comp.lang.ada ] 

Retour : Accueil du site fr comp lang ada   charte stats de ce groupe


  Sujet:   Tri fusion  
 De: animatri...@gmail.com
 Groupes: fr.comp.lang.ada
 Organisation: http://groups.google.com
 Date: 18. Mar 2008, 03: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.

Merci


DateSujet  Auteur
18.03.
*   Tri fusion
animatrix30
18.03.
+- Re: Tri fusion
gautier niouzes
18.03.
`- Re: Tri fusion
Jeffrey R. Carter
Groups Explorer contact votre avis comment ça marche? rechercher un groupe suggérer un groupe abuse accueil du site   Imprimer cette page   Envoyer cette page à un(e) ami(e)