En TP, on nous a demandé de faire un tri par sélection de minimum mais récursif, Mais je n'y arrive pas. Ma fonction SelectMin ne fonctionne pas et je n'arrive pas à modifier le code pour que cela marche.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
 
 
const SUITELONGMAX = 50;
 
type element = integer;
type suite = record
             contenu : array[1..SUITELONGMAX] of element;
             long : 0..SUITELONGMAX;
             end;
 
 
var     s : suite;
        m, k : integer;
 
{Procedure de génération aléatoire d'une suite de longueur m}
 
procedure GenAleatSuite(m : integer; var s : suite);
var i : integer;
begin
 
  s.long:=m;
 
  for i:=1 to m do
    begin
      s.contenu[i]:=random(99);
    end;
end;
 
{Procedure d'affichage d'un suite entre les indices k et s.long}
 
procedure AfficheSuite(var s : suite);
begin
 
  AffSuiteRec(1);
  writeln;
  writeln;
 
end;
 
{Echange de deux elements de la suite}
 
procedure echange (var a,b : integer);
var temp: integer;
begin
  temp := a;
  a := b;
  b := temp;
end;
 
 
{Tri par selection du minimum}
 
procedure TriMin(var s : suite);
 
  {Fonction permettant de trouver l'indice du minimum de la suite compris    entre l'indice k et s.long }
 
  function SelectMin(k : integer ; var min : integer): integer;
 
  var result : integer;
 
  begin
 
    if (k > s.long) then SelectMin := min
    else
       begin
 
         if (s.contenu[k] < s.contenu[min]) then min := k;
         SelectMin := SelectMin(k+1,min);
 
       end;
 
  end;
 
  { Tri récursif entre l'indice k et s.long}
 
  procedure TriMinRec(k : integer);
  begin
 
    if k <= s.long then
      begin
        echange(s.contenu[k], s.contenu[SelectMin(k,k)]);
        TriMinRec(k+1);
      end;
  end;
  {Tri récursif entre 1 et s.long}
begin
  TriMinRec(1);
end;
 
  {Programme principal}
 
begin
 
  randomize;
  GenAleatSuite(10, s);
  AfficheSuite(s);
  writeln('longueur de la suite : ',s.long);
  TriMin(s);
  AfficheSuite(s);
 
end.

Si vous avez des pistes où je pourrais chercher.
Merci d'avance de votre aide.