Salut tout le monde,

Je travaille en ce moment sur un TP qui a pour but la manipulation des listes chaînées ( http://i.imgur.com/aH9Fr.jpg ).

J'ai un problème au niveau de la procédure "Insert" (qui insert un entier v à sa place dans une liste L supposée triée par ordre croissant).

En effet quand j’exécute l'entier s'ajoute normalement mais après ça me donne une fenêtre d'erreur :



Voilà le programme:
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
102
103
104
105
106
 
PROGRAM TP2;
uses wincrt;
CONST K=20 ;
TYPE TP = array[1..K] of integer ;
     LISTE = ^Maillon;
     Maillon = record
                     info: integer;
                     suiv: liste;
               end;
VAR T: TP;
    N,V: integer;
    L1,L2:liste;
 
 
PROCEDURE affiche(List:liste); {Affiche les éléments d'une liste donnée}
var S:liste;
begin
      writeln('Les éléments de la liste sont:');
     S:=List;
     While S <> nil do
           begin
                write(S^.info,', ');
                S:=S^.suiv;
           end;
     writeln;
end;
 
 
PROCEDURE initvec (var V:TP; N:integer);{initialise un tableau}
var i:integer;
begin
     randomize; {Peut être aussi déclaré à l'interieur de la boucle}
     writeln('Les éléments du vecteur sont:');
     for i:=1 to N do
         begin
              V[i]:= random(101);
              write(V[i],'|');
         end;
     writeln;
end;
 
 
PROCEDURE aff_lis(List:liste); {Affiche les éléments d'une liste donnée}
var S:liste;
begin
      writeln('Les éléments de la liste sont:');
     S:=List;
     While S <> nil do
           begin
                write(S^.info,'|');
                S:=S^.suiv;
           end;
     writeln;
end;
 
 
PROCEDURE ajout(Ve:TP; var La:liste); {ajout des elements d'un vecteur vers une liste}
var i: integer;
    e:liste;
    s:liste;
begin
     for i:=N downto 1 do
         begin
              new(e);
              e^.info:=ve[i];
              e^.suiv:=La;
              La:=E;
         end;
 
     aff_lis(La);
end;
 
 
PROCEDURE insert (var L:liste; x:integer); {inserer v dans une liste triée}
var P,E:liste;
begin
     new(E);
     E^.info:=x;
     if L=nil then L:=E
     else
     begin
          P:=L;
          while P<>nil do if x>p^.info then p:=p^.suiv;
                E^.suiv:=P^.suiv;
                P^.suiv:=E;
     end;
     aff_lis(L);
end;
 
 
{programme principal}
BEGIN
     repeat
        writeln('Donnez une valeur à N inférieure à ',K);
        readln(N);
     until  (N<=K);
 
     writeln('N= ',N);
     initvec(T,N);
     ajout(T,L1);
     writeln('V= ?');
     readln(v);
     insert(L2,v);
 
END.
Merci d'avance !!