Algorithmique 1re anne SMI 20062007 Semestre 2 Rsum

  • Slides: 46
Download presentation
Algorithmique 1ère année SMI 2006/2007, Semestre 2 Résumé du cours 2006/2007 Module I 2,

Algorithmique 1ère année SMI 2006/2007, Semestre 2 Résumé du cours 2006/2007 Module I 2, 1ère année SMI 1

Cycle de vie d’un programme 2006/2007 Module I 2, 1ère année SMI 2

Cycle de vie d’un programme 2006/2007 Module I 2, 1ère année SMI 2

Méthodologie d’algorithmique l Méthodologie simple : 1. Définir clairement le problème 2. Chercher une

Méthodologie d’algorithmique l 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 sousproblèmes, et appliquer, pour chacun, la méthodologie simple ‘fonctions et procédures) l l 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 2006/2007 Module I 2, 1ère année SMI 3

Structure d’un algorithme 2006/2007 Module I 2, 1ère année SMI 4

Structure d’un algorithme 2006/2007 Module I 2, 1ère année SMI 4

Les catégories d’ordres l l l Les variables et leurs affectation la lecture /

Les catégories d’ordres l l l 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 2006/2007 Module I 2, 1ère année SMI 5

Algorithmique Les testes 2006/2007 Module I 2, 1ère année SMI 6

Algorithmique Les testes 2006/2007 Module I 2, 1ère année SMI 6

Si…Alors…Sinon Ecrire un algorithme qui demande un nombre entier à l'utilisateur, puis qui teste

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_par 3 Variable n : entier Début Ecrire " 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") Finsi Fin 2006/2007 Module I 2, 1ère année SMI 7

