g arrive a écrire une solution qui me parait raisonnable en faisant une exécution manuelle mais l'exécution sur machine donne un résultat erroné.
soit un tableau t de n entiers positifs(on suppose que n >=2), on veut déterminer et afficher le k-ieme plus petit élément (1<=k<=n) et l'indice de sa première apparition dans le tableau.
exemple: soit le tableau t suivant:
5 2 7 2 1 4 9 4 1 1
le programme doit afficher: le 3ème élément minimal est 4 et l'indice de sa première apparition est 6.
voila le code que g trouvé:
- Code:
program ex2;
uses wincrt;
type tab=array[1..100] of integer;
var n,nb,pos,k:integer;
t:tab;
procedure saisie(var n,k :integer; var t:tab);
var i :integer;
begin
repeat
write('n='); readln(n);
until n>=2;
writeln('**** les elements de t ****');
repeat
for i:=1 to n do readln(t[i]);
until t[i]>=0;
write('k='); readln(k);
end;
function cherche_min(t:tab; n:integer):integer;
var
min,i:integer;
begin
min:=1;
for i:=1 to n do
begin
if (t[i] <> -1)then
min:=i;
end;
cherche_min:=min;
end;
procedure recherche( t:tab; n,k:integer;var nb,pos:integer);
var m,j:integer;
begin
nb:=0;
repeat
m:=cherche_min(t,n);
for j:=1 to n do if t[j]=t[m] then t[j] :=-1;
nb:=nb+1;
until (nb=k)
pos:=m;
end;
procedure affiche(nb,pos:integer; t:tab);
begin
if nb=k then
writeln('le', k,'eme plus petie element est: ',t[pos], ' et la positionde sa premiere apparitionest ', pos)
else writeln('pas de ',k,' eme element minimal');
end;
begin
saisie(n,k,t);
recherche(t,n,k,nb,pos);
affiche(nb,pos,t);
end.






