• Aucun résultat trouvé

Les algorithmes de tri et de

N/A
N/A
Protected

Academic year: 2022

Partager "Les algorithmes de tri et de"

Copied!
7
0
0

Texte intégral

(1)

I.

Tri par sélection :

Enoncé : Soit à trier un tableau T de n entiers (3<=n<=30) dans l’ordre croissant en utilisant la méthode de tri par sélection.

1. Analyse :

Analyse de la procédure saisie

DEF PROC saisie (var t :tab ; var n :entier) Résultat=t,n

Pour i de 1àn faire T[i]= donnée (¨t[¨,i, ¨ ]= ¨) Fin pour

Repeter

N=donnée(¨Donner la taille du tableau¨) Jusqu’a n dans [3..30]

Analyse de la procédure permuter DEF PROC permuter(var x,y :entier) Résultat=x,y

Aux ← x X ← y Y ← aux

Analyse de la fonction pos_min

DEF FN pos_min(v :tab ;m :entier) :entier Résultat=posmin

Posmin ← m

Pour k de m+1 à n faire

Si v[k] < v[posmin] alors posmin :=k Finsi

Fin pour

Pos_min ← posmin

Analyse de la procédure tri_selection DEF PROC tri_selection (var t :tab) Résultat=T trié

Pour i de 1 à n faire Pm ← pos_min(t,i)

Si t[pm]<> t[i] alors permuter(t[pm],t[i]) Finsi

Finpour

Analyse de la procédure affiche DEF PROC Affiche( t :tab) Résultat = Affichage Pour i de 1 à n faire Ecrire(t[i], ¨ ¨) finpour Analyse du pp

Résultat = Proc Affiche(t) Proc tri_selection(t) Proc Saisie(t,n) 2. Algorithmes :

Algorithme de la procedure Saisie

0) DEF PROC Saisie(var t :tab ; var n :entier)

1) Repeter

Ecrire(¨Donner la taille du tableau¨), lire (n)

Jusqu’a n dans [3..30]

2) Pour i de 1àn faire

Ecrire (¨t[¨,i, ¨ ]= ¨), Lire(T[i]) Fin pour

3) Fin Saisie

Algorithme de la procedure Permuter 0) DEF PROC permuter(var x,y :entier) 1) aux ← x

2) X ← y 3) Y ← aux 4) Fin Permuter

Algorithme de la fonction Pos_min

0) DEF FN pos_min(v :tab ;m :entier) :entier 1) Posmin ← m

2) Pour k de m+1 à n faire Si v[k] < v[posmin] alors posmin :=k

Finsi Fin pour

3) Pos_min ← posmin 4) Fin Pos_min

Algorithme de la procedure tri_selection 0) DEF PROC tri_selection (var t :tab) 1) Pour i de 1 à n-1 faire

pm ← pos_min(t,i) Si t[pm]<> t[i] alors permuter(t[pm],t[i]) Finsi

Finpour

2) Fin tri_selection

Algorithme de la procedure Affiche 0) DEF PROC Affiche( t :tab) 1) Pour i de 1 à n faire Ecrire(t[i], ¨ ¨) Finpour

2) Fin Affiche Algorithme du pp

0) Début Tri_select 1) Proc saisie(t,n) 2) Proc Tri_selection(t) 3) Proc affiche(t) 4) Fin Tri_select

Les algorithmes de tri et de

(2)

4 ème

S-e Chapitre 4 : Les algorithmes de tri et de recherche xp

3. Traduction Pascal :

program tri_select;

uses wincrt;

type

tab=array[1..30] of integer;

var t:tab;

n:integer;

procedure saisie(var t:tab;var n:integer);

var i:integer;

begin repeat

write('Donner la taille du tableau '); readln(n);

until n in [1..30];

for i:=1 to n do begin

write('t[',i,']= ');

readln(t[i]);

end;

end;

procedure tri_selection(var t:tab);

var

i,pm:integer;

function pos_min(v:tab;m:integer):integer;

var

posmin,k:integer;

begin posmin:=m;

for k:=m+1 to n do

if t[k]<t[posmin] then posmin:=k;

pos_min:=posmin;

end;

procedure permuter(var x,y:integer);

var

aux:integer;

begin aux:=x;

x:=y;

y:=aux;

end;

begin

for i:= 1 to n-1 do begin

pm:=pos_min(t,i);

if t[pm]<>t[i] then permuter(t[pm],t[i]);

end;

end;

procedure affiche ( t:tab);

