Académique Documents
Professionnel Documents
Culture Documents
INF1425 - Travail-Pratique - Version 6
INF1425 - Travail-Pratique - Version 6
TRAVAIL PRATIQUE
25 points
■
Remplissez soigneusement cette feuille d’identité.
■
Rédigez votre travail à la page suivante, à la suite de cette feuille.
■
Respectez les espaces réservés pour la personne tutrice.
■
Sauvegardez votre travail de cette façon : INF1425_TP_VOTRENOM.doc
■
Utilisez le Dépôt des travaux pour acheminer votre travail à votre personne tutrice.
Feuille d’identité
Nom: Romero Francia
Note
Commentaires :
_________________
_________________
_________________
_________________
Exercice 1. Les tableaux (8 points)
(1)
Pseudo-code :
Fonction Calcul_Nombre_Eleves_Classe_Iterative(Liste_Eleve : Tableau; nmax : Entier; Prenom : chaine; nom : chaine) : Entier
Variable :
i, nombre_eleves : Entier
Début :
nombre_eleves 0
Pour(i=1 à nmax) Faire
Si (Taille de Prenom≤20 et Taille de Nom≤20) Alors
Lire(Prenom, Nom)
Écrire(Prenom, Nom)
nombre_eleves nombre_eleves+1
Fin Si
Fin Pour
Retourner nombre_eleves
Fin.
Note : l’auteur du présent document AIME afficher la liste complète de tous les étudiants d’une classe X (et de toute structure de données
quelconque), pour ensuite réaliser le calcul du nombre d’élèves de cette classe X (et tout type de calcul et opération quelconque)!
(2)
Pseudo-code1 :
Fonction Calcul_Nombre_Eleves_Classe_Recursive(Liste_Eleve : Tableau; nmax : Entier; Prenom : chaine; nom : chaine) : Entier
Variable :
nombre_eleves : Entier
Début :
Si (nombre_eleves=-1) Alors
nombre_eleves0
Sinon Si (nombre_eleves=nmax) Alors
Retourner nombre_eleves
Sinon Si(Taille de Prenom≤20 et Taille de Nom≤20 et nombre_eleves˂nmax) Alors
Lire(Prenom, Nom)
Écrire(Prenom, Nom)
Retourner nombre_eleves Calcule_Nombre_Eleves_Classe_Recursive(nombre_eleves+1)
Fin Si
Fin.
Note : l’auteur du présent document AIME afficher la liste complète de tous les étudiants d’une classe X (et de toute structure de données
quelconque), pour ensuite réaliser le calcul du nombre d’élèves de cette classe X (et tout type de calcul et opération quelconque)!
1 : Voir l’annexe du présent document, car il contient la compilation de chacune des lignes de code du pseudo-code ci-dessus, qui démontre la
validité de ce pseudo-code.
(3)
La forme itérative de la fonction créé à la question 1, de l’exercice #1, a une complexité algorithmique de l’ordre (n), c-à-d, que cet algorithme
parcourt toute la table fournie dans l’énoncé de cet exercice, afin de lire tous les prénoms et tous les noms des étudiants d’une classe
quelconque, tandis que la forme récursive résout, de manière simple et plus rapide, la détermination du nombre d’étudiants de cette classe.
La forme récursive détermine ce nombre d’étudiant de cette classe, tout en décomposant le problème principal, en des sous-problèmes de
complexité algorithmique moindre et identique, pour chacun de ces sous-problèmes. Ceci ayant été dit, le complexité algorithmique de ces sous-
problèmes, fournis par la forme récursive, de la fonction de la question 2, de l’exercice 1, est de l’ordre (1).
3
INF 1425 – Travail pratique
1. Le principe d’empilage et de dépilage est de type LIFO : dernier entré, premier sorti.
2. La complexité algorithmique des opérations Pile Vide(P), Empiler(P) et Dépiler(P) est de l’ordre (1), c-à-d, que la complexité algorithmique
de ces trois types D’opérations dans une pile P est constante, et que le temps d’exécution n’augmente pas lorsque la taille de la pile
augmente.
3. Dans une pile P, pour chercher et trouver un élément x appartenant à cette pile P, il faut seulement dépiler, jusqu’à ce que l’on trouve
l’élément recherché, le dépilage prenne un temps d’exécution constant et de valeur moindre.
(2)
Algorithme Ajouter_Un_Element_Dans_Une_Pile_P(P : Pile; x : élément)
Début :
P.sommetP.sommet+1
P[P.sommet]x
Fin.
4
INF 1425 – Travail pratique
(3)
Fonction Algorithme_Calculer_Nombre_Elements_Dans_Une_Pile(P : Pile; x : élément)à
Début :
Retourner P.sommet
Fin.
(4)
Actions sur une pile vide P:
Empiler(10)→10
↑
P.sommet
Empiler(3)→10 3
↑
P.sommet
Dépiler()→10
↑
P.sommet
Empiler(12)→10 12
↑
P.sommet
Empiler(84)→10 12 84
↑
P.sommet
Dépiler()→10 12
↑
P.sommet
5
INF 1425 – Travail pratique
Dépiler()→10
↑
P.sommet
Empiler(19)→10 19
↑
P.sommet
Empiler(20)→10 19 20
↑
P.sommet
Dépiler()→10 19
↑
P.sommet
Empiler(17)→10 19 17
↑
P.sommet
Empiler(16)→10 19 17 16
↑
P.sommet
Dépiler()→10 19 17
↑
P.sommet
Dépiler()→10 19
↑
P.sommet
6
INF 1425 – Travail pratique
Empiler(4)→10 19 4
↑
P.sommet
Dépiler()→10 19
↑
P.sommet
Dépiler()→10
↑
P.sommet
(5)
Algorithme Ajouter_Un_Element_Dans_Une_File_F(F : File; x : élément)
Début :
F[F.queue]x
Si (F.queue==F.longueur) Alors
F.queue=1
Sinon
F.queueF.queue+1
Fin Si
Fin.
7
INF 1425 – Travail pratique
(6)
Actions sur une file vide :
Enfiler(51)→ 51
↑
F.tête
Enfiler(61)→ 51 61
↑ ↑
F.tête F.queue
Défiler()→ 61
↑
F.tête
Enfiler(21)→ 61 21
↑ ↑
F.tête F.queue
Enfiler(81)→ 61 21 81
↑ ↑
F.tête F.queue
Défiler()→ 21 81
↑ ↑
F.tête F.queue
Défiler()→ 81
↑
F.tête
Enfiler(9)→ 81 9
↑ ↑
F.tête F.queue
8
INF 1425 – Travail pratique
Enfiler(10)→ 81 9 10
↑ ↑
F.tête F.queue
Défiler()→ 9 10
↑ ↑
F.tête F.queue
Enfiler(17)→ 9 10 17
↑ ↑
F.tête F.queue
Enfiler(16)→ 9 10 17 16
↑ ↑
F.tête F.queue
Défiler()→ 10 17 16
↑ ↑
F.tête F.queue
Défiler()→ 17 16
↑ ↑
F.tête F.queue
Enfiler(4)→ 17 16 4
↑ ↑
F.tête F.queue
Défiler()→ 16 4
↑ ↑
F.tête F.queue
Défiler()→ 4
↑
F.tête
9
INF 1425 – Travail pratique
i=1 21(1),64(2),33(3),16(4),17(5),99(6),14(7),12(8),18(9),55(10)
indmin=1
(i,j)=(1,2)→Fais rien!
(i,j)=(1,3)→Fais rien!
(i,j)=(1,4)→indmin=4, et l’élément est 16.
(i,j)=(1,5)→Fais rien!
10
INF 1425 – Travail pratique
(i,j)=(1,6)→Fais rien!
(i,j)=(1,7)→indmin=7, et l’élément est 14.
(i,j)=(1,8)→indmin=8, et l’élément est 12.
(i,j)=(1,9)→Fais rien!
(i,j)=(1,10)→Fais rien!
(1)
Indmin=8˃i=1? Oui→Permute(1,8)→ 12 ,64(2),33(3),16(4),17(5),99(6),14(7),21(8),18(9),55(10)
i=2 12(1),64(2),33(3),16(4),17(5),99(6),14(7),21(8),18(9),55(10)
indmin=2
(1)
Indmin=7˃i=2? Oui→Permute(2,7)→ 12 ,14(2),33(3),16(4),17(5),99(6),64(7),21(8),18(9),55(10)
i=3 12(1),14(2),33(3),16(4),17(5),99(6),64(7),21(8),18(9),55(10)
indmin=3
11
INF 1425 – Travail pratique
(1)
Indmin=4˃i=3? Oui→Permute(3,4)→ 12 ,14(2),16(3),33(4),17(5),99(6),64(7),21(8),18(9),55(10)
i=4 12(1),14(2),16(3),33(4),17(5),99(6),64(7),21(8),18(9),55(10)
indmin=4
(1)
Indmin=5˃i=4? Oui→Permute(4,5)→ 12 ,14(2),16(3),17(4),33(5),99(6),64(7),21(8),18(9),55(10)
i=5 12(1),14(2),16(3),17(4),33(5),99(6),64(7),21(8),18(9),55(10)
indmin=5
(i,j)=(5,6)→Fais rien!
(i,j)=(5,7)→Fais rien!
(i,j)=(5,8)→ indmin=8, et l’élément est 21.
(i,j)=(5,9)→ indmin=9, et l’élément est 18.
(i,j)=(5,10)→Fais rien!
(1)
Indmin=9˃i=5? Oui→Permute(5,9)→ 12 ,14(2),16(3),17(4),18(5),99(6),64(7),21(8),33(9),55(10)
i=6 12(1),14(2),16(3),17(4),18(5),99(6),64(7),21(8),33(9),55(10)
indmin=6
(1)
Indmin=8˃i=6? Oui→Permute(6,8)→ 12 ,14(2),16(3),17(4),18(5),21(6),64(7),99(8),33(9),55(10)
12
INF 1425 – Travail pratique
i=7 12(1),14(2),16(3),17(4),18(5),21(6),64(7),99(8),33(9),55(10)
indmin=7
(i,j)=(7,8)→Fais rien!
(i,j)=(7,9)→ indmin=9, et l’élément est 33.
(i,j)=(7,10)→ indmin=10, et l’élément est 55.
(1)
Indmin=9˃i=7? Oui→Permute(7,9)→ 12 ,14(2),16(3),17(4),18(5),21(6),33(7),99(8),64(9),55(10)
i=8 12(1),14(2),16(3),17(4),18(5),21(6),33(7),99(8),64(9),55(10)
indmin=8
(1)
Indmin=10˃i=8? Oui→Permute(8,10)→ 12 ,14(2),16(3),17(4),18(5),21(6),33(7),55(8),64(9),99(10)
Le voici la suite d’éléments de l’exercice #3, triée avec l’algorithme de tri par sélection :
12,14,16,17,18,21,33,55,64,99
13
INF 1425 – Travail pratique
(2)
Triage de la suite d’éléments 21,64,33,16,17,99,14,12,18,55, en utilisant l’algorithme de tri par insertion montrée par la figure suivante :
21(1),64(2),33(3),16(4),17(5),99(6),14(7),12(8),18(9),55(10)
(i,j)=(1,2)→ 21˃64? Non!
33˃64? Non!
16˃64? Non!
17˃64? Non!
99˃64? Oui!
14˃64? Non!
12˃64? Non!
18˃64? Non!
55˃64? Non! !→Alors l’élément 99 placé après l’élément 55!→ 21,64,33,16,17,14,12,18,55,99
14
INF 1425 – Travail pratique
Alors, les deux changements de place montrés ci-dessus donnent la suite suivante →16,14,12,17,18,21,33,55,64,99
(i,j)=(4,5)→Il ne se passe rien, car la clé qui est l’élément 17, est toujours plus grand que les éléments qui lui précèdent (16,14 et 12)!
(i,j)=(5,6)→Il ne se passe rien, car la clé qui est l’élément 99, est toujours plus grand que les éléments qui lui précèdent (16,14,12, 17,18,
21,33,55,64)!
15
INF 1425 – Travail pratique
(i,j)=(6,7)→ 16˃14? Oui! !→Alors l’élément 16 placé après l’élément 12! →14,12,16,17,18,21,33,55,64,99
12˃14? Non!
17˃14? Oui! !→Alors l’élément 17 garde sa place!
18˃14? Oui! → Alors l’élément 18 garde sa place!
21˃14? Oui! → Alors l’élément 21 garde sa place!
33˃14? Oui! → Alors l’élément 33 garde sa place!
55˃14? Oui! → Alors l’élément 55 garde sa place!
64˃14? Oui!→ Alors l’élément 64 garde sa place!
99˃14? Oui!→Alors l’élément 99 garde sa place!
(i,j)=(7,8)→ 14˃12? Oui! !→Alors l’élément 14 placé après l’élément 12! →12,14,16,17,18,21,33,55,64,99
16˃12? Oui! !→Alors l’élément 16 garde sa place!
17˃12? Oui! !→Alors l’élément 17 garde sa place!
18˃12? Oui! → Alors l’élément 18 garde sa place!
21˃12? Oui! → Alors l’élément 21 garde sa place!
33˃12? Oui! → Alors l’élément 33 garde sa place!
55˃12? Oui! → Alors l’élément 55 garde sa place!
64˃12? Oui!→ Alors l’élément 64 garde sa place!
99˃12? Oui!→Alors l’élément 99 garde sa place!
Le voici la suite d’éléments de l’exercice #3, triée avec l’algorithme de tri par sélection :
12,14,16,17,18,21,33,55,64,99
16
INF 1425 – Travail pratique
(3)
Triage de la suite d’éléments 21,64,33,16,17,99,14,12,18,55, en utilisant l’algorithme de tri à bulle montrée par la figure suivante :
21(1),64(2),33(3),16(4),17(5),99(6),14(7),12(8),18(9),55(10)
Traitement de N-1 à (10) :
17
INF 1425 – Travail pratique
12<14→Permute(12,14) → 18(1),21(2),55(3),16(4),17(5),33(6),14(7),12(8),64(9),99(10)
12<33→Permute(12,33)→ 18(1),21(2),55(3),16(4),17(5),33(6),12(7),14(8),64(9),99(10)
18
INF 1425 – Travail pratique
19
INF 1425 – Travail pratique
Le voici la suite d’éléments de l’exercice #3, triée avec l’algorithme de tri par sélection :
12,14,16,17,18,21,33,55,64,99
20
INF 1425 – Travail pratique
(4)
Triage de la suite d’éléments 21,64,33,16,17,99,14,12,18,55, en utilisant l’algorithme de tri rapide montrée par les figures suivantes :
21(1),64(2),33(3),16(4),17(5),99(6),14(7),12(8),18(9),55(10)
↑
r (pivot)
21
INF 1425 – Travail pratique
Itération #1 :
21(1) 64(2) 33(3) 16(4) 17(5) 99(6) 14(7) 12(8) 18(9) 55(10)
↑
pivot
(i,j)=(0,1) → (1,1)
(i,j)=(1,2) → Fais rien!
(i,j)=(1,3)→ (2,3) → Permute(64,33) → 21(1) 33(2) 64(3) 16(4) 17(5) 99(6) 14(7) 12(8) 18(9) │ 55(10)
*
(i,j)=(2,4)→ (3,4) → Permute(64,16) → 21(1) 33(2) 16(3) 64(4) 17(5) 99(6) 14(7) 12(8) 18(9) │ 55(10)
*
(i,j)=(3,5)→ (4,5) → Permute(64,17) → 21(1) 33(2) 16(3) 17(4) 64(5) 99(6) 14(7) 12(8) 18(9) │ 55(10)
*
(i,j)=(4,6) → Fais rien!
(i,j)=(4,7)→ (5,7) → Permute(64,14) → 21(1) 33(2) 16(3) 17(4) 14(5) 99(6) 64(7) 12(8) 18(9) │ 55(10)
*
(i,j)=(5,8)→ (6,8) → Permute(99,12) → 21(1) 33(2) 16(3) 17(4) 14(5) 12(6) 64(7) 99(8) 18(9) │ 55(10)
*
(i,j)=(6,9)→ (7,9) → Permute(64,18) → 21(1) 33(2) 16(3) 17(4) 14(5) 12(6) 18(7) 99(8) 64(9) │ 55(10)
*
(1) (2) (3) (4) (5) (6) (7) (8) (9) (10)
Permute(8,9) → Permute(99,64) → 21 33 16 17 14 12 18 64 99 │ 55
↑ *
pivot
22
INF 1425 – Travail pratique
Itération #2 :
21(1) 33(2) 16(3) 17(4) 14(5) 12(6) 55(7) 64(8) 99(9) │ 18(10)
*
(i,j)=(0,1) → Fais rien!
(i,j)=(0,2) → Fais rien!
(i,j)=(0,3)→ (1,3) → Permute(21,16) → 16(1) 33(2) 21(3) 17(4) 14(5) 12(6) 55(7) 64(8) 99(9) │ 18(10)
*
(i,j)=(1,4)→ (2,4) → Permute(33,17) → 16 17 21 33 14 12 55 64 99 │ 18(10)
(1) (2) (3) (4) (5) (6) (7) (8) (9)
*
(1) (2) (3) (4) (5) (6) (7) (8) (9) (10)
(i,j)=(2,5)→ (3,5) → Permute(21,14) → 16 17 14 33 21 12 55 64 99 │ 18
*
(i,j)=(3,6)→ (4,6) → Permute(33,12) → 16(1) 17(2) 14(3) 12(4) 21(5) 33(6) 55(7) 64(8) 99(9) │ 18(10)
↑ *
pivot
(i,j)=(4,7) → Fais rien!
(i,j)=(4,8) → Fais rien!
(i,j)=(4,9) → Fais rien!
Itération #3 :
16(1) 17(2) 14(3) 18(4) 21(5) 33(6) 55(7) 64(8) 99(9) │ 12(10)
↑ *
pivot
23
INF 1425 – Travail pratique
Itération #4 :
16(1) 17(2) 12(3) 18(4) 21(5) 33(6) 55(7) 64(8) 99(9) │ 14(10)
↑ *
pivot
1
: Le numéro qui suit le numéro 14, dans le sens de gauche à droite, est le numéro 99. Cependant, ce numéro NE PEUT PAS ÊTRE LE PIVOT
SUIVANT, car ce numéro est DÉJÀ PLACÉ A SA PLACE, à la dernière position (10) de la série de nombres originale, qui doit être triée de forme
ascendante. Alors, le prochain pivot qui suit l’ancien pivot 14, de l’itération #4, est le numéro 17, le numéro qui suit le numéro 99, dans le sens
de droite à gauche, pour l’itération #5.
Itération #5 :
12(1) 14(2) 16(3) 18(4) 21(5) 33(6) 55(7) 64(8) 99(9) │ 17(10)
*
17˂12? Non
17˂14? Non
17˂16? Non
17˂18? Oui → Mettre 17 avant 182! → 12(1) 14(2) 16(3) 18(4) 21(5) 33(6) 55(7) 64(8) 99(9) │ 17(10)
24
INF 1425 – Travail pratique
2
: A l’itération #5, il n’y a plus de permutations à faire, car TOUS LES NUMÉROS, SAUF 17 sont DÉJÀ TRIÉS, DE FORME ASCENDANTE, alors on ne
les touche plus! Il faut déterminer l’emplacement du dernier numéro pivot créé par l’algorithme de tri rapide, qui est le numéro 17. La façon la
plus logique de déterminer l’emplacement de ce nombre 17, de manière ascendante, est déterminer de quel nombre est inférieur ce nombre 17,
la réponse étant évidente (18), on place le nombre 17 AVANT le nombre 18, et de cette manière on finit la compilation de l’algorithme de tri
rapide!
12(1),14(2),16(3),17(4),18(5),21(6),33(7),55(8),64(9),99(10)
Le voici la suite d’éléments de l’exercice #3, triée avec l’algorithme de tri par sélection :
12,14,16,17,18,21,33,55,64,99
Note : le triage réalisé par l’algorithme de tri rapide a été très rapide hein!!!
25
INF 1425 – Travail pratique
Annexe
Travail Pratique – Révision et vérification du pseudo-code de l’exercice (2), de la question 1 du
Travail pratique
1
26
INF 1425 – Travail pratique
3
5
40
39
Fin
Les lignes ci-dessus, qui montrent la compilation des lignes du pseudo-code de l’exercice 2, de la question 1, du présent travail pratique, en
considérant une classe quelconque X, ayant un maximum de 40 élèves, c-à-d, que cette classe d’école X est associée à 40 élèves d’école
quelconque Y!
27