Introduction à l'Algorithmique et Programmation
Introduction à l'Algorithmique et Programmation
Paul Gaborit
2024/2025
Sommaire
I Introduction 4
1 Introduction 4
1.1 Objectifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 Contexte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
II Algorithmique 7
4 Structures de contrôles 16
4.1 Les conditions logiques . . . . . . . . . . . . . . . . . . . . . . . 17
4.2 Les structures de choix . . . . . . . . . . . . . . . . . . . . . . . 18
4.3 Les structures de répétition . . . . . . . . . . . . . . . . . . . . 23
III Analyse 29
5 Idée 29
6 Analyse descendante 29
6.1 Diviser pour mieux régner . . . . . . . . . . . . . . . . . . . . . 29
6.2 Les fonctions : des algorithmes qui retournent un résultat . . . 32
6.3 Recette en utilisant une fonction . . . . . . . . . . . . . . . . . 33
7 Schéma bulle 34
2
Note : le document actuel ne constitue pas l’intégralité du cours « Algorith-
mique et Programmation ». Ce n’est que l’introduction générale et l’introduction
à la partie algorithmique. Il doit être complété par les autres supports qui
l’accompagnent.
Il existe sous deux formes différentes : une série de slides pour présentation
orale et le présent document qui reprend les slides agrémentés de commentaires
et d’explications.
3
Première partie
Introduction
1 Introduction Introduction
Objectifs
Contexte
1.1 Objectifs
Objectifs du cours 4/42
Initiation à l’algorithmique :
conception et écriture d’algorithmes
variables et structures de données
structures de contrôle algorithmique
procédures, fonctions, méthodes, paramètres
analyse descendante
Initiation à la programmation
initiation à l’utilisation de la ligne de commande
un langage de script : le langage Python
édition, exécution et correction de programmes/scripts
manipulation des structures de données, de classes
conception de modules,
utilisation de bibliothèques de fonctions externes
calcul numérique, précision, stabilité
Des nos jours, tout le monde utilise des ordinateurs et les ingénieurs n’y
échappent pas. Lors de leur formation et dans leur métier, ils sont donc
amenés à pratiquer de nombreux logiciels. Mais au-delà de son utilisation, un
ingénieur se doit aussi de savoir comment on conçoit un programme destiné à
un ordinateur. Le but de ce cours est de vous donner un premier aperçu du
monde de la conception logicielle.
4
Objectifs
Introduction
Contexte
1.2 Contexte
Mise en contexte 5b/42
Besoins Déploiement
Spécifications Recette
Utilisateur
Développeur
Analyse Tests d’intégration
Activités de Activités de
création/production Acteurs test/validation
5
Objectifs
Introduction
Contexte
Besoins Déploiement
Spécifications Recette
Utilisateur
Développeur
Analyse Tests d’intégration
Activités de Activités de
création/production Acteurs test/validation
Dans ce cours, nous verrons comment réaliser une analyse (la création d’algo-
rithmes est le résultat d’une analyse) et comment produire le code correspondant
(en traduisant ces algorithmes dans un langage de programmation). Lors des
exercices pratiques vous réaliserez et testerez vos propres logiciels pour couvrir
l’ensemble des activités du développeur.
6
Deuxième partie
Algorithmique
Écriture des algorithmes
Les variables et les paramètres
Structures de contrôles
C’est sur la base de leurs travaux qu’ont été créés les calculateurs ou ordinateurs
modernes.
7
2 Écriture des algorithmes
2.1 Les algorithmes dans la vie courante
Les algorithmes dans la vie courante
Voici une recette deLescuisine
variables et les: paramètres
Écriture des algorithmes
Ordinogramme : une notation peu pratique
Notation textuelle des algorithmes
Structures de contrôles
Règles d’écriture (pour ce cours)
Une recette de cuisine est une sorte d’algorithme. Elle en présente tous les
éléments :
— un titre décrivant l’objectif de la recette,
— la liste des ingrédients qui donne la liste exhaustive de ce qui sera
transformé,
— une suite ordonnée d’opérations à réaliser.
8
Faisons déjà une première constatation : pour que la recette soit réalisable, les
opérations décrites doivent être à la portée du cuisinier lecteur. Si, dans une
recette, il rencontre les termes « déglacer » ou « écaler » sans en connaître le
sens, il lui faudra trouver une recette plus détaillée.
Les instructions données doivent donc être compréhensibles pour être exé-
cutables directement par celui à qui est destiné l’algorithme ou alors ces
instructions doivent être décrites par ailleurs (par exemple sous la forme d’un
algorithme spécifique plus détaillé).
9
2.3 Notation textuelle des algorithmes
Attention !
Par la suite, nous n’utiliserons plus que la représentation textuelle des
algorithmes (plus d’ordinogramme sauf pour permettre une comparaison
avec la représentation textuelle).
Dans tous vos rendus (exercices, devoirs et projets), nous attendons que
vous utilisiez la représentation textuelle des algorithmes en respectant le
mieux possible le formalisme présenté tout au long de nos supports !
Les algorithmes dans la vie courante
Écriture des algorithmes
Ordinogramme : une notation peu pratique
Les variables et les paramètres
Notation textuelle des algorithmes
Structures de contrôles
Règles d’écriture (pour ce cours)
Ce titre est suivi par une introduction décrivant les conditions nécessaires à la
réalisation de l’algorithme ainsi que les objets qu’il manipule. Nous verrons
plus tard qu’on y place aussi la déclaration des paramètres et des variables
utilisés par l’algorithme.
Puis vient le mot clé Début (c’est un mot clé car il est en gras) relié par un
filet vertical au mot clé Fin. C’est notre première structure de contrôle. Elle est
toujours présente dans chaque algorithme. Cette structure Début-Fin contient
toutes les instructions de l’algorithme.
10
Entre ces deux mots clé apparaissent la suite des instructions. Elles sont ordon-
nées et indentées au même niveau (l’indentation c’est l’espace qui détermine
l’alignement vertical du début d’une ligne).
11
3 Les variables et les paramètres
Écriture des algorithmes
Les variables et les paramètres
Description des variables et des paramètres
Affectation d’une valeur à une variable
Structures de contrôles Les différents types de données
Le titre est complété par une liste de noms de paramètres placée entre paren-
thèses. En fait, ici cette liste ne contient qu’un seul paramètre : nbConvives.
Les paramètres doivent être décrits dans l’introduction.
Toutes les instructions ont été modifiées pour utiliser maintenant les valeurs
mémorisées par notre paramètre et nos deux variables.
12
Lors de l’exécution de l’algorithme, il faudra fournir une valeur à chaque
paramètre et c’est cette valeur qui sera utilisé dans les instructions. De même,
chaque fois qu’apparaît une variable dans une instruction, il faudra lui substituer
sa valeur au moment de l’exécution de cette instruction (c’est pour cela qu’on
appelle cela une variable : sa valeur peut changer pendant le déroulement de
l’algorithme).
Le seul endroit où une variable ne doit pas être substituée par sa valeur
c’est lorsqu’elle apparaît à gauche d’une flèche (←) comme dans les deux
premières instructions. C’est ce qu’on appelle une opération d’affectation.
Voyons maintenant ce Écriture
que descela signifie.
algorithmes Description des variables et des paramètres
Les variables et les paramètres Affectation d’une valeur à une variable
Structures de contrôles Les différents types de données
Remarquez que le choix de cette flèche vers la gauche montre bien le sens
de l’opération. Ce n’est pas le cas de nombreux langages informatiques qui
utilisent le symbole égale (=) pour symboliser cette opération. Mais écrire
l’expression nb = nb + 1 heurte toujours un peu les scientifiques !
Notez aussi que la partie calcul d’une affectation utilise généralement des
notations mathématiques. On suppose que ces notations sont connues de
l’entité exécutant l’algorithme.
13
Écriture des algorithmes Description des variables et des paramètres
Les variables et les paramètres Affectation d’une valeur à une variable
Structures de contrôles Les différents types de données
14
pour décrire une entité. C’est le rôle des structures de données (qui regroupe
différents champs ou attributs ayant chacun leur propre type).
Dans ce cours, nous verrons aussi quelques exemples de collections (les en-
sembles, les listes, les vecteurs, les tableaux, les matrices, les dictionnaires ou
tableaux associatifs...).
15
Écriture des algorithmes Les conditions logiques
Les variables et les paramètres Les structures de choix
Structures de contrôles Les structures de répétition
4 Structures de contrôles
Structures de contrôle 19/42
Nous allons maintenant voir les structures de contrôle les plus courantes. Toutes
les autres structures de contrôle (si on ne s’intéresse pas aux actions en parallèle)
sont exprimables à partir de ces structures de contrôle de base. Pour chacune
d’entre elles, nous donnerons son équivalent sous forme d’ordinogramme (c’est
la dernière fois que nous utiliserons cette notation), nous ferons quelques
remarques générales sur son fonctionnement et nous donnerons un exemple
d’algorithme illustrant son usage.
Mais comme toutes ces structures de contrôle utilisent des conditions logiques,
nous allons tout d’abord expliquer ce qu’on appelle une condition logique.
16
Écriture des algorithmes Les conditions logiques
Les variables et les paramètres Les structures de choix
Structures de contrôles Les structures de répétition
En algorithmique, une condition est sans modalité : elle ne peut pas être
presque vraie ou partiellement fausse. À un instant donné, son évaluation est
soit vraie, soit fausse.
Une condition logique simple est le résultat d’une comparaison logique entre
deux valeurs (constantes, variables, paramètres ou calcul). Deux exemples :
(caractere ̸= ’A’)
Pour que la valeur de vérité (la véracité) d’une condition logique change pendant
l’exécution d’un algorithmique, elle doit faire référence à une variable (comme
les deux exemples ci-dessus).
Les trois opérateurs de combinaison logique de base (et, ou, non) permettent
de construire des conditions logique plus complexes :
(P et Q) ≡ (P ∧ Q)
(P ou Q) ≡ (P ∨ Q)
(non P ) ≡ (P )
17
Écriture des algorithmes Les conditions logiques
4.2 Les structures de
Les variables et les choix
paramètres
Structures de contrôles
Les structures de choix
Les structures de répétition
Si-Alors-FinSi
Si-Alors-FinSi 21a/42
...
...
Si ( condition ) Alors
condition faux
...
instructions vrai
...
...instructions...
Fin Si
...
...
Si-Alors-FinSi
Algorithmique et programmation
2024/2025
21b/42
Paul Gaborit
Centre Génie Industriel, IMT Mines Albi
18
Écriture des algorithmes Les conditions logiques
Les variables et les paramètres Les structures de choix
Structures de contrôles Les structures de répétition
On suppose ici que l’action Afficher permet d’afficher les valeurs des
paramètres qu’on lui fournit.
19
Écriture des algorithmes Les conditions logiques
Les variables et les paramètres Les structures de choix
Structures de contrôles Les structures de répétition
Si-Alors-Sinon-FinSi
Si-Alors-Sinon-FinSi 23a/42
... ...
Si ( condition ) Alors
...
instructions 1
... condition
vrai faux
Sinon
... ...instructions 1... ...instructions 2...
instructions 2
...
Fin Si ...
...
Écriture des algorithmes Les conditions logiques
Les variables et les paramètres Les structures de choix
Structures de contrôles Les structures de répétition
Si-Alors-Sinon-FinSi
Algorithmique et programmation
2024/2025
23b/42
Paul Gaborit
Centre Génie Industriel, IMT Mines Albi
...
Si ( condition ) Alors La condition est une expression logique dont le
résultat permet de choisir le bloc d’instructions à
... exécuter.
instructions 1 Ce bloc d’instructions est exécuté uniquement si
... la condition est vraie.
Cette structure permet donc de gérer une alternative entre deux blocs. Notez
qu’en français, le terme alternative recouvre bien les deux possibilités entre
lesquelles on doit choisir.
20
Écriture des algorithmes Les conditions logiques
Les variables et les paramètres Les structures de choix
Structures de contrôles Les structures de répétition
Début
Si (age ⩾ ageMajorite) Alors
Afficher(« Vous êtes majeur. »)
Sinon
Afficher(« Vous êtes mineur. »)
Fin Si
Fin
21
Écriture des algorithmes Les conditions logiques
Les variables et les paramètres Les structures de choix
Si-Alors-SinonSi-Sinon-FinSi
Structures de contrôles Les structures de répétition
Si-Alors-SinonSi-Sinon-FinSi 25/42
22
Écriture des algorithmes Les conditions logiques
4.3 Les structures de
Les variables et les répétition
paramètres Les structures de choix
Structures de contrôles Les structures de répétition
TantQue-FinTantQue
TantQue-FinTantQue 26a/42
...
...
Tant Que ( condition ) Faire
condition faux
...
instructions vrai
...
...instructions...
Fin Tant Que
...
...
TantQue-FinTantQue
Algorithmique et programmation
2024/2025
26b/42
Paul Gaborit
Centre Génie Industriel, IMT Mines Albi
Pour que nous ayons à faire à un algorithme, il nous faut absolument prouver
que cette répétition s’arrêtera un jour, c’est-à-dire que la condition deviendra
fausse. Au minimum, il est donc indispensable que la condition fasse référence
à des variables dont la valeur est modifiée par les instructions contenues dans
la structure TantQue-FinTantQue.
23
Écriture des algorithmes Les conditions logiques
24
Écriture des algorithmes Les conditions logiques
Les variables et les paramètres Les structures de choix
Structures de contrôles Les structures de répétition
Répéter-Jusqu’à
Répéter-Jusqu’à 28a/42
...
...
Répéter ...instructions...
...
instructions condition faux
...
vrai
Jusqu’à ( condition )
...
...
Répéter-Jusqu’à
Algorithmique et programmation
2024/2025
28b/42
Paul Gaborit
Centre Génie Industriel, IMT Mines Albi
Cette condition doit donc faire référence à des variables dont la valeur est modi-
fiée par la suite d’instructions. Et comme dans le cas du TantQue-FinTantQue,
il faut pouvoir prouver que cette condition deviendra vraie au cours de l’exé-
cution. Sinon, on risque une boucle infinie et donc nous ne sommes plus en
présence d’un algorithme.
25
Écriture des algorithmes Les conditions logiques
Les variables et les paramètres Les structures de choix
Structures de contrôles Les structures de répétition
Cette conjecture suppose qu’on part d’un entier strictement positif. Puis s’il
est pair, on le divise par 2 et s’il est impair, on le multiplie par 3 et on ajoute 1.
On recommence cette opération sur la nouvelle valeur obtenue jusqu’à obtenir
la valeur 1.
C’est une conjecture car on n’a jamais réussi à prouver qu’on obtenait toujours 1
quelle que soit la valeur de départ. Notre algorithme exemple n’en est peut-être
pas un ! Mais heureusement on n’a jamais trouvé non plus de contre-exemple.
Sachez tout de même que cette conjecture a été vérifiée pour tous les nombres
N < 262 (janvier 2008 - T. Oliveira e Silva) et que, mis à part le cycle évident
(1, 4, 2, 1...), on sait qu’il n’existe pas de cycle de longueur inférieur à 17
milliards !
26
Écriture des algorithmes Les conditions logiques
Les variables et les paramètres Les structures de choix
Structures de contrôles Les structures de répétition
Structure
Structure de contrôle
de contrôle dérivée: :Pour-FinPour
dérivée Pour-FinPour 30b/42
Ces deux algorithmes sont équivalents (la structure de contrôle Pour-FinPour n’est
donc pas strictement nécessaire).
Sur la droite, vous pouvez voir un algorithme équivalent qui n’utilise qu’une
structure de contrôle TantQue-FinTantQue...
Son rôle est de répéter l’exécution d’une suite d’instructions tout en faisant
varier la valeur d’une variable entière (appelée ici Cpt) d’une valeur minimum
à une valeur maximum. À la première exécution, la variable vaut la valeur
minimum. Puis cette variable est incrémentée (sa valeur est augmentée de 1) et
on recommence l’exécution de la suite d’instructions avec cette nouvelle valeur.
On s’arrête lorsque la variable dépasse la valeur maximum.
La variable qui est incrémentée et testée par une structure de contrôle Pour-
FinPour s’appelle un compteur (elle permet de « compter » les itérations
successives).
27
Écriture des algorithmes Les conditions logiques
Les variables et les paramètres Les structures de choix
Structures de contrôles Les structures de répétition
28
Troisième partie
Analyse
5 Idée
Pour produire un (ou plusieurs) algorithme(s) permettant de résoudre un
problème, il faut avoir une idée de la méthode permettant de le faire. En effet,
comment imaginer être capable de donner des instructions précises à réaliser si
soi-même on n’a pas une idée de comment résoudre le problème.
Il faut donc souvent commencer par exposer son idée générale afin d’en extraire
de précieuses informations permettant de mieux formaliser le problème. C’est
aussi l’occasion d’analyser les spécifications fournies par le demandeur pour
s’assurer qu’elles sont sans ambiguïtés...
29
Idée Diviser pour mieux régner
Analyse descendante Les fonctions : des algorithmes qui retournent un résultat
Schéma bulle Recette en utilisant une fonction
problème « complexe »
Pommes de terre
0 en robe des 4
champs
1 2 3
30
Idée Diviser pour mieux régner
Analyse descendante Les fonctions : des algorithmes qui retournent un résultat
Schéma bulle Recette en utilisant une fonction
Dans le cadre ci-dessus, nous avons deux des trois algorithmes secondaires : la
préparation et la cuisson.
31
Idée Diviser pour mieux régner
Analyse descendante Les fonctions : des algorithmes qui retournent un résultat
Schéma bulle Recette en utilisant une fonction
Fonction exemple(...paramètres...)
... description de la fonction, de ses paramètres, de ses variables ...
Résultat : resultat (type) ... description ...
Début
... instructions de calcul du resultat ...
Retour (resultat)
Fin
Une fonction est un algorithme qui retourne un résultat (une procédure est
un algorithme qui ne retourne pas de résultat). Elle s’écrit quasiment comme
n’importe quel autre algorithme... sauf qu’après la description des conditions
d’usage et des éventuels paramètres et variables, on trouve la description de
son résultat. Comme pour les paramètres et les variables, le résultat est décrit
par son nom (généralement Resultat ou Res mais on peut choisir un autre
nom), son type et sa sémantique (son rôle, son sens).
Note : on ne parle que d’un seul résultat car de nombreux langages informatiques
(C, C++, Java, Fortran...) ne peuvent retourner qu’une seule valeur. Dans les
langages de scripts (tels Python, Ruby, Perl, JavaScript...), une fonction peut
retourner une liste (un tuple en Python) de résultats.
32
Idée Diviser pour mieux régner
Analyse descendante Les fonctions : des algorithmes qui retournent un résultat
Schéma bulle Recette en utilisant une fonction
Un pas de Syracuse(val)
Paramètre : val (entier positif) valeur dont on veut calculer le successeur dans la
conjecture de Syracuse.
Résultat : successeur (entier positif) le successeur de val.
Début
Si (val est paire) Alors
successeur ← val/2
Sinon
successeur ← 3 × val + 1
Fin Si
Retour (successeur)
Fin
Cet algorithme fait appel à la fonction Un pas de Syracuse pour (tenter de)
vérifier la conjecture de Syracuse.
33
Idée Diviser pour mieux régner
Analyse descendante Les fonctions : des algorithmes qui retournent un résultat
Schéma bulle Recette en utilisant une fonction
7 Schéma bulle
Avant de se lancer dans la rédaction d’un algorithme, il est aussi pratique de
bien décrire ce qu’il va réaliser si on le considère comme une boîte noire :
— Quelles sont les paramètres (les informations ou données) qu’il recevra
au départ ?
— Quel(s) résultat(s) doit-il produire au final ?
— Durant son exécution : quelle(s) interaction(s) éventuelle(s) aura-t-il
avec l’extérieur ? Quelle(s) information(s) doit-il demander ou doit-il
produire ?
34
Note : l’appel à un ou plusieurs autres algorithmes durant l’exécution n’est
pas considéré comme une interaction avec l’extérieur. Mais si les algorithmes
appelés ont des interactions avec l’extérieur alors l’algorithme appelant les aura
aussi.
Nom de
Les paramètres Le(s) résultat(s)
l’algorithme
35