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
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.
Le tri par insertion
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
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.
- La recherche séquentielle qui consiste à parcourir une liste de valeur jusqu'à trouver la valeur cherchée ou atteindre la fin de la liste.
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
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.
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
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)
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.
Merci d'avance pour vos réponses