Download - Algorithmique
2006/2007 Module I2, 1ère année SMI 1
Algorithmique
1ère année SMI
2006/2007, Semestre 2
Résumé du cours
2006/2007 Module I2, 1ère année SMI 2
Cycle de vie d’un programme
2006/2007 Module I2, 1ère année SMI 3
Méthodologie d’algorithmique
Méthodologie simple :1. Définir clairement le problème2. Chercher une méthode de résolution (formules…)3. Définir les entrées nécessaires et les résultats obtenus4. É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
2006/2007 Module I2, 1ère année SMI 4
Structure d’un algorithme
2006/2007 Module I2, 1ère année SMI 5
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
2006/2007 Module I2, 1ère année SMI 6
Algorithmique
Les testes
2006/2007 Module I2, 1ère année SMI 7
Si…Alors…SinonEcrire 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
2006/2007 Module I2, 1ère année SMI 8
Tests imbriquésVariables copies : entier
prix : réelDé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
Finsi Ecrire (“Le prix à payer est : ”, prix)
Fin
2006/2007 Module I2, 1ère année SMI 9
Algorithmique
Les boucles
2006/2007 Module I2, 1ère année SMI 10
La boucle Tant queUn 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
2006/2007 Module I2, 1ère année SMI 11
La boucle Pour
Calcule de x puissance n Variables x, puiss : réel
n, i : entierDebut
Ecrire (" Entrez respectivement les valeurs de x et n ")Lire (x, n)puiss ← 1 Pour i allant de 1 à n
puiss← puiss*x FinPourEcrire (x, " à la puissance ", n, " est égal à ", puiss)
Fin
2006/2007 Module I2, 1ère année SMI 12
Possibilité de choix entre les boucles Pour et Tantque
Algorithme / tantqueCalcul 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
Algorithme / PourCalcul 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
Calcule de la fonction factoriel
2006/2007 Module I2, 1ère année SMI 13
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 : entierDebut
som ← 0
i ← 0Répéter
i ← i+1
som ← som+i
Jusqu'à ( som > 100)
Ecrire (" La valeur cherchée est N= ", i)
Fin
2006/2007 Module I2, 1ère année SMI 14
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
2006/2007 Module I2, 1ère année SMI 15
Algorithmique
Fonctions et procéduresFonctions et procédures
2006/2007 Module I2, 1ère année SMI 16
Exemple de programme / fonction
2006/2007 Module I2, 1ère année SMI 17
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
2006/2007 Module I2, 1ère année SMI 18
La fonction de recherche des nombres premiers
FonctionFonction estPremier
FonctionFonction est-premier (m : entier) : booléen
Pour i := 2 à ENT(m/2) Faire
Si m mod i = 0 alors // i divise m
Retourne (Faux)
FindePour
Retourne (Vrai)
FinFonctionFinFonction est-premier
Entrée: Un entier positif m
Sortie: Vrai si m est premier, Faux si non.
Fonction est-premier (m)
Pour i := 2 à ENT(m/2) Faire
Si m mod i = 0 alors // i divise m
Retourne (Faux)
Retourne (Vrai)
Fin est-premier
Entrée: Un entier positif n
Sortie: Le plus petit nb premier m > n
Algorithme premier-plus-grand (n)
m := n+1;
Tant que est-premier(m) est Faux Faire
m := m+1;
Retourne(m)
Fin est-premier
Trace de premier-plus-grand pour n=8:
m = 9
Trace de est-premier pour m=9:
i=2 9 mod 2 = 19 mod 3 = 0i=3
m = 10
Trace de est-premier pour m=10:
10 mod 2 = 0
m = 11
Trace de est-premier pour m=11:
11 mod 2 = 1
i=5 11 mod 5 = 1
2006/2007 Module I2, 1ère année SMI 20
Transmission des paramètresProcédureProcédure incrementer1 (xx : entier par valeur, par valeur, yy : entier par adressepar adresse)
x ← x+1y ← y+1
FinProcédure FinProcédure
Algorithme Test_incrementerAlgorithme Test_incrementer1variables n, m : entier Début Début
n ← 3m ← 3incrementer1(n, m) résultat : résultat : écrire (" n= ", n, " et m= ", m) n=3 et m=4n=3 et m=4
FinFin
Remarque :Remarque : l'instruction l'instruction x ← x+1 n'a pas de sens avec un passage par valeur
2006/2007 Module I2, 1ère année SMI 21
Algorithmique
La Récursivité La Récursivité
2006/2007 Module I2, 1ère année SMI 22
Itération et Récursivité
Calcul fact,Variables N,f : entierDebut f 1 tantque (n > 1) f f * (n−1); fintantqueEcrire(f)End;
Calcul de factoriel :
Version itérative
2006/2007 Module I2, 1ère année SMI 23
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é
FonctionFonction fact (n : entier ) : entierSi (n=0) alors
retourneretourne (11)Sinon retourneretourne (n*fact(n-1)n*fact(n-1))Finsi
FinFonctionFinFonction
Version récursive
2006/2007 Module I2, 1ère année SMI 24
Algorithmique
Les tableauxLes tableaux
2006/2007 Module I2, 1ère année SMI 25
Tableaux Pour le calcul du nombre d'étudiants ayant une note supérieure à
10 avec les tableaux, on peut écrire :
Variables i ,nbre : entier
tableautableau notes[30] : ] : réel
DébutDébutnbre ← 0
PourPour ii allant de 0 à 29 SiSi (notes[i]notes[i] >10) alors
nbre ←nbre+1
FinSiFinSi
FinPourFinPour
écrire ("le nombre de notes supérieures à 10 est : ", nbre)
FinFin
2006/2007 Module I2, 1ère année SMI 26
Tableaux : saisie et affichage Procédures qui permettent de saisir et d'afficher les éléments d'un tableau :
ProcédureProcédure SaisieTab (n : entier par valeur, tableautableau T : réel par référence ) variable i: entier
PourPour i allant de 0 à n-1 écrire ("Saisie de l'élément ", i + 1)
lire (T[i] )
FinPourFinPour
Fin ProcédureFin Procédure
Procédure AfficheTabProcédure AfficheTab (n : entier par valeur, tableautableau T : réel par valeur ) variable i: entier
PourPour i allant de 0 à n-1 écrire ("T[",i, "] =", T[i])
FinPourFinPour
Fin ProcédureFin Procédure
2006/2007 Module I2, 1ère année SMI 27
Tableaux : 2 problèmes classiques
Recherche d’un élément dans un tableauRecherche d’un élément dans un tableau
• Recherche séquentielle
• Recherche dichotomique
Tri d'un tableauTri d'un tableau
• Tris élémentaires
• Tri avancées
2006/2007 Module I2, 1ère année SMI 28
Recherche séquentielle
Variables i: entier, Trouvé : booléen
i←0 , Trouvé ← FauxTantQue (i < N) ET (Trouvé=Faux) Si (T[i]=x) alors Trouvé ← Vrai
Sinon
i←i+1
FinSiFinTantQue
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)
FinSiFinPour
retourne (Faux)FinFonction
Recherche de la valeur x dans un tableau T de N éléments :
Vers normal Vers Fonction
2006/2007 Module I2, 1ère année SMI 29
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
2006/2007 Module I2, 1ère année SMI 30
Algorithmique
Les méthodes de TrisLes méthodes de Tris
2006/2007 Module I2, 1ère année SMI 31
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 I2, 1ère année SMI 32
Tri par sélection
2006/2007 Module I2, 1ère année SMI 33
Tri par sélection : algorithme Supposons que le tableau est noté T et sa taille N
PourPour i allant de 0 à N-2
indice ← i
PourPour j allant de i + 1 à N-1 SiSi T[j] <T[indice] alorsalors indice ← j FinsiFinsi FinPourFinPour
temp ← T[indice] T[indice] ← T[i] T[i] ← temp
FinPourFinPour
Permutation des deux valeurs
Réservation de la case
Recherche de l’élément concerné
Appliquer la méthode ci-dessus sur le tableau T=[5,9,3,4,2].
2006/2007 Module I2, 1ère année SMI 34
Tri par insertion
2006/2007 Module I2, 1ère année SMI 35
Tri par insertion : algorithme
Appliquer la méthode ci-dessus sur le tableau T=[5,9,3,4,2].
2006/2007 Module I2, 1ère année SMI 36
Tri à bulles
2006/2007 Module I2, 1ère année SMI 37
Tri à bulles : algorithme
Appliquer la méthode ci-dessus sur le tableau T=[5,9,3,4,2].
2006/2007 Module I2, 1ère année SMI 38
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
2006/2007 Module I2, 1ère année SMI 39
Tri Rapide
2006/2007 Module I2, 1ère année SMI 40
Procédure Tri rapideProcédureProcédure TriRapide(tableau TT : réel par adresse, p,rp,r: entier par valeur)
variable q: entier
SiSi p <r alorsalors Partition(T,p,r,q)
TriRapide(T,p,q-1)
TriRapide(T,q+1,r)
FinSiFinSi
Fin ProcédureFin 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 I2, 1ère année SMI 41
Procédure de partitionProcédureProcédure Partition(tableau TT : réel par adresse, p,rp,r: entier par valeur,
qq: entier par adresse )
Variables i, j: entier
pivot: réel
pivot← T[p], i←p+1, j ← r
TantQue (i<=j)
TantQue (i<=r etet T[i] <=pivot) i ← i+1 FinTantQue
TantQue (j>=p etet T[j] >pivot ) j ← j-1 FinTantQue
SiSi i <j alors alors
Echanger(T[i], T[j]), i ← i+1, j ← j-1
FinSiFinSi
FinTantQue
Echanger(T[j], T[p])
q ← j
Fin ProcédureFin Procédure
2006/2007 Module I2, 1ère année SMI 42
Partage avec pivot = 3
32 4 1 7 2 3 6
32 2 1 7 4 3 6
32 2 1 3 4 7 6
31 2 2 3 4 6 7
TRI TRI
< 3 3
Suite du tri
Tri Rapide : Exemple
Appliquer la méthode ci-dessus sur le tableau T=[5,9,3,4,2].
2006/2007 Module I2, 1ère année SMI 43
Exemple de problèmeEnoncé: 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>
2006/2007 Module I2, 1ère année SMI 44
Procédure DéterminerSéquences
Procedures DéterminerSéquences (T: Tableau [1..N] de entier, nombreSéquence, début, fin : Naturel)
Variables
debutcourant, i :naturel
Début
debutcourant 1
i 1
nombreSéquence 1
Debut 1
Fin 1
Tantque i < N faire
Si T[i] > T[i+1] alors
nombreSéquence nombreSéquence + 1
si (i – debutcourant) > (fin –debut) alors
debut debutcourant
fin i
fsi
debutcourant i+1
fsi
i i+1
ftq
2006/2007 Module I2, 1ère année SMI 45
Procédure DéterminerSéquences : suite si (N – debutcourant) > (fin- debut) alors
debut debut courant
fin N
fsi
Fin de procedure
2006/2007 Module I2, 1ère année SMI 46
fin