comment trier un tableau par pointeur![]()
![]()
comment trier un tableau par pointeur![]()
![]()
j'ai essayé ça mais ça marche pas. Merci
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 procedure triinsertion; var begin p2:=p; p:=p^lien p2^.lien:=nil; while (p<>nil) do begin if (p^.valeur<p2.valeur)then begin p1:=p; p1^lien:=p2; p2:=p1; end else begin procedure tri; var p,temp1,temp2,min:liste; t:integer; begin temp1:=p; while (temp1<>nil) do begin min:=temp1; temp2:=temp1; while(temp1<>nil) do begin if (min^.valeur>temp2^.valeur) then min:=temp2; temp2:=temp2^.lien; end; t:=temp1^.valeur; temp1^.valeur:=min^.valeur; min^.valeur:=t; temp1:=temp1^.valeur; end; end;
J'ai essayé aussi ça mais ça ne marche pas non plus. Je n'arrive pas à trouver la faille.
Le tri de sélection marche sur le principe de chercher le minimum de toute la liste puis refaire la méthode jusqu'à ce que la liste soit triée.![]()
![]()
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 procedure tri_par_selection; var p:liste; i,j:integer; begin for i:=1 to Llongueur(l)-1 do min:=i; for j:=i+1 to Llongueur(l)do if (p^.lien^.valeur<p^.valeur) then p:=p^.lien; if (i<>min)then begin x:=p^.valeur; p^.lien^.valeur:=p^.valeur; p^.valeur:=x; end; p:=p^.lien; end; end; end;
bonjour, merci, s'il vous plait, balise [code], ca t'evoque quelque chose ??
Bonjour,
Il faudrait commencer par faire un code correct.
Ton code:
ne va même pas compiler (où sont les begin que tous tes end sont censés fermer ?
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 procedure tri_par_selection; var p:liste; i,j:integer; begin for i:=1 to Llongueur(l)-1 do min:=i; for j:=i+1 to Llongueur(l)do if (p^.lien^.valeur<p^.valeur) then p:=p^.lien; if (i<>min)then begin x:=p^.valeur; p^.lien^.valeur:=p^.valeur; p^.valeur:=x; end; p:=p^.lien; end; end; end;
sans parler du 1er code que tu as posté
comment veux-tu que ça compile ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 ... else begin procedure tri; ...
ET faire une indentation correcte, c'est à dire régulière et cohérente
J'aimerais que quelqu'un m'aide pour que le code soit juste :
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 procedure tri_par_selection; var p:liste; i,j:integer; begin for i:=1 to Llongueur(l)-1 do min:=i; for j:=i+1 to Llongueur(l)do if (p^.lien^.valeur<p^.valeur) then p:=p^.lien; if (i<>min)then begin x:=p^.valeur; p^.lien^.valeur:=p^.valeur; p^.valeur:=x; end; p:=p^.lien; end; end; end;
bonjour mais j'ai lu que le dernier code tu devrais nous donner tout le programme dans ce cas pas une procedure peut étre que c'est l'appel qui fonctionne pas
ou est la declaration du type liste et ou est le READLN;
voici le 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
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137 program pointeur; uses wincrt; type liste=^cases; cases=record valeur:integer; lien:liste; end; var l:liste;nombres:integer; procedure ajouter(var l:liste; x:integer); var p:liste; begin new(p); p^.valeur:=x; p^.lien:=l; l:=p; end; function Llongueur (l: Liste): integer; var resultat: integer; begin resultat := 0 ; while l <> nil do begin resultat := 1 + resultat; l := l^.lien; end; Llongueur := resultat; end; procedure tri_de_bulle; var b,p:liste; i:integer; temp:integer;{temp variable de stockage temporaire} begin for i:=1 to Llongueur(l) do begin p:=l; b:=p; p:=p^.lien; while (p<>nil) do begin if (b^.valeur>p^.valeur) then begin temp:=b^.valeur; b^.valeur:=p^.valeur; p^.valeur:=temp; end; b:=p; p:=p^.lien; end; end; end; function triselection(l:liste):liste; var p,p1,result,p2:liste; min:integer; begin if (p <> nil) then { Recherche du minimum } p1 := p; p2 := nil ; min := p^.valeur ; while (p1^.lien <> nil) do begin if (p1^.lien^.valeur < min) then begin min := p1^.lien^.valeur ; p2 := p1 ; end; p1 := p1^.lien ; end; { On supprime le minimum de la liste} if (p2 = nil) then begin p^.lien := triselection(p^.lien) ; (* C2PAS: Exit *) Result := p ; end else begin p1 := p2^.lien ; p2^.lien := p2^.lien^.lien ; p1^.lien := triselection(p) ; (* C2PAS: Exit *) Result := p1 ; end; end; procedure afficher; var p: liste; begin p := l; while p <> nil do begin writeln(p^.valeur); p := p^.lien; end; end; procedure vider; var p, r: liste; begin p := l; while (p <> nil) do begin r := p^.lien; dispose(p); p := r; end; end; begin writeln('entrer les valeurs à ajouter(999 pour quiter):'); readln(nombres); while nombres<>999 do begin ajouter(l,nombres);; readln(nombres); end; triselection(l); writeln('valeurs de la liste trié: '); afficher; readln; vider; end.
Bonjour,
Fais-nous une indentation correcte, après on verra.
tu veux d'abord créer un pointeur donc le lien doit pointer sur le NIL
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 begin new(p); p^.valeur:=x; p^.lien:=NIL; l:=p; end;
Partager