Cours Algorithmique
Thèmes abordés
Cours Algorithmique
Thèmes abordés
Définition
nom masculin (d'Al-Khârezmi, médecin arabe).
Suite de raisonnements ou d'opérations qui fournit la
solution de certains problèmes.
Objectifs
Un algorithme sert à transmettre un savoir faire.
Il décrit les étapes à suivre pour réaliser un travail.
Il permet d'expliciter clairement les idées de solution
d'un problème indépendamment d'un langage de
programmation.
L'utilisateur d'un algorithme n'aura qu'à suivre toutes
les instructions, dans
Formateur: l'ordre
Idrissi Moulay pour arriver au résultat
Abdesslam 1
que doit donner l'algorithme.
Algorithme
Le "langage algorithmique" que nous utilisons est un
compromis entre un langage naturel et un langage de
programmation.
Il doit donc suivre des règles. Il est composé d'une entête et d'un
corps.
L'entête comprend :
4
Formateur: Idrissi Moulay Abdesslam
Formalisme
Exemple d'algorithme :
Nom : AddDeuxEntiers.
Rôle : additionner deux entier et mémoriser le résultat
Données : les valeurs à additionner.
Résultat : la somme des deux valeurs.
Principe : Additionner deux entiers a et b et mettre le résultat dans
c.
début
c←a+b
fin
Lexique :
a : entier 5
b : entier Formateur: Idrissi Moulay Abdesslam
Les variables
Une variable est une entité qui contient une information, elle
possède :
un nom, on parle d’identifiant
une valeur
prendre la variable
6
Formateur: Idrissi Moulay Abdesslam
Les variables
Type de variable
entier pour manipuler des entiers
8
Formateur: Idrissi Moulay Abdesslam
Opérateur, opérande et expression
Un opérateur est un symbole d’opération qui permet d’agir
sur des variables ou de faire des “calculs”
9
Formateur: Idrissi Moulay Abdesslam
Opérateur, opérande et expression
Exemple dans a + b :
a est l’opérande gauche
+ est l’opérateur
b est l’opérande droite
a + b est appelé une expression
l’opérateur non
Binaire s’il admet deux opérandes, par exemple
l’opérateur +
2+3 vaut 5
avec des chaînes de caractères il aura pour sens la
Non
Et
13
Formateur: Idrissi Moulay Abdesslam
Les opérateurs booléens
Ou
Ou exclusif
14
Formateur: Idrissi Moulay Abdesslam
Les opérateurs booléens
15
Formateur: Idrissi Moulay Abdesslam
Les opérateurs booléens
Distributivité des opérateurs et et ou
a ou (b et c) = (a ou b) et (a ou c)
a et (b ou c) = (a et b) ou (a et c)
Loi de Morgan
non (a ou b) = non a et non b
non (a et b) = non a ou non b 16
Formateur: Idrissi Moulay Abdesslam
Les opérateurs sur les numériques
On retrouve tout naturellemment +, -, *, /
Avec en plus pour les entiers div et mod, qui permettent
par exemple :
11 div 2 vaut 5
11 mod 2 vaut 1
17
Formateur: Idrissi Moulay Abdesslam
Les opérateurs sur les numériques
L’opérateur d’égalité :
C’est l’opérateur que l’on retrouve chez tous les types
simples qui permet de savoir si les deux opérandes sont
égales
Il est représenté par le caractère =
Le résultat d'une expression contenant cet opérateur est un
booléen
19
Formateur: Idrissi Moulay Abdesslam
Manipulation de variables
On ne peut faire que deux choses avec une variable :
1. Obtenir son contenu
Cela s’effectue simplement en nommant la variable
20
Formateur: Idrissi Moulay Abdesslam
Manipulation de variables
Par exemple l’expression c ← a + b se comprend de la
façon suivante :
On prend la valeur contenue dans la variable a
On prend la valeur contenue dans la variable b
On additionne ces deux valeurs
On met ce résultat dans la variable c
21
Formateur: Idrissi Moulay Abdesslam
Les entrées / sorties
Un algorithme peut avoir des interactions avec l’utilisateur
écrire(liste d'expressions)
Nom : DécompSomme.
Rôle : Décomposition d'une somme
Données : la somme à décomposée.
Résultat : les nombres de billets et de pièces.
29
Formateur: Idrissi Moulay Abdesslam
Instruction conditionnelle
Exemple
Nom : ValeurAbs
Rôle : Calcule la valeur absolue d’un entier
Données : La valeur à calculer
Résultat : La valeur Absolue
Principe : Si valeur < 0, on la multiplie par -1
début
si valeur ≥ 0 alors
valeurabsolue ← valeur
sinon
valeurabsolue ← valeur * -1
finsi
fin
Lexique 30
- valeur : entier, la valeur à tester
Formateur: Idrissi Moulay Abdesslam
finsi
finsi 31
Formateur: Idrissi Moulay Abdesslam
On peut remplacer cette suite de si par l’instruction cas
L'instruction cas
Sa syntaxe est :
cas où v vaut
v1 : action1
v2 : action2
...
vn : actionn
autre : action autre
fincas
34
Formateur: Idrissi Moulay Abdesslam
Répétitions inconditionnelles
La variable dont on donne le nom va prendre
successivement toutes les valeurs entières entre valeur
initiale et valeur finale. Pour chaque valeur prise par la
variable, la liste des instructions est exécutée.
35
Formateur: Idrissi Moulay Abdesslam
Répétitions inconditionnelles
Autre forme de la boucle Pour :
si condition
alors liste d'instructions
si condition
alors liste d'instructions
si condition
alors liste d'instructions 38
...Moulay Abdesslam
Formateur: Idrissi
Les répétitions conditionnelles
Etant donné que la condition est évaluée avant l'exécution
des instructions à répéter, il est possible que celles-ci ne
soient jamais exécutées.
Exemple
39
supérieures à 1 pixel.
Les répétitions conditionnelles
Nom : saisirLargeurRectangle
Rôle : Vérification validité largeur saisie
Données : La largeur
Résultat :
Principe : Tant que la largeur est < 1, on demande de resaisir la largeur
début
écrire ("indiquez la largeur du rectangle :")
largeur <- lire()
tant que largeur < 1 faire
écrire ("erreur : indiquez une valeur strictement positive")
écrire ("indiquez la largeur du rectangle :")
largeur <- lire()
fin tant que
fin
40
Lexique Formateur: Idrissi Moulay Abdesslam
41
Formateur: Idrissi Moulay Abdesslam
Les répétitions conditionnelles
Nom : saisirLargeurRectangle
Rôle : Vérification validité largeur saisie
Données : La largeur
Résultat :
Principe : Tant que la largeur est < 1, on demande de resaisir la largeur
début
Répéter
écrire ("indiquez la largeur du rectangle :")
largeur <- lire()
si largeur < 1 alors
écrire ("erreur : indiquez une valeur strictement positive")
fin si
jusqu'à largeur >= 1
fin
42
Lexique Formateur: Idrissi Moulay Abdesslam
- largeur : entier, largeur courante saisie
Les répétitions conditionnelles
Différences entre les boucles Tant que et Répéter jusqu'à :
- la séquence d'instructions est exécuter au moins une fois dans la
boucle Répéter jusqu'à, alors qu'elle peut ne pas être exécuter
dans le cas du Tant que.
Syntaxe :
tableau type_des_éléments[borne_inf ... borne_sup]
0 1 2 3 4 5 6 7 8 9
45 54 1 -56 22 134 49 12 90 -26
Chacun des dix nombres du tableau est repéré par son rang,
appelé indice
x ← Tab[0]
Tab[6] ← 43
47
Formateur: Idrissi Moulay Abdesslam
Les tableaux
Dans l'exemple suivant, le programme initialise un à un tous
les éléments d'un tableau de n éléments :
InitTableau
début
pour i de 0 à n-1 faire
tab[i] ← 0
fpour
fin
Lexique :
- i : entier, indice d'itération
- n : entier, taille du tableau
- tab : tableau entier[0..n-1]
48
Formateur: Idrissi Moulay Abdesslam
Les tableaux
Les tableaux à deux dimensions ou matrices
0 1 2 3 4 5 6
0 12 28 44 2 76 77 32
1 23 36 51 11 38 54 25
2 43 21 55 67 83 41 69
2. Décomposer
"...diviser chacune des difficultés que j’examinerai en
autant de parties qu’il se pourrait et qu’il serait requis
pour les mieux résoudre." Descartes
3. Combiner
Résoudre le problème par combinaison d’abstractions 51
Formateur: Idrissi Moulay Abdesslam
Les procédures et les fonctions
Par exemple, résoudre le problème suivant :
Ecrire un programme qui affiche en ordre croissant les notes
d’une promotion suivies de la note la plus faible, de la note la
plus élevée et de la moyenne, revient à résoudre les problèmes
suivants :
- Remplir un tableau de naturels avec des notes saisies
par l’utilisateur
- Afficher un tableau de naturels
- Trier un tableau de naturel en ordre croissant
- Trouver le plus petit naturel d’un tableau
- Trouver le plus grand naturel d’un tableau
- Calculer la moyenne d’un tableau de naturels
52
Formateur: Idrissi Moulay Abdesslam
Les procédures et les fonctions
Chacun de ces sous-problèmes devient un nouveau
problème à résoudre.
n!=1x2x3x…xn
54
Formateur: Idrissi Moulay Abdesslam
Les fonctions récursives
Une autre manière de voir les choses, serait de dire que :
n ! = n x (n-1) !
57
Formateur: Idrissi Moulay Abdesslam
Les fonctions récursives
Pour conclure sur la récursivité, trois remarques fondamentales.
- la programmation récursive, pour traiter certains
problèmes, peut être très économique, elle permet de faire
les choses correctement, en très peu de lignes de
programmation.
Le tri à bulle
C’est un des algorithmes le plus connu. Bien qu’il soit
rarement efficace en terme de temps de calcul, il est
néanmoins correcte.
61
Formateur: Idrissi Moulay Abdesslam
Les algorithmes de tri
Le tri par sélection
64
Formateur: Idrissi Moulay Abdesslam
Les algorithmes de tri
Le tri rapide (Quick Sort)
Ce tri est récursif. On cherche à trier une partie du
tableau, délimitée par les indices gauche et droite.
La recherche dichotomique
La recherche dichotomique recherche un élément dans un
tableau trié et retourne l’indice d’une occurrence de cet
élément.
On compare l’élément cherché à celui qui se trouve au
milieu du tableau. Si l’élément cherché est plus petit, on
continu la recherche dans la première moitié du tableau,
sinon dans la seconde moitié.
On recommence ce processus sur la moitié. On s’arrête
lorsque l’on a trouvé l’élément, ou lorsque l’intervalle de
recherche est nul.
68
Formateur: Idrissi Moulay Abdesslam
Les structures de données dynamiques
Jusqu'ici, on a étudié des structures de données statiques,
c'est-à-dire qui ont un nombre fixe d'informations,
utilisées pour la représentation de données dont la taille
est connue à l'avance et n'évolue pas dans le temps.
71
Formateur: Idrissi Moulay Abdesslam
Les pointeurs
Les procédures RESERVE et LIBERE travaillent
exclusivement avec des pointeurs.
73
Formateur: Idrissi Moulay Abdesslam
Structure autoréférentielle
74
Formateur: Idrissi Moulay Abdesslam
Les listes chaînées
Une liste chaînée est une structure de données dans laquelle
les éléments sont rangés linéairement. Chaque élément est lié
à son successeur, il est donc impossible d'accéder directement
à un élément quelconque de la liste
12 25
→ 4
→ 7
→ /
25 12 7 / 4
75
Formateur: Idrissi Moulay Abdesslam
Les listes chaînées
La façon dont on met en œuvre ces structures dépend des
langages, même si la façon dont cela est représenté ici
ressemble fortement à celle du langage C.
76
Formateur: Idrissi Moulay Abdesslam
Les listes chaînées
Structure Maillon
Entier valeur
Maillon suivant
77
Formateur: Idrissi Moulay Abdesslam
Les listes chaînées
L'exemple précédent peut se définir par
Fin
[Link] ← NULL
78
Formateur: Idrissi Moulay Abdesslam
Les listes doublement chaînées
Une liste doublement chaînée est une liste chaînée, à ceci près que
l'on peut accéder à son prédécesseur.
→ → →
/ 12 25 4 7 /
← ← ←
Bien sûr, cette linéarité est purement virtuelle. Tout comme pour
les listes chaînées simples, les éléments n'ont aucune raison d'être
contigus ni ordonnés en mémoire.
25 / 12 7 / 4
79
Formateur: Idrissi Moulay Abdesslam
Les listes doublement chaînées
Structure Maillon
Entier valeur
Maillon suivant
Maillon precedent
80
Formateur: Idrissi Moulay Abdesslam
Les listes doublement chaînées
Maillon cell1, cell2, cell3, cell4
Début
[Link] ← 12
[Link] ← #cell2
[Link] ← NULL
[Link] ← 25
[Link] ← #cell3
[Link] ← #cell1
[Link] ← 4
[Link] ← #cell4
[Link] ← #cell2
[Link] ← 7
[Link] ← NULL
81
Formateur: Idrissi Moulay Abdesslam
[Link] ← #cell3
Les listes
82
Formateur: Idrissi Moulay Abdesslam
Les piles et les files
Ce sont des structures de données ordonnées, mais qui ne
permettent l'accès qu'à une seule donnée.
- l'empilage
- le dépilage
Booléen Pile_Vide(Pile P)
Début
Retourner([Link] = -1) // test si pile vide
Fin
Empiler(Pile P, Réel x)
Début
[Link] ← [Link] +1
[Link][[Link]] ← x
87
Fin Formateur: Idrissi Moulay Abdesslam
Les piles et les files
Réel Dépiler(Pile P)
Début
Si Pile_Vide(P) Alors
Ecrire("Pile vide!")
Sinon
[Link] ← [Link] -1
Retourner [Link][[Link] + 1]
Fin
88
Formateur: Idrissi Moulay Abdesslam
Les arbres
Les listes sont des structures dynamiques unidimensionnelles.
Les arbres sont leur généralisation multidimensionnelle.
Définition :
Un arbre est formé d’un élément de type arbre appelé racine
et d’un nombre fini d’arbres appelés sous-arbres.
- Les chemins
- Un arc est un chemin reliant deux nœuds
90
Formateur: Idrissi Moulay Abdesslam
- Une branche est un chemin reliant la racine à une feuille.
Les arbres
Qualification des arbres
- Horizontale
91
Formateur: Idrissi Moulay Abdesslam
Les arbres
- Verticale
- La hauteur d’un arbre binaire est le nombre de nœuds qui
constituent la plus longue branche de la racine une
feuille.
- Un arbre constitué de seulement une racine a une hauteur
de 1.
- S’il est constitué d’une racine et d’une feuille sa hauteur
est de 2.
92
Formateur: Idrissi Moulay Abdesslam
Les arbres
1 racine
33 35 nœud
2 4 6 2 8 feuille
12 93
Arbre ternaire incomplet de hauteur
Formateur: Idrissi 4
Moulay Abdesslam
Les arbres
8 père
33 35 frères
65 66 62 63 fils
95
Formateur: Idrissi Moulay Abdesslam
Les arbres
De nombreux algorithmes ont été développés pour les arbres
binaires.
2 3
4 5 6
7 8 9 10
97
Formateur: Idrissi Moulay Abdesslam
Les arbres
Méthodologie
Plusieurs méthodes permettent d’accéder à tous les nœuds d’un
arbre binaire.
99
Formateur: Idrissi Moulay Abdesslam
Les arbres
procedure prefixe(entree p : pointeur)
Debut
si p <> NULL
alors afficher(p → val)
prefixe(p → g)
prefixe(p → d)
sinon afficher(f)
fin si
Fin
Résultat :
100
1 2 4 7 f f 8 f f Formateur:
5 f 9 Idrissi
f f Moulay
3 f Abdesslam
6 f 10 f f
Les arbres
Parcours postfixé
Ce parcours est également appelé parcours en postordre ou
ascendant gauche droite ou en ordre terminal.
101
Formateur: Idrissi Moulay Abdesslam
Les arbres
procedure postfixe(entree p : pointeur)
Debut
si p <> NULL
alors postfixe(p → g)
postfixe(p → d)
afficher(p → val)
sinon afficher(f)
fin si
Fin
Résultat :
f f 7 f f 8 4 f f f 9 5 2 f f f f 10 6 3 1
102
Formateur: Idrissi Moulay Abdesslam
Les arbres
Parcours infixé
Ce parcours est également appelé parcours symétrique,
projectif ou hiérarchique canonique.
103
Formateur: Idrissi Moulay Abdesslam
Les arbres
procedure infixe(entree p : pointeur)
Debut
si p <> NULL
alors infixe(p → g)
afficher(p → val)
infixe(p → d)
sinon afficher(f)
fin si
Fin
Résultat :
f 7 f 4 f 8 f 2 f 5 f 9 f 1 f 3 f 6 f 10 f
104
Formateur: Idrissi Moulay Abdesslam
Les arbres
L'expression 2*5+2*(cos((5*3.14)/180)) peut se
représenter de la façon suivante
* *
2 5 2 COS
* 180
105
Formateur: Idrissi Moulay Abdesslam
5 3.14
Les graphes
Un graphe est un ensemble de nœuds reliés par des liens.
Un graphe est dit pondéré lorsqu'à chaque lien est associé une
valeur (appelée poids).
106
Formateur: Idrissi Moulay Abdesslam
Les graphes
On utilisera les graphes pondérés par exemple pour :
- gérer des itinéraires routiers (quelle est la route la plus
courte pour aller d'un nœud à un autre).
- gérer des fluides (nœuds reliés par des tuyauteries de
diamètre différents).
- simuler un trafic routier.
- simuler un circuit électrique.
- prévoir un ordonnancement
107
Formateur: Idrissi Moulay Abdesslam
Les graphes
On peut représenter un graphe de manière dynamique, comme
les arbres.