Programme de tri qui ne marche pas? help..

Résolu
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. 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
    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
      1. 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