Résumé de discussion Le 7/05
Le tri par selection :
Pour avoir une idée sur ce principe jete un coup d'oeil sur ce lien
http://darkskull.developpez.com/triselection/
et voila le code que j'ai fait
Le tri par insertion
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 Program triselection ; uses wincrt ; type tab=array [1..20] of integer ; var n,x,p : integer ; t : tab ; procedure saisie (var n : integer ; var t :tab ); var i : integer ; begin repeat writeln('Saisir la taille du tableau :'); readln(n); until n in [5..20] ; For i:= 1 to n do begin repeat writeln('Saisir l''élément',i) ; readln(t[i]) ; until (t[i] > 0) end; end; function pos_max(n : integer ;t :tab; p :integer):integer ; var max,i : integer ; Begin max:=p ; for i:= p to n do begin if t[i]>t[max] then max:=i ; end; pos_max:=max ; End; procedure trie (n : integer ; var t :tab ) ; var i,max,p : integer ; Begin for i:= 1 to n-1 do begin p:=pos_max(n,t,i); x:=t[i]; t[i]:=t[p]; t[p]:=x ; end; End; procedure affiche (n : integer ; t :tab) ; var i : integer ; Begin for i:= 1 to n-1 do begin write(t[i]); write('|'); end; write(t[n]); End; Begin saisie(n,t); trie(n,t); affiche(n,t); End.
Pour avoir une idée sur ce principe jete un coup d'oeil sur ce lien
http://lwh.free.fr/pages/algo/tri/tri_insertion.htm
et voila le code que j'ai fait
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 Program triinsertion ; uses wincrt ; type tab=array[1..20] of integer ; var n,x,i : integer ; t: tab ; procedure saisie (var n : integer ;var t:tab); var i : integer ; Begin repeat writeln('saisir la taille du tableau :'); readln(n); until n in [5..20] ; For i:= 1 to n do begin repeat writeln('Saisir l''element ',i); readln(t[i]); until t[i] > 0 ; end; End; function position (t:tab ; i : integer ): integer ; var j : integer ; Begin j:=0 ; repeat j:=j+1 ; until t[j] >= t[i] ; position:=j ; End; procedure tri(var t : tab ; n:integer ); var int,i,j,p : integer ; Begin for i:=2 to n do begin p:=position(t,i); if p <> i then begin int:=t[i] ; for j :=i-1 downto p do begin t[j+1]:=t[j] ; end; t[p]:=int ; end; end; End; procedure affiche (var t :tab ; n : integer ); var i:integer ; begin for i:= 1 to n-1 do begin write(t[i]); write('|'); end; write(t[n]); end; begin saisie(n,t); x:=position(t,i); tri(t,n); affiche(t,n); end.
Le Tri a bulle :
Pour avoir une idée sur ce principe jete un coup d'oeil sur ce lien
http://lwh.free.fr/pages/algo/tri/tri_bulle.htm
et voila le code que j'ai fait
- La recherche séquentielle qui consiste à parcourir une liste de valeur jusqu'à trouver la valeur cherchée ou atteindre la fin 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
60 program tri_tab; uses wincrt; type tab= array [1..25] of integer; var t:tab; n:integer; procedure saisie(var n:integer; var t:tab); var i:integer; begin repeat writeln('donnner le nbre d''element du tableau'); read(n); until n in [5..25]; For i:=1 to n do begin writeln('donner l''element ',i); read(t[i]); end; end; procedure tri(n:integer; var t:tab); var verif:boolean; i,x:integer; begin repeat verif:=true; for i := 1 to n-1 do begin if t[i]>t[i+1] then begin x:=t[i]; t[i]:=t[i+1]; t[i+1]:=x; verif:=false; end; end; until verif=true; end; procedure affiche(n:integer; t:tab); var i:integer; begin write('| '); for i:=1 to n do begin write(t[i],' | '); end; end; BEGIN saisie(n,t); tri(n,t); affiche(n,t); END.
voila le programme que j'ai fait
La recherche dichotomique: qui consiste à chercher en subdivisant la série ordonnée en deux parties égales et vérifier dans quelle partie figurerait la valeur recherchée,puis réitérer ce processus
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 program sequentielle ; uses wincrt ; type tab = array [1..20] of integer ; var t : tab ; n,e : integer ; x : boolean ; procedure saisie ( var n,e : integer ;var t :tab); var i : integer ; begin repeat writeln('Saisir la taille du tableau :'); readln(n); until n in [5..20]; for i:= 1 to n do begin repeat writeln('Saisir l''élement ',i); readln(t[i]); until t[i] > 0 ; end; writeln('saisir un entier :'); readln(e); end; function existe (n,e : integer ; t :tab) : boolean ; var i : integer ; verif : boolean ; begin verif := false ; i:=1 ; repeat i:=i+1 until (t[i]=e) or (i=n) ; if t[i]=e then verif:=true else verif:=false ; existe:=verif ; end; begin saisie(n,e,t); x:=existe(n,e,t); if x=true then writeln(e,' existe dans le tableau') else if x=false then writeln(e,' n''existe pas dans le tableau'); end.
Voila le programme que j'ai fait
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 program dichotomique ; uses wincrt ; type tab = array [1..20] of integer ; var t : tab ; n,e : integer ; x : boolean ; procedure saisie ( var n,e : integer ;var t :tab); var i : integer ; begin repeat writeln('Saisir la taille du tableau :'); readln(n); until n in [5..20]; for i:= 1 to n do begin repeat writeln('Saisir l''élement ',i); readln(t[i]); until t[i] > 0 ; end; writeln('saisir un entier :'); readln(e); end; function existe (n,e : integer ; t :tab) : boolean ; var i,bi,bs : integer ; x : boolean ; begin x:=false ; bi:=1 ; bs:=n ; repeat n:=(bi+bs) div 2 ; if t[n] = e then x:=true else if t[n] < e then bi:=n+1 else bs:=n-1 ; until (x=true) or (bi >= bs) ; end; begin saisie(n,e,t); x:=existe(n,e,t); if x=true then writeln(e,' existe dans le tableau') else if x=false then writeln(e,' n''existe pas dans le tableau'); end.Salut tout le monde ,
voila je n'arrive par a faire un programme pascal qui puisse trier un tableau en ordre décroissant par le principe de trie par séléction
Si vous ne connaissez pas cet algorithme de trie par séléction cliquer sur ce lien
http://darkskull.developpez.com/triselection/
voila mon essai (e que j'ai pu faire)
Merci d'avance pour vos réponses
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 Program triinsertion ; uses wincrt ; type tab=array [1..25] of integer ; var n : integer ; t : tab ; procedure saisie (var n : integer ; var t :tab ); var i : integer ; begin repeat writeln('Saisir le nombre d''éléments :'); readln(n); until n in [5..25] ; For i:= 1 to n do begin repeat writeln('Saisir l''élément',i) ; readln(t[i]) ; until (t[i] < 30) and (t[i] > 0) end; end; function trie (n : integer ; t :tab ):integer ; var i,max,long,x : integer ; begin long:=1 ; max:=0 ; repeat for i:= long to n-1 do begin if t[i] > t[max] then max:=i ; end; x:=t[long] ; t[max]:=x ; t[long]:=t[max] ; long:=long+1 until long=n-1 ; end; procedure affiche (n : integer ; t :tab) ; var i : integer ; begin for i:= 1 to n-1 do begin write('"'); write(t[i]); end; end; begin saisie(n,t); trie(n,t); affiche(n,t); end.
Partager