var i:integer;

begin

for i:= 1 to n do write(t[i],' ');

end;

begin saisie(t,n);

tri_selection(t);

affiche(t);

end.

II.

Tri à bulles :

Enoncé : Soit à trier un tableau T de n entiers (3<=n<=30) dans l’ordre croissant en utilisant la méthode de tri à bulles.

1.

Analyse :

Analyse de la procédure saisie

DEF PROC saisie (var t :tab ; var n :entier) Résultat=t,n

Pour i de 1àn faire T[i]= donnée (¨t[¨,i, ¨ ]= ¨) Fin pour

Repeter

N=donnée(¨Donner la taille du tableau¨) Jusqu’a n dans [3..30]

Analyse de la procédure permuter DEF PROC permuter(var x,y :entier) Résultat=x,y

Aux ← x X ← y Y ← aux

Analyse de la procédure tri_bulles DEF PROC tri_bulles (var t :tab) Résultat=T trié

T trié= [ ] Repeter

Echange ← faux Pour i de 1 à n-1 faire Si t[i] > t[i+1] alors permuter(t[i+1],t[i]) echange ← vrai Finsi

Finpour

Jusqu’à Echange=faux Analyse de la procédure affiche DEF PROC Affiche( t :tab) Résultat = Affichage Pour i de 1 à n faire Ecrire(t[i], ¨ ¨) finpour Analyse du pp

Résultat = Proc Affiche(t)

(3)

Ttrié=Proc tri_bulles(t) T,n= Proc Saisie(t,n) 2.

Algorithmes :

Algorithme de la procedure Saisie

0)DEF PROC Saisie(var t :tab ; var n :entier) 1) Repeter

Ecrire(¨Donner la taille du tableau¨), lire (n)

Jusqu’a n dans [3..30]

2)Pour i de 1àn faire

Ecrire (¨t[¨,i, ¨ ]= ¨), Lire(T[i]) Fin pour

3)Fin Saisie

Algorithme de la procedure Permuter 0) DEF PROC permuter(var x,y :entier) 1) aux ← x

2) X ← y 3) Y ← aux 4) Fin Permuter

Algorithme de la procedure tri_bulles 0) DEF PROC tri_bulles (var t :tab) 1) Repeter

Echange ← faux Pour i de 1 à n-1 faire

Si t[i] > t[i+1] alors permuter(t[i+1],t[i]) Echange ← vrai Finsi

Finpour

Jusqu’à Echange ← faux 2) Fin tri_bulles

Algorithme de la procedure Affiche 0) DEF PROC Affiche( t :tab) 1) Pour i de 1 à n faire 2) Ecrire(t[i], ¨ ¨) Finpour

3) Fin Affiche Algorithme du pp

0) Début Tri_a_bulles 1) Proc saisie(t,n) 2) Proc Tri_bulles(t) 3) Proc affiche(t) 4) Fin Tri_a_bulles

2 Traduction Pascal :

program tri_a_bulles;

uses wincrt;

type

tab=array[1..30] of integer;

var t:tab;

n:integer;

procedure saisie(var t:tab;var n:integer);

var i:integer;

begin repeat

write('Donner la taille du tableau '); readln(n);

until n in [1..30];

for i:=1 to n do begin

write('t[',i,']= ');

readln(t[i]);

end;

end;

procedure tri_bulles(var t:tab);

var i:integer;

echange:boolean;

procedure permuter(var x,y:integer);

var

aux:integer;

begin

aux:=x;

x:=y;

y:=aux;

end;

begin repeat

echange:=false;

for i:= 1 to n-1 do if t[i]>t[i+1] then begin

echange:=true;

permuter(t[i+1],t[i]);

end;

until echange=false;

end;

procedure affiche ( t:tab);

var i:integer;

begin

for i:= 1 to n do write(t[i],' ');

end;

begin saisie(t,n);

tri_bulles(t);

affiche(t);

end.

(4)

4 ème

S-e Chapitre 4 : Les algorithmes de tri et de recherche xp

III.

Tri par insertion :

1.

Analyse :

Analyse de la procédure saisie

DEF PROC saisie (var t :tab ; var n :entier) Résultat=t,n

Pour i de 1àn faire T[i]= donnée (¨t[¨,i, ¨ ]= ¨) Fin pour

Repeter

N=donnée(¨Donner la taille du tableau¨) Jusqu’a n dans [3..30]

