Bonjour,

Je voudrais trier un tableau de coordonnée :

(86,5) (87,4) (88,2) (89,1) (88,3) : points un peu mélangés
qui donne
(86,5) (87,4) (88,3) (88,2) (89,1) : points qui se collent , peuvent se coller en diagonale.

Ca ne marche pas , pouvez-vous m'aider ???

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
 
 program Project1;
 
{$APPTYPE CONSOLE}
 
 
uses
  SysUtils;
 
 
  type txy = record
      x,y : word;
  end;
 
var
  al : array[0..4] of txy;
  nal  :byte;
 
procedure ranger;
var fini : boolean;
    n2,n,x1,y1,x2,y2 : integer;
    dx,dy : integer;
    debug,cestbon : boolean;
label ab;
begin
  repeat
  ab:;
     fini := true;
      for n := 0 to nal-2 do begin
          x1 := al[n].x;
          y1 := al[n].y;
          x2 := al[n+1].x;
          y2 := al[n+1].y;
          dx := abs(x2-x1);
          dy := abs(y2-y1);
          cestbon := false;
          if (dx<2) and (dy<2) then cestbon := true;
          if (not cestbon) then begin
              (*al[n].x := x2;
              al[n].y := y2;
              al[n+1].x := x1;
              al[n+1].y := y1;*)
              debug := false;
              for n2 := 0 to nal-1 do begin
//                if ((n)<>n2) and ((n+1)<>n2) then begin
                if ((n)<>n2)  then begin
                  dx := abs(x1-al[n2].x);
                  dy := abs(y1-al[n2].y);
                  if (dx<2) and (dx<2) then begin
                     x1 := al[n].x;
                     y1 := al[n].y;
                     x2 := al[n2].x;
                     y2 := al[n2].y;
                     al[n].x := x2;
                     al[n].y := y2;
                     al[n2].x := x1;
                     al[n2].y := y1;
                     debug := true;
                     break;
 
                  end;
                end;
              end;
              if (not debug) then
                  debug := debug;
              fini := false;
              //goto ab;
 
          end;
 
      end;
  until fini;
end;
 
 
begin
  { TODO -oUser -cConsole Main : Insert code here }
  al[0].x := 86;
  al[0].y := 5;
 
  al[1].x := 87;
  al[1].y := 4;
 
   al[2].x := 88;
  al[2].y := 2;
 
   al[3].x := 89;
  al[3].y := 1;
 
   al[4].x := 88;
   al[4].y := 3;
   nal := 5; //nombre de coordonnée
   ranger;
end.
merci