Bonjour
Voilà, je trie une liste chaînée avec un tri à bulle mais, après le tri, elle me sort des valeurs incorrectes - ce qui veux dire que mes pointeurs pointent vers des cellules mémoire qui ne sont pas celles de mon programme. Mais je ne trouve pas où ça plante.
Voici le code :
Je reçois donc dans cette fonction le pointeur du premier élément et le nombre d'éléments de la liste. Je fais donc une boucle sur le nombre d'éléments. Les if servent à savoir si on permute ou non. Si Vpres est vide alors ça veut dire que c'est le premier élément de la liste.
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 Procedure classer(var debutl : Pointskieur; nbskieur : integer); var Vactu, Vpres, Vinter : Pointskieur; fini, permut : boolean; i : integer; BEGIN WriteLn('hello de lu'); Repeat fini := true; Vactu := debutl; Vpres := nil; while Vactu <> nil do begin permut:=false; if Vactu^.temps.min > Vactu^.next^.temps.min then begin fini:= false; permut:= true; end else begin if (Vactu^.temps.min = Vactu^.next^.temps.min) and (Vactu^.temps.sec > Vactu^.next^.temps.sec) then begin fini:= false; permut:= true; end else begin if (Vactu^.temps.min = Vactu^.next^.temps.min) and (Vactu^.temps.sec = Vactu^.next^.temps.sec) and (Vactu^.temps.cen > Vactu^.next^.temps.cen) then begin fini:= false; permut:= true; end; end; end; if permut then begin if Vpres = nil then begin debutl := Vactu^.next; Vinter := Vactu^.next^.next; debutl^.next := Vactu; Vactu^.next := Vinter; end else begin Vpres^.next := Vactu^.next; Vinter := Vactu^.next^.next; Vactu^.next^.next := Vactu; Vactu^.next := Vinter; end; end; Vactu := Vactu^.next end; Until (fini); end;
Voilà, si quelqu'un voit où ça cloche.
Merci de votre aide








Répondre avec citation








Partager