Trouver le Kième plus petit élément d'un tableau
Bonjour,
ENONCE :
Ecrire un algorithme intitulé K_ppe permettant de déterminer et d'afficher le kième plus petit élément (1<=k<=N), s'il existe, et l'indice de sa première apparition dans un tableau T de N entiers (N>=2)
Remarques:
Si le Kième plus petit élément ne figure pas dans le tableau T, le programme doit afficher le message suivant : "pas de Kième plus petit élément"
Exemple :
Soit le tableau T suivant :
valeurs 5 2 7 2 1 4 9 4 1 1
indices 1 2 3 4 5 6 7 8 9 10
Pour k=3
Le 3ième plus petit élément est 4 et l'indice de sa première apparition est 6.
Fin ENONCE (lol)
La solution que j'ai proposée est de faire un 2e tableau dans lequel les valeurs sont triées dans un ordre croissant. Ensuite une boucle se charge de trouver le kième plus petit élément sachant qu'un même élément peut avoir une fréquence supérieure à 1. Enfin voir si le kième plus petit terme existe en comparant un compteur à N.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
program k_ppe;
uses wincrt;
const n=6;
var
t:array[1..n] of integer;
t2:array[1..n] of integer;
i,e,f:integer; {e : valeur enregistrée pour le tri croissant du tableau}
r,s,k,x:integer;
begin
for i:=1 to n do
begin
write('valeur numero ', i,' du tableau : ');
read(t[i]);
end;
for i:=1 to n do {ici on affiche le tableau avec les valeurs choisies du l'utilisateur}
begin
write(T[i]:6);
T2[i] :=T[i]; {initialisation du 2e tableau, consacré au tri}
end;
{ici commence le tri croissant du tableau}
for i:=2 to n do
begin
for f:=n downto i do
begin {condition de changement de deux cases}
if T2[f-1]>T2[f] then
begin {changer T[8] et T[9] de places si T[8] >T[9]}
e:=T2[f];
T2[f]:=T2[f-1];
T2[f-1]:=e;
end;
end;
end;
writeln(chr(13),'tableau trié : ');
for i:=1 to n do
write(T2[i]:6);
writeln(chr(13),' k? ' );
readln(k);
s:=k;
for r:=1 to s do
begin
if T2[r] = T2[r+1] then
S:=S+1;
end;
X:=T2[s];
if s<=n then
begin
writeln('Le ',k,'ième plus petit élément est ',X);
end
else
writeln('pas de ',k,'ième plus petit élément');
end. |
Comme vous l'avez remarqué, je n'ai pas réussi à trouver l'indice du kième plus petit élément. J'ai consacré le 1er tableau à cela. Il me semble qu'il existe une commande qui renverrait l'indice de X, je ne la connais pas.
Merci d'avoir lu.