851 likes | 1.7k Views
Algorithmique. 1ère année SMI 2006/2007, Semestre 2 Résumé du cours. Cycle de vie d’un programme. Méthodologie d’algorithmique. Méthodologie simple : 1. Définir clairement le problème 2. Chercher une méthode de résolution (formules…)
E N D
Algorithmique 1ère année SMI 2006/2007, Semestre 2 Résumé du cours Module I2, 1ère année SMI
Cycle de vie d’un programme Module I2, 1ère année SMI
Méthodologie d’algorithmique • Méthodologie simple : 1. Définir clairement le problème 2. Chercher une méthode de résolution (formules…) 3. Définir les entrées nécessaires et les résultats obtenus 4. Écrire l'algorithme (langage algorithmique) • Analyse méthodique descendante Si le problème est trop complexe, le décomposer en sous-problèmes, et appliquer, pour chacun, la méthodologie simple ‘fonctions et procédures) • Décomposition du problème = description de + en + détaillée du problème = ensemble d'opérations élémentaires traductibles en langage de programmation Module I2, 1ère année SMI
Structure d’un algorithme Module I2, 1ère année SMI
Les catégories d’ordres • Les variables et leurs affectation • la lecture / écriture • les tests • Les structures conditionnel et les boucles • Les tableaux et les matrices • La recherche d’un élément ds un tableau • Le tris d’un tableaux Module I2, 1ère année SMI
Algorithmique Les testes Module I2, 1ère année SMI
Si…Alors…Sinon Ecrire un algorithme qui demande un nombre entier à l'utilisateur, puis qui teste et affiche s'il est divisible par 3 Algorithme Divsible_par3 Variable n : entier DébutEcrire" Entrez un entier : " Lire (n) Si (n%3=0) alors Ecrire (n," est divisible par 3") Sinon Ecrire (n," n'est pas divisible par 3") FinsiFin Module I2, 1ère année SMI
Tests imbriqués Variables copies : entier prix : réelDébutEcrire ("Nombre de photocopies : ") Lire (copies)Si copies < 10 Alors prix ← copies*0.5 Sinon Si copies < 20 prix ← copies*0.4Sinon prix ← copies*0.3Finsi FinsiEcrire (“Le prix à payer est : ”, prix) Fin Module I2, 1ère année SMI
Algorithmique Les boucles Module I2, 1ère année SMI
La boucle Tant que Un algorithme qui détermine le premier nombre entier N tel que la somme de 1 à N dépasse strictement 100 Variables som, i : entierDebut i ← 0 som← 0 TantQue (som <=100) i ← i+1 som ← som+i FinTantQueEcrire (" La valeur cherchée est N= ", i) Fin Module I2, 1ère année SMI
La boucle Pour Calcule de x puissance n Variables x, puiss : réel n, i : entier DebutEcrire (" Entrez respectivement les valeurs de x et n ") Lire (x, n) puiss ← 1 Pour i allant de 1 à n puiss← puiss*x FinPour Ecrire (x, " à la puissance ", n, " est égal à ", puiss) Fin Module I2, 1ère année SMI
Possibilité de choix entre les boucles Pour et Tantque Calcule de la fonction factoriel Module I2, 1ère année SMI
Boucle Répéter jusqu’à Un algorithme qui détermine le premier nombre entier N tel que la somme de 1 à N dépasse strictement 100 (version avec répéter jusqu'à) Variables som, i : entierDebutsom ← 0 i ← 0Répéter i ← i+1 som ← som+i Jusqu'à ( som > 100) Ecrire (" La valeur cherchée est N= ", i) Fin Module I2, 1ère année SMI
Choix de la boucle • Si on peut déterminer le nombre d'itérations avant l'exécution de la boucle, il est plus naturel d'utiliser la boucle Pour • S'il n'est pas possible de connaître le nombre d'itérations avant l'exécution de la boucle, on fera appel à l'une des boucles TantQue ou répéter jusqu'à • Pour le choix entre TantQue et jusqu'à : • Si on doit tester la condition de contrôle avant de commencer les instructions de la boucle, on utilisera TantQue • Si la valeur de la condition de contrôle dépend d'une première exécution des instructions de la boucle, on utilisera répéter jusqu'à ou faire tanque Module I2, 1ère année SMI
Algorithmique Fonctions et procédures Module I2, 1ère année SMI
Exemple de programme / fonction Module I2, 1ère année SMI
Subdivision d’un problème en un ensemble de fonctions • Problème: Trouver le plus petit nombre premier strictement supérieur à un entier positif donné n • Utiliser l’algorithme qu’on a déjà fait estPremier (le plus petit nombre premier p supérieur à un entier n) en tant que fonction. • Fait appel a cette fonction a l’intérieur de l’algorithme premier-plus-grand Module I2, 1ère année SMI
La fonction de recherche des nombres premiers Module I2, 1ère année SMI
Entrée: Un entier positif m Sortie: Vrai si m est premier, Faux si non. Fonctionest-premier (m) Pouri := 2àENT(m/2)Faire Si m mod i = 0alors // i divise m Retourne(Faux) Retourne(Vrai) Finest-premier Entrée: Un entier positif n Sortie: Le plus petit nb premier m > n Algorithmepremier-plus-grand (n) m := n+1; Tant que est-premier(m) est Faux Faire m := m+1; Retourne(m) Finest-premier Trace de premier-plus-grand pour n=8: Trace de est-premierpour m=9: Trace de est-premierpour m=11: Trace de est-premierpour m=10: i=2 11 mod 2 = 1 10 mod 2 = 0 9 mod 2 = 1 m = 9 i=3 9 mod 3 = 0 i=5 11 mod 5 = 1 m = 10 m = 11
Transmission des paramètres Procédure incrementer1 (x : entier par valeur, y : entier par adresse) x ← x+1 y ← y+1 FinProcédure Algorithme Test_incrementer1 variables n, m : entier Début n ← 3 m ← 3 incrementer1(n, m) résultat : écrire (" n= ", n, " et m= ", m) n=3 et m=4 Fin Remarque : l'instruction x ← x+1 n'a pas de sens avec un passage par valeur Module I2, 1ère année SMI
Algorithmique La Récursivité Module I2, 1ère année SMI
Itération et Récursivité • Calcul de factoriel : Calcul fact, Variables N,f : entier Debut f 1 tantque (n > 1) f f * (n−1); fintantque Ecrire(f) End; Version itérative Module I2, 1ère année SMI
Itération et Récursivité • Un module (fonction ou procédure) peut s'appeler lui-même: on dit que c'est un module récursif • Tout module récursif doit posséder un cas limite (cas trivial) qui arrête la récursivité Fonction fact (n : entier ) : entier Si (n=0) alors retourne (1) Sinon retourne (n*fact(n-1)) Finsi FinFonction Version récursive Module I2, 1ère année SMI
Algorithmique Les tableaux Module I2, 1ère année SMI
Tableaux • Pour le calcul du nombre d'étudiants ayant une note supérieure à 10 avec les tableaux, on peut écrire : Variables i ,nbre : entier tableaunotes[30] : réel Début nbre ← 0 Pouri allant de 0 à 29 Si (notes[i] >10) alors nbre ←nbre+1 FinSi FinPour écrire ("le nombre de notes supérieures à 10 est : ", nbre) Fin Module I2, 1ère année SMI
Tableaux : saisie et affichage • Procédures qui permettent de saisir et d'afficher les éléments d'un tableau : Procédure SaisieTab (n : entier par valeur, tableau T : réel par référence ) variable i: entier Pour i allant de 0 à n-1 écrire ("Saisie de l'élément ", i + 1) lire (T[i] ) FinPour Fin Procédure Procédure AfficheTab (n : entier par valeur, tableau T : réel par valeur ) variable i: entier Pour i allant de 0 à n-1 écrire ("T[",i, "] =", T[i]) FinPour Fin Procédure Module I2, 1ère année SMI
Tableaux : 2 problèmes classiques • Recherche d’un élément dans un tableau • Recherche séquentielle • Recherche dichotomique • Tri d'un tableau • Tris élémentaires • Tri avancées Module I2, 1ère année SMI
Recherche séquentielle Recherche de la valeur x dans un tableau T de N éléments : Variables i: entier, Trouvé : booléen i←0 , Trouvé ← FauxTantQue (i < N) ET (Trouvé=Faux)Si (T[i]=x) alorsTrouvé ← VraiSinon i←i+1 FinSiFinTantQue Vers Fonction Vers normal Fonction Recherche(x : réel, N: entier, tableau T : réel ) : booléen Variable i: entier Pour i allant de 0 à N-1Si (T[i]=x) alors retourne (Vrai) FinSi FinPour retourne (Faux) FinFonction Module I2, 1ère année SMI
Recherche dichotomique inf←0 , sup←N-1, Trouvé ← Faux TantQue (inf <=sup) ET (Trouvé=Faux) milieu←(inf+sup)div2 Si (x=T[milieu]) alors Trouvé ← Vrai SinonSi (x>T[milieu]) alors inf←milieu+1 Sinon sup←milieu-1 FinSiFinSi FinTantQue Si Trouvé alors écrire ("x appartient au tableau") Sinon écrire ("x n'appartient pas au tableau") FinSi Module I2, 1ère année SMI
Algorithmique Les méthodes de Tris Module I2, 1ère année SMI
Les algorithmes de Tri • Tris élémentaires • Le tri par sélection • Le tri par insertion • Le tri à bulles • Tris avancées • Tri rapide • ….. Module I2, 1ère année SMI
Tri par sélection Module I2, 1ère année SMI
Tri par sélection : algorithme • Supposons que le tableau est noté T et sa taille N Pour i allant de 0 à N-2 indice ← i Pour j allant de i + 1 à N-1Si T[j] <T[indice] alors indice ← jFinsiFinPour temp ← T[indice] T[indice] ← T[i] T[i] ← temp FinPour Réservation de la case Recherche de l’élément concerné Permutation des deux valeurs Appliquer la méthode ci-dessus sur le tableau T=[5,9,3,4,2]. Module I2, 1ère année SMI
Tri par insertion Module I2, 1ère année SMI
Tri par insertion : algorithme Appliquer la méthode ci-dessus sur le tableau T=[5,9,3,4,2]. Module I2, 1ère année SMI
Tri à bulles Module I2, 1ère année SMI
Tri à bulles : algorithme Appliquer la méthode ci-dessus sur le tableau T=[5,9,3,4,2]. Module I2, 1ère année SMI
Tri rapide • Le tri rapide est un tri récursif basé sur l'approche "diviser pour régner" (consiste à décomposer un problème d'une taille donnée à des sous problèmes similaires mais de taille inférieure faciles à résoudre) • Description du tri rapide : • 1) on considère un élément du tableau qu'on appelle pivot • 2) on partitionne le tableau en 2 sous tableaux : les éléments inférieurs ou égaux à pivot et les éléments supérieurs à pivot. on peut placer ainsi la valeur du pivot à sa place définitive entre les deux sous tableaux • 3) on répète récursivement ce partitionnement sur chacun des sous tableaux crées jusqu'à ce qu'ils soient réduits à un à un seul élément Module I2, 1ère année SMI
Tri Rapide Module I2, 1ère année SMI
Procédure Tri rapide Procédure TriRapide(tableau T : réel par adresse, p,r: entier par valeur) variable q: entier Si p <r alors Partition(T,p,r,q) TriRapide(T,p,q-1) TriRapide(T,q+1,r) FinSi Fin Procédure A chaque étape de récursivité on partitionne un tableau T[p..r] en deux sous tableaux T[p..q-1] et T[q+1..r] tel que chaque élément de T[p..q-1] soit inférieur ou égal à chaque élément de A[q+1..r] . L'indice q est calculé pendant la procédure de partitionnement Module I2, 1ère année SMI
Procédure de partition Procédure Partition(tableau T : réel par adresse, p,r: entier par valeur, q: entier par adresse ) Variables i, j: entier pivot: réel pivot← T[p], i←p+1, j ← r TantQue (i<=j) TantQue (i<=r et T[i] <=pivot) i ← i+1 FinTantQue TantQue (j>=p et T[j] >pivot ) j ← j-1 FinTantQue Si i <j alors Echanger(T[i], T[j]), i ← i+1, j ← j-1 FinSi FinTantQue Echanger(T[j], T[p]) q ← j Fin Procédure Module I2, 1ère année SMI
Partage avec pivot = 3 2 2 1 2 2 4 2 2 1 1 2 1 3 7 7 3 3 3 3 3 2 4 4 4 6 3 7 3 6 7 6 6 ³ 3 < 3 Suite du tri TRI TRI Tri Rapide : Exemple Appliquer la méthode ci-dessus sur le tableau T=[5,9,3,4,2]. Module I2, 1ère année SMI
Exemple de problème Enoncé:Ecrire une procédure DéterminerSequences, qui à partir d’un tableau d’entiers T, fournit le nombre de sous-sequences strictement croissantes de ce tableau, ainsi que les indices de debut et de fin de la plus grande sous séquence. Exemple : Soit T un tableau de 15 éléments : 1, 2, 5, 3, 12, 25, 13, 8, 4, 7, 24, 28, 32, 11, 14 • Les séquences strictement croissantes sont : <1, 2, 5>; <3, 12, 25>; <13>; <4, 7, 24, 28, 32>; <11, 14> • Le nombres de sous sequences est : 6 et la plus grande sous sequences est : <4, 7, 24, 28, 32> Module I2, 1ère année SMI
fin Module I2, 1ère année SMI