Tests imbriqués Variables copies : entier prix : réel Début Ecrire ("Nombre de photocopies

Tests imbriqués Variables copies : entier prix : réel Début Ecrire ("Nombre de photocopies : ") Lire (copies) Si copies < 10 Alors prix ← copies*0. 5 Sinon Si copies < 20 prix ← copies*0. 4 Sinon prix ← copies*0. 3 Finsi Ecrire (“Le prix à payer est : ”, prix) Fin 2006/2007 Module I 2, 1ère année SMI 8

Algorithmique Les boucles 2006/2007 Module I 2, 1ère année SMI 9

Algorithmique Les boucles 2006/2007 Module I 2, 1ère année SMI 9

La boucle Tant que Un algorithme qui détermine le premier nombre entier N tel

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 : entier Debut i ← 0 som← 0 Tant. Que (som <=100) i ← i+1 som ← som+i Fin. Tant. Que Ecrire (" La valeur cherchée est N= ", i) Fin 2006/2007 Module I 2, 1ère année SMI 10

La boucle Pour Calcule de x puissance n Variables x, puiss : réel n,

La boucle Pour Calcule de x puissance n Variables x, puiss : réel n, i : entier Debut Ecrire (" Entrez respectivement les valeurs de x et n ") Lire (x, n) puiss ← 1 Pour i allant de 1 à n puiss← puiss*x Fin. Pour Ecrire (x, " à la puissance ", n, " est égal à ", puiss) Fin 2006/2007 Module I 2, 1ère année SMI 11

Possibilité de choix entre les boucles Pour et Tantque Calcule de la fonction factoriel

Possibilité de choix entre les boucles Pour et Tantque Calcule de la fonction factoriel Algorithme / tantque Algorithme / Pour Calcul factorielle 1 Variables i, f, n : Naturel Début i ← 1 f ← 1 tant que (i < n) i ← i+1 f ← f * i Fin de tant que écrire (f) Fin Calcul factorielle 2 Variables i, f, n : Naturel Début f ← 1 pour i variant de 2 à n f ← f * i Fin pour écrire (f) Fin 2006/2007 Module I 2, 1ère année SMI 12

Boucle Répéter jusqu’à Un algorithme qui détermine le premier nombre entier N tel que

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 : entier Debut som ← 0 i ← 0 Répéter i ← i+1 som ← som+i Jusqu'à ( som > 100) Ecrire (" La valeur cherchée est N= ", i) Fin 2006/2007 Module I 2, 1ère année SMI 13

Choix de la boucle l Si on peut déterminer le nombre d'itérations avant l'exécution

Choix de la boucle l 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 l 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 Tant. Que ou répéter jusqu'à l Pour le choix entre Tant. Que et jusqu'à : • Si on doit tester la condition de contrôle avant de commencer les instructions de la boucle, on utilisera Tant. Que • 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 2006/2007 Module I 2, 1ère année SMI 14

Algorithmique Fonctions et procédures 2006/2007 Module I 2, 1ère année SMI 15

Algorithmique Fonctions et procédures 2006/2007 Module I 2, 1ère année SMI 15

Exemple de programme / fonction 2006/2007 Module I 2, 1ère année SMI 16

Exemple de programme / fonction 2006/2007 Module I 2, 1ère année SMI 16

Subdivision d’un problème en un ensemble de fonctions l Problème: Trouver le plus petit

Subdivision d’un problème en un ensemble de fonctions l 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 est. Premier • (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 2006/2007 Module I 2, 1ère année SMI 17

La fonction de recherche des nombres premiers Fonction est. Premier Fonction est-premier (m :

La fonction de recherche des nombres premiers Fonction est. Premier Fonction est-premier (m : entier) : booléen Pour i : = 2 à ENT(m/2) Faire Si m mod i = 0 alors // i divise m Retourne (Faux) Finde. Pour Retourne (Vrai) Fin. Fonction est-premier 2006/2007 Module I 2, 1ère année SMI 18

Entrée: Un entier positif m Entrée: Un entier positif n Sortie: Vrai si m

Entrée: Un entier positif m Entrée: Un entier positif n Sortie: Vrai si m est premier, Faux si non. Sortie: Le plus petit nb premier m > n Fonction est-premier (m) Algorithme premier-plus-grand (n) Pour i : = 2 à ENT(m/2) Faire Si m mod i = 0 alors // i divise m m : = n+1; Tant que est-premier(m) est Faux Faire m : = m+1; Retourne (Faux) Retourne (Vrai) Retourne(m) Fin est-premier Trace de premier-plus-grand pour n=8: m = 9 m = 10 Trace de est-premier pour m=9: Trace de est-premier pour m=11: Trace de est-premier pour m=10: i=2 i=3 i=5 11 mod 2 = 1 9 mod 2 = 1 10 mod 2 = 0 9 mod 3 = 0 11 mod 5 = 1 m = 11 2006/2007 Module I 2, 1ère année SMI 19

Transmission des paramètres Procédure incrementer 1 ( x : entier par valeur, Procédure par

Transmission des paramètres Procédure incrementer 1 ( x : entier par valeur, Procédure par valeur, y : entier par adresse) par adresse x ← x+1 y ← y+1 Fin. Procédure Algorithme Test_incrementer 1 Algorithme Test_incrementer variables n, m : entier Début n ← 3 m ← 3 incrementer 1(n, m) écrire (" n= ", n, " et m= ", m) Fin résultat : n=3 et m=4 Remarque : l'instruction x ← x+1 n'a pas de sens avec un passage par valeur l'instruction 2006/2007 Module I 2, 1ère année SMI 20

Algorithmique La Récursivité 2006/2007 Module I 2, 1ère année SMI 21

Algorithmique La Récursivité 2006/2007 Module I 2, 1ère année SMI 21

Itération et Récursivité l Calcul de factoriel : Version itérative 2006/2007 Calcul fact, Variables

Itération et Récursivité l Calcul de factoriel : Version itérative 2006/2007 Calcul fact, Variables N, f : entier Debut f 1 tantque (n > 1) f f * (n− 1); fintantque Ecrire(f) End; Module I 2, 1ère année SMI 22

Itération et Récursivité Version récursive Fonction fact (n : entier ) : entier Fonction

Itération et Récursivité Version récursive Fonction fact (n : entier ) : entier Fonction Si (n=0) alors retourne ( retourne 1) Sinon retourne ( retourne n*fact(n-1)) (n-1) Finsi Fin. Fonction l Un module (fonction ou procédure) peut s'appeler luimême: on dit que c'est un module récursif l Tout module récursif doit posséder un cas limite (cas trivial) qui arrête la récursivité 2006/2007 Module I 2, 1ère année SMI 23

Algorithmique Les tableaux 2006/2007 Module I 2, 1ère année SMI 24

Algorithmique Les tableaux 2006/2007 Module I 2, 1ère année SMI 24

Tableaux l Pour le calcul du nombre d'étudiants ayant une note supérieure à 10

Tableaux l Pour le calcul du nombre d'étudiants ayant une note supérieure à 10 avec les tableaux, on peut écrire : Variables i , nbre : entier tableau notes[30] : réel ] : Début nbre ← 0 Pour i allant de 0 à 29 Si ( Si notes[i] >10) alors notes[i] nbre ←nbre+1 Fin. Si Fin. Pour écrire ("le nombre de notes supérieures à 10 est : ", nbre) Fin 2006/2007 Module I 2, 1ère année SMI 25

Tableaux : saisie et affichage l Procédures qui permettent de saisir et d'afficher les

Tableaux : saisie et affichage l Procédures qui permettent de saisir et d'afficher les éléments d'un tableau : Procédure Saisie. Tab (n : entier par valeur, tableau T : réel par référence ) tableau Procédure variable i: entier Pour i allant de 0 à n-1 Pour écrire ("Saisie de l'élément ", i + 1) lire (T[i] ) Fin. Pour Fin Procédure Affiche. Tab (n : entier par valeur, tableau T : réel par valeur ) tableau variable i: entier Pour i allant de 0 à n-1 Pour écrire ("T[", i, "] =", T[i]) Fin. Pour Fin Procédure 2006/2007 Module I 2, 1ère année SMI 26

Tableaux : 2 problèmes classiques l Recherche d’un élément dans un tableau • •

Tableaux : 2 problèmes classiques l Recherche d’un élément dans un tableau • • l Recherche séquentielle Recherche dichotomique Tri d'un tableau • • 2006/2007 Tris élémentaires Tri avancées Module I 2, 1ère année SMI 27

Recherche séquentielle l Recherche de la valeur x dans un tableau T de N

Recherche séquentielle l Recherche de la valeur x dans un tableau T de N éléments : Vers Fonction Vers normal Variables i: entier, Trouvé : booléen i← 0 , Trouvé ← Faux Tant. Que (i < N) ET (Trouvé=Faux) Si (T[i]=x) alors Trouvé ← Vrai Sinon i←i+1 Fin. Si Fin. Tant. Que 2006/2007 Fonction Recherche(x : réel, N: entier, tableau T : réel ) : booléen Variable i: entier Pour i allant de 0 à N-1 Si (T[i]=x) alors retourne (Vrai) Fin. Si Fin. Pour retourne (Faux) Fin. Fonction Module I 2, 1ère année SMI 28

Recherche dichotomique inf← 0 , sup←N-1, Trouvé ← Faux Tant. Que (inf <=sup) ET

Recherche dichotomique inf← 0 , sup←N-1, Trouvé ← Faux Tant. Que (inf <=sup) ET (Trouvé=Faux) milieu←(inf+sup)div 2 Si (x=T[milieu]) alors Trouvé ← Vrai Sinon. Si (x>T[milieu]) alors inf←milieu+1 Sinon sup←milieu-1 Fin. Si Fin. Tant. Que Si Trouvé alors écrire ("x appartient au tableau") Sinon écrire ("x n'appartient pas au tableau") Fin. Si 2006/2007 Module I 2, 1ère année SMI 29

Algorithmique Les méthodes de Tris 2006/2007 Module I 2, 1ère année SMI 30

Algorithmique Les méthodes de Tris 2006/2007 Module I 2, 1ère année SMI 30

Les algorithmes de Tri • Tris élémentaires • Le tri par sélection • Le

Les algorithmes de Tri • Tris élémentaires • Le tri par sélection • Le tri par insertion • Le tri à bulles • Tris avancées • Tri rapide • …. . 2006/2007 Module I 2, 1ère année SMI 31

Tri par sélection 2006/2007 Module I 2, 1ère année SMI 32

Tri par sélection 2006/2007 Module I 2, 1ère année SMI 32

Tri par sélection : algorithme l Supposons que le tableau est noté T et

Tri par sélection : algorithme l Supposons que le tableau est noté T et sa taille N Pour i allant de 0 à N-2 Pour indice ← i Pour j allant de i + 1 à N-1 Pour Si T[j] <T[indice] alors Si indice ← j Finsi Fin. Pour Réservation de la case Recherche de l’élément concerné Permutation des deux valeurs temp ← T[indice] ← T[i] ← temp Appliquer la méthode ci-dessus sur le Fin. Pour tableau T=[5, 9, 3, 4, 2]. 2006/2007 Module I 2, 1ère année SMI 33

Tri par insertion 2006/2007 Module I 2, 1ère année SMI 34

Tri par insertion 2006/2007 Module I 2, 1ère année SMI 34

Tri par insertion : algorithme Appliquer la méthode ci-dessus sur le tableau T=[5, 9,

Tri par insertion : algorithme Appliquer la méthode ci-dessus sur le tableau T=[5, 9, 3, 4, 2]. 2006/2007 Module I 2, 1ère année SMI 35

Tri à bulles 2006/2007 Module I 2, 1ère année SMI 36

Tri à bulles 2006/2007 Module I 2, 1ère année SMI 36

Tri à bulles : algorithme Appliquer la méthode ci-dessus sur le tableau T=[5, 9,

Tri à bulles : algorithme Appliquer la méthode ci-dessus sur le tableau T=[5, 9, 3, 4, 2]. 2006/2007 Module I 2, 1ère année SMI 37

Tri rapide l Le tri rapide est un tri récursif basé sur l'approche "diviser

Tri rapide l 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) l 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 seul élément 2006/2007 Module I 2, 1ère année SMI 38

Tri Rapide 2006/2007 Module I 2, 1ère année SMI 39

Tri Rapide 2006/2007 Module I 2, 1ère année SMI 39

Procédure Tri rapide Procédure Tri. Rapide(tableau T : réel par adresse, p, r: entier

Procédure Tri rapide Procédure Tri. Rapide(tableau T : réel par adresse, p, r: entier par valeur) Procédure p, r variable q: entier Si p <r alors Si Partition(T, p, r, q) Tri. Rapide(T, p, q-1) Tri. Rapide(T, q+1, r) Fin. Si 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 2006/2007 Module I 2, 1ère année SMI 40

Procédure de partition Procédure Partition(tableau T : réel par adresse, p, r: entier par

Procédure de partition Procédure Partition(tableau T : réel par adresse, p, r: entier par valeur, Procédure p, r q: entier par adresse ) Variables i, j: entier pivot: réel pivot← T[p], i←p+1, j ← r Tant. Que (i<=j) Tant. Que (i<=r et T[i] <=pivot) i ← i+1 Fin. Tant. Que et Tant. Que (j>=p et T[j] >pivot ) j ← j-1 Fin. Tant. Que et Si i <j alors Si Echanger(T[i], T[j]), i ← i+1, j ← j-1 Fin. Si Fin. Tant. Que Echanger(T[j], T[p]) q ← j Fin Procédure 2006/2007 41 Module I 2, 1ère année SMI

Tri Rapide : Exemple Partage avec pivot = 3 2 4 1 7 3

Tri Rapide : Exemple Partage avec pivot = 3 2 4 1 7 3 2 3 6 2 2 1 7 3 4 3 6 < 3 ³ 3 2 2 1 3 3 4 7 6 Suite du tri TRI 1 2 2 3 3 4 6 7 2006/2007 Appliquer la méthode cidessus sur le tableau T=[5, 9, 3, 4, 2]. Module I 2, 1ère année SMI 42

Exemple de problème Enoncé: Ecrire une procédure Déterminer. Sequences, qui à partir d’un tableau

Exemple de problème Enoncé: Ecrire une procédure Déterminer. Sequences, 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> l l Le nombres de sous sequences est : 6 et la plus grande sous sequences est : <4, 7, 24, 28, 32> 2006/2007 Module I 2, 1ère année SMI 43

Procédure Déterminer. Séquences Procedures Déterminer. Séquences (T: Tableau [1. . N] de entier, nombre.

Procédure Déterminer. Séquences Procedures Déterminer. Séquences (T: Tableau [1. . N] de entier, nombre. Séquence, début, fin : Naturel) Variables debutcourant, i : naturel Début debutcourant 1 i 1 nombre. Séquence 1 Debut 1 Fin 1 Tantque i < N faire Si T[i] > T[i+1] alors nombre. Séquence + 1 si (i – debutcourant) > (fin –debut) alors debutcourant fin i fsi debutcourant i+1 fsi i i+1 ftq 44

Procédure Déterminer. Séquences : suite si (N – debutcourant) > (fin- debut) alors debut

Procédure Déterminer. Séquences : suite si (N – debutcourant) > (fin- debut) alors debut courant fin N fsi Fin de procedure 45

fin 2006/2007 Module I 2, 1ère année SMI 46

fin 2006/2007 Module I 2, 1ère année SMI 46