salut les programmeurs ;
J'ai un petit problème concernant le tri Shell ;
voilà tout dabord son code :

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
procedure trishell (var t:tab; n:integer ) ;
 var    p,i,j,v: integer;
 begin    
     p:=0;
     while p<= n do    
     p:= 3*p+1;
     while p <> 0 do
      begin
          p:=p div 3;
          for i:= p to n do
           begin
                v:=t[i];
                j:=i;
                while (j > p-1) and (t[j-p] > v ) do
                 begin
                      t[j]:=t[j-p];
                      j:=j-p;
                 end;
                t[j]:=v;
           end;
      end;
 end;
et le problème se trouve au niveau de décalage ; c'est à dire au niveau :
while (j > p-1) and (t[j-p] > v ) do
cette instruction va nous amener à l'indice zéro (t[0] ) !!!! c'est mon problème ? est alors ! y-a-t-il une solution ?
une remarque tres importante : si ma remarque concernant cette boucle est dans sa place, alors les livres scolaires (4 ieme SI) est aussi mal rédiger
car ils comportes tous cette solution ?

MErci d'avance