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