Analyse de la procédure Tri_insertion DEF PROC tri_insertion (var t :tab) Résultat = Ttrié

Ttrié= [ ]

Pour i de 2 à n faire k ← T[i]

j ← i-1

Tant que ( j >=1) et (T[ j ]>k) faire t[ j+1 ] ← t[ j ]

j ← j - 1 Fin Tant que t[ j+1 ] ← k

Finpour

Analyse de la procédure affiche DEF PROC Affiche( t :tab) Résultat = Affichage Pour i de 1 à n faire Ecrire(t[i], ¨ ¨) finpour Analyse du pp

Résultat = Proc Affiche(t)

Ttrié =Proc tri_Insertion(t) T,n = Proc Saisie(t,n)

2.

Algorithmes :

(5)

2) Pour i de 1àn faire Ecrire (¨t[¨,i, ¨ ]= ¨), Lire(T[i]) Fin pour

3) Fin Saisie

Algorithme de la procedure tri_insertion

0) DEF PROC tri_insertion (var t :tab) 1) Pour i de 2 à n faire

k ← T[i]

j ← i-1

Tant que ( j >=1) et (T[ j ]>k) faire t[ j+1 ] ← t[ j ]

j ← j - 1 Fin Tant que t[ j+1 ] ← k

Finpour 2) Fin tri_insertion

Algorithme de la procedure Affiche 0) DEF PROC Affiche( t :tab) 1) Pour i de 1 à n faire Ecrire(t[i], ¨ ¨) Finpour

2) Fin Affiche Algorithme du pp

0) Début Tri_insertion 1) Proc saisie(t,n) 2) Proc Tri_insertion(t) 3) Proc affiche(t) 4) Fin Tri_select

3.

Traduction Pascal : program tri_insert;

uses wincrt;

type

tab=array[1..30] of integer;

var t:tab;

n:integer;

procedure saisie(var t:tab;var n:integer);

var i:integer;

begin repeat

write('Donner la taille du tableau '); readln(n);

until n in [1..30];

for i:=1 to n do

begin

(6)

write('t[',i,']= ');

readln(t[i]);

end;

end;

Procedure Tri_insertion( var t : tab);

var i, j, k : integer;

begin for i:=2 to n do

begin k := t[i]; (* k est la valeur à insérer dans l'endroit approprié du tableau *)

(* On décale toutes les valeurs du tableau < k à droite pour vider une place pour k *) j := i - 1;

while (j >= 1) and (t[j] > k) do begin

t[j + 1] := t[j];

j := j - 1;

end;

(* finalement la valeur k est insérée à son emplacement adéquat *) t[j + 1] := k;

end;

end;

procedure affiche (var t:tab);

var i:integer;

begin

for i:= 1 to n do write(t[i],' ');

end;

begin saisie(t,n);

tri_insertion(t);

affiche(t);

end.

2. Recherche séquentielle :

program recherche_sequentielle;

uses wincrt;

type

tab=array[1..30] of integer;

var t:tab;

e,n:integer;

procedure saisie(var t:tab;var n:integer);

var i:integer;

begin repeat

write('Donner la taille du tableau '); readln(n);

until n in [1..30];

for i:=1 to n do

(7)

end;

function recherche(t:tab;x:integer):boolean;

var i:integer;

tr:boolean;

begin i:=0;

tr:=false;

repeat i:=i+1;

if x=t[i] then tr:=true;

until (tr) or (i=n);

recherche:=tr;

end;

begin saisie(t,n);

write('donner un entier '); readln(e);

if recherche(t,e) then write(e,' existe') else write(e,' n''existe pas');

end.

3. Recherche dichotomique :

program recherche_dichotomique;

uses wincrt;

type

tab=array[1..30] of integer;

var t:tab;

e,n:integer;

procedure saisie(var t:tab;var n:integer);

var i:integer;

begin repeat

write('Donner la taille du tableau '); readln(n);

until n in [1..30];

for i:=1 to n do begin

write('t[',i,']= ');

readln(t[i]);

end;

end;

function recherche(t:tab;x:integer):boolean;

var

d,g,i:integer;

(8)

begin g:=1;

d:=n;

repeat

i:=(d+g) div 2;

if x<t[i] then d:=i-1 else g:=i+1;

until (x=t[i]) or (g>d);

if x=t[i] then recherche:=true else recherche:=false;

end;

begin saisie(t,n);

write('donner un entier '); readln(e);

if recherche(t,e) then write(e,' existe') else write(e,' n''existe pas');

end.

Références