Les Algorithmes de tri

publicité
Série N° 01
Les Algorithmes de tri
Exercice N° 1 :
Ecrire une analyse et l’algorithme d’un programme qui permet de remplir un tableau t avec n entiers,
dont n entre [3...30], puis trier le tableau par ordre croissant en utilisant le tri à bulle.
NB : la solution doit comporter le nombre minimal de permutations
Tri_a_bulles
Afficher le contenu
du tableau
Saisir le nombre
de cases d’un
tableau
Proc Saisir
Remplir le tableau
par n entiers
Afficher le contenu
du tableau
Proc Tri
Proc Remplir
Analyse du programme Principal
S
4
3
2
1
5
Nom = Tri_a_bulles
L.D.E
Résultat = Proc Affiche (T, n)
T trié = Proc Tri (T, n)
T rempli = Proc Remplir (T, n)
n = Proc saisir (n)
Fin Entreprise
Algorithme
0) Début Tri_a_bulles
1) Proc saisir (n)
2) Proc Remplir (T, n)
3) Proc Tri (T, n)
4) Proc Affiche (T, n)
5) Fin Entreprise
Tableau de déclaration des nouveaux types
Type
Tab = tableau de 30 entiers
O.U
Affiche, T
Tri
Remplir, saisir
n
Proc Affiche
Tableau de déclaration des objets Globaux
Objet
Affiche
T
Tri
Remplir
saisir
n
T/N
procédure
Tab
Procédure
procédure
procédure
entier
Rôle
Permet d’afficher le contenu du tableau
Un tableau d’entiers
Permet de trié un tableau d’entiers
Permet de remplir un tableau d’entiers
Permet de saisir la taille du tableau
La taille du tableau
Analyse de la procédure Saisir
DEF PROC Saisir (var n : entier)
L.D.E
S
O.U
Résultat = n
n = []
Répéter
1
n = Donnée ("La taille du tableau ")
Jusqu’à (n dans [3 .. 30])
Fin Saisir
2
Algorithme
0) Début PROC Saisir (var n : entier)
1) Répéter
Ecrire ("La taille du tableau "), lire(n)
Jusqu’à (n dans [3 .. 30])
2) Fin Saisir
Analyse de la procédure Remplir
DEF PROC Remplir (var T : tab ; n : entier)
L.D.E
S
1
2
Résultat = T
T=[]
Pour i de 1 à n faire
T[i] = donnée ("t [", i, "]")
fin pour
i = compteur
Fin Remplir
Algorithme
0) Début PROC Remplir (var T : tab ; n : entier)
1) Pour i de 1 à n faire
O.U
i
Ecrire ("t [", i, "]")
Lire (T[i])
Fin pour
2) Fin Remplir
Analyse de la procédure Tri
DEF PROC Tri (T : tab ; n : entier)
L.D.E
S
Résultat = Ttrié
Ttrié = [ ]
répéter
permute <– faux
Pour i de 1 à n-1 faire
Si t[i] > t [i+1] alors
aux <-- t[i]
t[i] <-- t [i+1])
t [i+1] <-- aux
permute <– vrai
Fin si
Fin pour
n <– n-1
Jusqu’ à (permute = faux) ou (n=1)
i = compteur
Fin Affiche
1
2
O.U
Permute
i
aux
Algorithme
0) Début Proc Tri (n : entier ; var t : tab)
1) répéter
permute <– faux
Pour i de 1 à n-1 faire
Si t[i] > t [i+1] alors
aux <-- t[i]
t[i] <-- t [i+1])
t [i+1] <-- aux
permute <– vrai
Fin si
Fin pour
n <– n-1
Jusqu’ à (permute = faux) ou (n=1)
2) Fin Tri
Analyse de la procédure Affiche
DEF PROC Affiche (T : tab ; n : entier)
L.D.E
S
Résultat = Affiche
O.U
1
2
Affiche = [ ]
Pour i de 1 à n faire
Ecrire ("t [", i, "]")
Lire (T[i])
fin pour
i = compteur
Fin Affiche
i
Algorithme
0) Début PROC Affiche (T : tab ; n : entier)
1) Pour i de 1 à n faire
Ecrire ("t [", i, "]")
Lire (T[i])
Fin pour
2) Fin Affiche
Exercice N° 2 :
Ecrire une analyse et l’algorithme d’un programme qui permet de remplir un tableau t avec n
caractères, dont n entre [3...30], puis trier le tableau par ordre croissant en utilisant le tri par
sélection.
NB : la solution doit comporter une fonction qui calcule la position du minimum.
Tri_par_sélection
Afficher le contenu
du tableau
Saisir le nombre
de cases d’un
tableau
Proc Saisir
Remplir le tableau
par n caractères
Afficher le contenu
du tableau
Proc Tri
Proc Remplir
Calcul position
minimum
FN TPosmin
Proc Affiche
Analyse du programme Principal
S
4
3
2
1
5
Nom = Tri_par_sélection
L.D.E
Résultat = Proc Affiche (T, n)
T trié = Proc Tri (T, n)
T rempli = Proc Remplir (T, n)
n = Proc saisir (n)
Fin Entreprise
O.U
Affiche, T
Tri
Remplir, saisir
n
Algorithme
0) Début Tri_a_bulles
1) Proc saisir (n)
2) Proc Remplir (T, n)
3) Proc Tri (T, n)
4) Proc Affiche (T, n)
5) Fin Entreprise
Tableau de déclaration des nouveaux types
Type
Tab = tableau de 30 caractères
Tableau de déclaration des objets Globaux
Objet
Affiche
T
Tri
Remplir
saisir
n
T/N
procédure
Tab
Procédure
procédure
procédure
entier
Rôle
Permet d’afficher le contenu du tableau
Un tableau d’entiers
Permet de trié un tableau de caractères
Permet de remplir un tableau de n caractères
Permet de saisir la taille du tableau
La taille du tableau
Analyse de la procédure Saisir
DEF PROC Saisir (var n : entier)
L.D.E
S
1
Résultat = n
n = []
Répéter
n = Donnée ("La taille du tableau ")
2
Jusqu’à (n dans [3 .. 30])
Fin Saisir
O.U
Algorithme
0) Début PROC Saisir (var n : entier)
1) Répéter
Ecrire ("La taille du tableau "), lire(n)
Jusqu’à (n dans [3 .. 30])
2) Fin Saisir
Analyse de la procédure Remplir
DEF PROC Remplir (var T : tab ; n : entier)
L.D.E
S
Résultat = T
T=[]
Pour i de 1 à n faire
Répéter
T[i] = donnée ("t [", i, "]")
Jusqu’à t[i] dans ["A".."Z"]
fin pour
i = compteur
Fin Remplir
1
2
O.U
i
Algorithme
0) Début PROC Remplir (var T : tab ; n : entier)
1) Pour i de 1 à n faire
Ecrire ("t [", i, "]")
Lire (T[i])
Fin pour
2) Fin Remplir
Analyse de la procédure Tri
S
1
DEF PROC Tri (T : tab ; n : entier)
L.D.E
Résultat = Ttrié
T=[]
pour i de 1 à n-1 faire
pmin = FN TPosmin (i+1, n, t) ;
Si ord(t [pmin]) < ord(t[i]) alors
Permut (t [pmin], t[i])
Fin pour
O.U
Pmin, i
TPosmin
Permut
i = compteur
Fin Tri
2
Algorithme
0) Début procédure Tri (var t : tab ; n : entier)
1) pour i de 1 à n-1 faire
pmin = FN Posmin (i+1, n, t) ;
Si t ord(t [pmin]) < ord(t[i]) alors
Permut (t [pmin], t[i])
Fin pour
2) Fin Tri
Analyse de la fonction TPosmin
S
3
1
2
DEF FN TPosmin (d, n : entier, t : tab) : Entier
L.D.E
Résultat = TPosmin  posmin
T = [ posmin  d]
pour i de d+1 à n faire
Si (ord(t[i]) < ord(t [posmin])) alors
Posmin  i ;
Fin pour
O.U
posmin
i = compteur
Fin Tri
4
Algorithme
0) Début FN TPosmin (d, n : entier, t : tab) : Entier
1) posmin  d
2) pour i de d+1 à n faire
Si (ord(t[i]) < ord(t [posmin])) alors
Posmin  i ;
Fin pour
3) Tposmin  posmin
4) Fin Tposmin
Analyse de la procédure Affiche
S
1
DEF PROC Affiche (T : tab ; n : entier)
L.D.E
Résultat = Affiche
Affiche = [ ]
Pour i de 1 à n faire
O.U
i
2
Ecrire ("t [", i, "]")
Lire (T[i])
fin pour
i = compteur
Fin Affiche
Algorithme
0) Début PROC Affiche (T : tab ; n : entier)
1) Pour i de 1 à n faire
Ecrire ("t [", i, "]")
Lire (T[i])
Fin pour
2) Fin Affiche
Téléchargement