Algorithmique

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

description

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…) - PowerPoint PPT Presentation

Transcript of Algorithmique

Page 1: 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

Page 2: Algorithmique

2006/2007 Module I2, 1ère année SMI 2

Cycle de vie d’un programme

Page 3: Algorithmique

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

Page 4: Algorithmique

2006/2007 Module I2, 1ère année SMI 4

Structure d’un algorithme

Page 5: Algorithmique

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

Page 6: Algorithmique

2006/2007 Module I2, 1ère année SMI 6

Algorithmique

Les testes

Page 7: Algorithmique

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

Page 8: Algorithmique

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

Page 9: Algorithmique

2006/2007 Module I2, 1ère année SMI 9

Algorithmique

Les boucles

Page 10: Algorithmique

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

Page 11: Algorithmique

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

Page 12: Algorithmique

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

Page 13: Algorithmique

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

Page 14: Algorithmique

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

Page 15: Algorithmique

2006/2007 Module I2, 1ère année SMI 15

Algorithmique

Fonctions et procéduresFonctions et procédures

Page 16: Algorithmique

2006/2007 Module I2, 1ère année SMI 16

Exemple de programme / fonction

Page 17: Algorithmique

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

Page 18: Algorithmique

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

Page 19: Algorithmique

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

Page 20: Algorithmique

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

Page 21: Algorithmique

2006/2007 Module I2, 1ère année SMI 21

Algorithmique

La Récursivité La Récursivité

Page 22: Algorithmique

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

Page 23: Algorithmique

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

Page 24: Algorithmique

2006/2007 Module I2, 1ère année SMI 24

Algorithmique

Les tableauxLes tableaux

Page 25: Algorithmique

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

Page 26: Algorithmique

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

Page 27: Algorithmique

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

Page 28: Algorithmique

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

Page 29: Algorithmique

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

Page 30: Algorithmique

2006/2007 Module I2, 1ère année SMI 30

Algorithmique

Les méthodes de TrisLes méthodes de Tris

Page 31: Algorithmique

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

• …..

Page 32: Algorithmique

2006/2007 Module I2, 1ère année SMI 32

Tri par sélection

Page 33: Algorithmique

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].

Page 34: Algorithmique

2006/2007 Module I2, 1ère année SMI 34

Tri par insertion

Page 35: Algorithmique

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].

Page 36: Algorithmique

2006/2007 Module I2, 1ère année SMI 36

Tri à bulles

Page 37: Algorithmique

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].

Page 38: Algorithmique

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

Page 39: Algorithmique

2006/2007 Module I2, 1ère année SMI 39

Tri Rapide

Page 40: Algorithmique

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

Page 41: Algorithmique

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

Page 42: Algorithmique

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].

Page 43: Algorithmique

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>

Page 44: Algorithmique

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

Page 45: Algorithmique

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

Page 46: Algorithmique

2006/2007 Module I2, 1ère année SMI 46

fin