Programme de tri qui ne marche pas? help..
Résolu
SindaM
Messages postés
43
Statut
Membre
-
Mins Messages postés 45 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
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
-
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. -
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 :(( -
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à.