Programme de tri qui ne marche pas? help..

Résolu
SindaM Messages postés 43 Statut Membre -  
Mins Messages postés 45 Statut Membre -
Bonjour,
voila ce ke g écrit(g utilisé la méthode de tri par sélection)
mais ca ne s'exécute pas correctement ( ca donne un tab non trié)


program tableau;
uses wincrt;
type tab=array [1..100] of integer;
var i,ppm,n,k:integer;t:tab;

procedure remplissage (var t:tab; var n:integer);
var i: integer;
begin
repeat writeln ('donner le nombre de cases');
readln (n);
until n>=0;

for i:= 1 to n do
begin
writeln('donner t[',i,']');
readln (t[i]);
end;

end;

procedure tri (var t:tab;var n:integer);
var i,ppm:integer;

procedure permut (var x,y:integer);
var aux:integer;
begin
aux:= x;
x:=y ;
y:= aux ;
end;

function posmin (t:tab;n:integer):integer;
var i,j,pm:integer;
begin
pm:=i;
for j:= i+1 to n do
begin
if t[j]< t[pm]
then pm:=j;
end;
posmin:= pm;
end;

begin
for k:=1 to n-1 do
ppm:= posmin (t,n);
if t[i]<> t[ppm] then permut (t[i],t[ppm]);

end;

begin
remplissage (t,n);
tri (t,n);
for i:= 1 to n do
write(t[i],' ');
end.

merci de m'aider a trouver ce qui cloche
Configuration: Windows XP
Safari 525.19

3 réponses

  1. Mins Messages postés 45 Statut Membre 9
     
    Bizarrement, ton code me parait illisible, enfin bon il faut le mettre entre les balises "code" pour que ce soit lisible. :) .

    C'est normalement déjà achement mieux O:)
    procedure tri (var t:tab;var n:integer);
    	var i,ppm:integer;
    
    	procedure permut (var x,y:integer);
    		var aux:integer;
    		begin
    			aux:= x;
    			x:=y ;
    			y:= aux ;
    		end;
    
    	function posmin (t:tab;n:integer):integer;
    		var i,j,pm:integer;
    		begin
    			pm:=i;
    			for j:= i+1 to n do
    			begin
    				if t[j]< t[pm] then 
    					pm:=j;
    			end;
    			posmin:= pm;
    		end;
    
    	begin
    		for k:=1 to n-1 do
    			ppm:= posmin (t,n);
    			if t[i]<> t[ppm] then 
    				permut (t[i],t[ppm]);
    	end;
    end;
    
    begin
    	remplissage (t,n);
    	tri (t,n);
    	for i:= 1 to n do
    		write(t[i],' ');
    end.


    Par contre, les noms de variables qui ne veulent rien dire, c'est tout sauf évident à lire. :)

    Euh dans posmin, tu as déclaré i alors qu'elle est déjà instancié dans tri. La par contre si tu la redéclares tu vas te retrouver à 0 et donc rescanner le tableau à chaque fois.

    Mais j'ai vraiment un doute.

    Tu devrais au moins changer tes noms de variables et chercher à expliquer comment tu penses ton code. En gardant les noms des variables identiques, tu risques juste de te paumer dans tes variables.
    0
  2. SindaM Messages postés 43 Statut Membre 1
     
    bon voila j'ai enlevé les variables locales que j'avais déjà déclaré en tant que variables globales et ça donne ça:
    program tableau;
    uses wincrt;
    type tab=array [1..100] of integer;
    var i,ppm,n,k:integer;t:tab;

    procedure remplissage (var t:tab; var n:integer);

    begin
    repeat writeln ('donner le nombre de cases');
    readln (n);
    until n>=0;

    for i:= 1 to n do
    begin
    writeln('donner t[',i,']');
    readln (t[i]);
    end;

    end;

    procedure triselection (var t:tab;var n:integer);

    procedure permut (var x,y:integer);
    var aux:integer;
    begin
    aux:= x;
    x:=y ;
    y:= aux ;
    end;

    function posmin (t:tab;n:integer):integer;
    var j,pm:integer;
    begin
    pm:=i;
    for j:= i+1 to n do
    begin
    if t[j]< t[pm]
    then pm:=j;
    end;
    posmin:= pm;
    end;

    begin
    for k:=1 to n-1 do
    ppm:= posmin (t,n);
    if t[i]<> t[ppm] then permut (t[i],t[ppm]);

    end;

    begin
    remplissage (t,n);
    triselection (t,n);
    for i:= 1 to n do
    write(t[i],' ');
    end.

    ps: je ne sais pas comment mettre le code dans des balises code :((
    0
  3. Mins Messages postés 45 Statut Membre 9
     
    Au dessus de la fenêtre où tu tapes ta réponse, tu as 5 boutons Gras, Italique, Souligné, Code et lien. Tu cliques sur Code et tu colles ton code entre les balises qui sont apparues...

    Par contre, pas de renommage en vue.

    A vue de nez, ton i dans posmin est indéterminé vu qu'il sert de compteur partout. Je crois que tu devrais chercher de ce côté là.
    0