Académique Documents
Professionnel Documents
Culture Documents
Hervé H OCQUARD
hocquard@labri.fr
Université de Bordeaux
LaBRI
2015–2016
Semestre 2
1 Introduction
2 Langage algorithmique
3 Lexique des variables
4 Algorithme
5 Lexique des constantes
6 Structures conditionnelles
7 Structures itératives
8 Fonctions
9 Fonctions récursives
10 Tableaux
Plan
1 Introduction
2 Langage algorithmique
3 Lexique des variables
4 Algorithme
5 Lexique des constantes
6 Structures conditionnelles
7 Structures itératives
8 Fonctions
9 Fonctions récursives
10 Tableaux
Introduction
Introduction
Introduction
Introduction
Algorithme
Algorithme
Algorithme
Algorithme
Problème et énoncé
Problème et énoncé
Problème et énoncé
Problème et énoncé
Résolution de problèmes
Résolution de problèmes
Résolution de problèmes
Résolution de problèmes
Résolution de problèmes
Résolution de problèmes
Un exemple
Algorithme d’Euclide
Données : deux nombres entiers a et b
Résultat : PGCD de a et b
1 Ordonner les deux nombres tels que a ≥ b.
2 Calculer leur différence c ← a − b.
3 Recommencer en remplaçant a par c (a ← c)
jusqu’à ce que a devienne égal à b.
4 Le résultat est alors a ( = b)
Étape 1 : a ← 174 et b ← 72
Étape 2 : c ← 174 − 72 = 102
Étape 3 : a ← c = 102 6= b = 72
Étape 1 : a ← 174 et b ← 72
Étape 2 : c ← 174 − 72 = 102
Étape 3 : a ← c = 102 6= b = 72
Étape 4 : a ← 102 et b ← 72
Étape 5 : c ← 102 − 72 = 30
Étape 6 : a ← c = 30 6= b = 72
Étape 1 : a ← 174 et b ← 72
Étape 2 : c ← 174 − 72 = 102
Étape 3 : a ← c = 102 6= b = 72
Étape 4 : a ← 102 et b ← 72
Étape 5 : c ← 102 − 72 = 30
Étape 6 : a ← c = 30 6= b = 72
Étape 7 : a ← 72 et b ← 30
Étape 8 : c ← 72 − 30 = 42
Étape 9 : a ← c = 42 6= b = 30
Étape 1 : a ← 174 et b ← 72
Étape 2 : c ← 174 − 72 = 102
Étape 3 : a ← c = 102 6= b = 72
Étape 4 : a ← 102 et b ← 72
Étape 5 : c ← 102 − 72 = 30
Étape 6 : a ← c = 30 6= b = 72
Étape 7 : a ← 72 et b ← 30
Étape 8 : c ← 72 − 30 = 42
Étape 9 : a ← c = 42 6= b = 30
Étape 10 : a ← 42 et b ← 30
Étape 11 : c ← 42 − 30 = 12
Étape 12 : a ← c = 12 6= b = 30
...
H. H OCQUARD (LaBRI) Algorithmique et Programmation 2015–2016 p. 10
Introduction Exemple
...
Étape 13 : a ← 30 et b ← 12
Étape 14 : c ← 30 − 12 = 18
Étape 15 : a ← c = 18 6= b = 12
...
Étape 13 : a ← 30 et b ← 12
Étape 14 : c ← 30 − 12 = 18
Étape 15 : a ← c = 18 6= b = 12
Étape 16 : a ← 18 et b ← 12
Étape 17 : c ← 18 − 12 = 6
Étape 18 : a ← c = 6 6= b = 12
...
Étape 13 : a ← 30 et b ← 12
Étape 14 : c ← 30 − 12 = 18
Étape 15 : a ← c = 18 6= b = 12
Étape 16 : a ← 18 et b ← 12
Étape 17 : c ← 18 − 12 = 6
Étape 18 : a ← c = 6 6= b = 12
Étape 19 : a ← 12 et b ← 6
Étape 20 : c ← 12 − 6 = 6
Étape 21 : a ← c = 6 = b = 6
...
Étape 13 : a ← 30 et b ← 12
Étape 14 : c ← 30 − 12 = 18
Étape 15 : a ← c = 18 6= b = 12
Étape 16 : a ← 18 et b ← 12
Étape 17 : c ← 18 − 12 = 6
Étape 18 : a ← c = 6 6= b = 12
Étape 19 : a ← 12 et b ← 6
Étape 20 : c ← 12 − 6 = 6
Étape 21 : a ← c = 6 = b = 6
Arrêt car a = b
le résultat est donc 6
Langages
Langages
Langages
Langages
Langages
Langages
Langages
Types de langages
Types de langages
Types de langages
Types de langages
Types de langages
Types de langages
Plan
1 Introduction
2 Langage algorithmique
3 Lexique des variables
4 Algorithme
5 Lexique des constantes
6 Structures conditionnelles
7 Structures itératives
8 Fonctions
9 Fonctions récursives
10 Tableaux
Étapes de la conception
Étapes de la conception
Étapes de la conception
Étapes de la conception
Étapes de la conception
Étapes de la conception
Étapes de la conception
Étapes de la conception
Étapes de la conception
Étapes de la conception
Données et résultats
Données et résultats
Données et résultats
Données et résultats
Données et résultats
Description des données
Spécifier précisément ce qui doit être donné à l’algorithme avant de
l’utiliser.
Synopsis :
Utilisation du mot clef « Données » suivi d’un texte en langage naturel
décrivant les données.
Description des résultats
Spécifier précisément ce que doit produire l’algorithme et le lien entre le
résultat et les données fournies au départ.
Synopsis :
Utilisation du mot clef « Résultats » suivi d’un texte en langage naturel
décrivant le résultat.
Données et résultats
Description des données
Spécifier précisément ce qui doit être donné à l’algorithme avant de
l’utiliser.
Synopsis :
Utilisation du mot clef « Données » suivi d’un texte en langage naturel
décrivant les données.
Description des résultats
Spécifier précisément ce que doit produire l’algorithme et le lien entre le
résultat et les données fournies au départ.
Synopsis :
Utilisation du mot clef « Résultats » suivi d’un texte en langage naturel
décrivant le résultat.
Exemples
Résultat
PGCD de a et b.
Exemples
Résultat
PGCD de a et b.
Résultat
Demande les dimensions d’un champ à l’utilisateur, puis affiche sa superficie.
Idée de l’algorithme
Idée de l’algorithme
Idée de l’algorithme
Idée de l’algorithme
Idée de l’algorithme
Plan
1 Introduction
2 Langage algorithmique
3 Lexique des variables
4 Algorithme
5 Lexique des constantes
6 Structures conditionnelles
7 Structures itératives
8 Fonctions
9 Fonctions récursives
10 Tableaux
Exemples
Exemple 1 : PGCD
Lexique des variables
a (entier) Premier entier donné DONNÉE
b (entier) Deuxième entier donné DONNÉE
pgcd (entier) PGCD de a et b RÉSULTAT
c (entier) Variable intermédiaire INTERMÉDIAIRE
Exemples
Exemple 1 : PGCD
Lexique des variables
a (entier) Premier entier donné DONNÉE
b (entier) Deuxième entier donné DONNÉE
pgcd (entier) PGCD de a et b RÉSULTAT
c (entier) Variable intermédiaire INTERMÉDIAIRE
Exemples
Exemple 1 : PGCD
Lexique des variables
a (entier) Premier entier donné DONNÉE
b (entier) Deuxième entier donné DONNÉE
pgcd (entier) PGCD de a et b RÉSULTAT
c (entier) Variable intermédiaire INTERMÉDIAIRE
Exemples
Exemple 1 : PGCD
Lexique des variables
a (entier) Premier entier donné DONNÉE
b (entier) Deuxième entier donné DONNÉE
pgcd (entier) PGCD de a et b RÉSULTAT
c (entier) Variable intermédiaire INTERMÉDIAIRE
Exemples
Exemples
Exemples
Exemples
Plan
1 Introduction
2 Langage algorithmique
3 Lexique des variables
4 Algorithme
5 Lexique des constantes
6 Structures conditionnelles
7 Structures itératives
8 Fonctions
9 Fonctions récursives
10 Tableaux
Algorithme
Algorithme
Algorithme
Explications
« lire » signifie que la valeur est donnée par l’utilisateur (ex. : au clavier).
Explications
« lire » signifie que la valeur est donnée par l’utilisateur (ex. : au clavier).
« écrire » ou « Affiche » affiche le texte et/ou les valeurs qui suivent à
l’écran.
Explications
« lire » signifie que la valeur est donnée par l’utilisateur (ex. : au clavier).
« écrire » ou « Affiche » affiche le texte et/ou les valeurs qui suivent à
l’écran.
L’affectation est indiquée par « ← » :
affecte la valeur résultant de l’évaluation de l’expression à droite de la
flèche dans la variable placée à gauche ;
« truc ← machin » peut se lire « la variable truc reçoit la valeur machin » ;
attention à la correspondance des types !
on ne peut affecter à une variable qu’une valeur de même type ;
cela permet de vérifier la cohérence de ce que l’on écrit.
Explications
« lire » signifie que la valeur est donnée par l’utilisateur (ex. : au clavier).
« écrire » ou « Affiche » affiche le texte et/ou les valeurs qui suivent à
l’écran.
L’affectation est indiquée par « ← » :
affecte la valeur résultant de l’évaluation de l’expression à droite de la
flèche dans la variable placée à gauche ;
« truc ← machin » peut se lire « la variable truc reçoit la valeur machin » ;
attention à la correspondance des types !
on ne peut affecter à une variable qu’une valeur de même type ;
cela permet de vérifier la cohérence de ce que l’on écrit.
Exemple : maVariable ← 15
maVariable contient la valeur 15 après l’instruction ;
la valeur 15 sera prise en lieu et place de maVariable dans la suite de
l’algorithme, jusqu’à sa prochaine modification.
Explications
« lire » signifie que la valeur est donnée par l’utilisateur (ex. : au clavier).
« écrire » ou « Affiche » affiche le texte et/ou les valeurs qui suivent à
l’écran.
L’affectation est indiquée par « ← » :
affecte la valeur résultant de l’évaluation de l’expression à droite de la
flèche dans la variable placée à gauche ;
« truc ← machin » peut se lire « la variable truc reçoit la valeur machin » ;
attention à la correspondance des types !
on ne peut affecter à une variable qu’une valeur de même type ;
cela permet de vérifier la cohérence de ce que l’on écrit.
Exemple : maVariable ← 15
maVariable contient la valeur 15 après l’instruction ;
la valeur 15 sera prise en lieu et place de maVariable dans la suite de
l’algorithme, jusqu’à sa prochaine modification.
Il est interdit de chercher à utiliser la valeur d’une variable avant que
celle-ci soit définie (variable non initialisée).
H. H OCQUARD (LaBRI) Algorithmique et Programmation 2015–2016 p. 26
Algorithme Généralités
Déroulement de l’exemple
Algorithme
longueur ← lire
largeur ← lire
surface ← longueur × largeur
écrire surface
Variables
longueur ? largeur ? surface ?
Entrées Sorties
40
12
Déroulement de l’exemple
Algorithme
longueur ← lire
largeur ← lire
surface ← longueur × largeur
écrire surface
Variables
longueur 40 largeur ? surface ?
Entrées Sorties
40
12
Déroulement de l’exemple
Algorithme
longueur ← lire
largeur ← lire
surface ← longueur × largeur
écrire surface
Variables
longueur 40 largeur 12 surface ?
Entrées Sorties
40
12
Déroulement de l’exemple
Algorithme
longueur ← lire
largeur ← lire
surface ← longueur × largeur
écrire surface
Variables
longueur 40 largeur 12 surface 480
Entrées Sorties
40
12
Déroulement de l’exemple
Algorithme
longueur ← lire
largeur ← lire
surface ← longueur × largeur
écrire surface
Variables
longueur 40 largeur 12 surface 480
Entrées Sorties
40 480
12
Déroulement de l’exemple
Algorithme
longueur ← lire
largeur ← lire
surface ← longueur × largeur
écrire surface
Variables
longueur 40 largeur 12 surface 480
Entrées Sorties
40 480
12
End Sub
Opérateurs
Opérateurs (suite)
Plan
1 Introduction
2 Langage algorithmique
3 Lexique des variables
4 Algorithme
5 Lexique des constantes
6 Structures conditionnelles
7 Structures itératives
8 Fonctions
9 Fonctions récursives
10 Tableaux
Exemple
Lexique des constantes
TAUX_TVA (réel) = 19,6 Taux de TVA en vigueur
Plan
1 Introduction
2 Langage algorithmique
3 Lexique des variables
4 Algorithme
5 Lexique des constantes
6 Structures conditionnelles
7 Structures itératives
8 Fonctions
9 Fonctions récursives
10 Tableaux
Les conditionnelles
faux vrai
il pleut ?
Les conditionnelles
Synopsis :
Imbrication de conditionnelles
Plan
1 Introduction
2 Langage algorithmique
3 Lexique des variables
4 Algorithme
5 Lexique des constantes
6 Structures conditionnelles
7 Structures itératives
8 Fonctions
9 Fonctions récursives
10 Tableaux
Synopsis :
initialisations
hinitialisationsi
tant que hconditioni faire
hinstructioni faux
hinstructioni condition
...
vrai
ftant
instructions
Exemples
Boucle infinie
Algorithme
a←1
tant que a > 0 faire
écrire "Bonjour"
a ← a+1
ftant
CODE DE L'ALGORITHME :
1 VARIABLES
2 a EST_DU_TYPE NOMBRE
3 b EST_DU_TYPE NOMBRE
4 temp EST_DU_TYPE NOMBRE
5 DEBUT_ALGORITHME
6 AFFICHER "Entrez la première valeur"
7 LIRE a
8 AFFICHER "Entrez la deuxième valeur"
9 LIRE b
10 TANT_QUE (a!=b) FAIRE
11 DEBUT_TANT_QUE
12 SI (a<b) ALORS
13 DEBUT_SI
14 temp PREND_LA_VALEUR a
15 a PREND_LA_VALEUR b
16 b PREND_LA_VALEUR temp
17 FIN_SI
18 temp PREND_LA_VALEUR a-b
19 a PREND_LA_VALEUR temp
20 FIN_TANT_QUE
21 AFFICHER "PGCD(a,b)="
22 AFFICHER a
23 FIN_ALGORITHME
RÉSULTATS :
***Algorithme lancé***
Entrez la première valeur
Entrer a : 174
Entrez la deuxième valeur
Entrer b : 72
PGCD(a,b)=6
***Algorithme terminé***
Exemples
Exemple 2 : conversion de °F en °C
Algorithme
nbTemp ← lire
i ←1 // initialisation de la boucle
tant que i ≤ nbTemp faire // condition d’exécution de la boucle
fahr ← lire
celsius ← (fahr − 32)/9
écrire “La température ”, fahr, “ en °F est ”, celsius, “ en °C”
// instruction de modification éventuelle de la condition
i ← i +1
ftant
Structure pour
Synopsis :
pour hcompteur i de hborneMini à hborneMax i faire
hinstructioni
hinstructioni
compteur ← borneMin
...
fpour
faux
compteur ≤ borneMax
Lorsque la répétition ne porte que
sur le nombre d’itérations et qu’il vrai
est connu avant de commencer la instructions
boucle, on peut utiliser une écri-
ture plus condensée que le tant
que, c’est la structure de contrôle compteur ← compteur + 1
pour.
Exemples
Exemple 1 : conversion de °F en °C
Algorithme
nbTemp ← lire
pour i de 1 à nbTemp faire
fahr ← lire
celsius ← (fahr − 32)/9
écrire “La température ”, fahr, “ en °F est ”, celsius, “ en °C”
fpour
Exemples
Sens du pour
son sens.
compteur ← compteur − 1
Sens du pour
son sens.
compteur ← compteur − 1
Algorithme
pour i de 10 à 1 en descendant faire
écrire i
attendre une seconde
fpour
écrire “BOUM !”
Incrément du pour
Résultat
Affiche les nombres pairs de 2 à 100, puis les nombres impairs de 99 à 1.
Algorithme
pour i de 2 à 100 par pas de 2 faire
écrire i
fpour
pour i de 99 à 1 en descendant par pas de 2 faire
écrire i
fpour
Structure répéter
hinitialisationsi initialisations
répéter
hinstructioni
hinstructioni instructions
...
tant que hconditioni
condition
vrai
faux
Exemple
Résultat
Un nombre lu, compris entre 1 et 100.
Algorithme
répéter
nombre ← lire
tant que ¬(1 ≤ nombre ∧ nombre ≤ 100)
// ici, 1 ≤ nombre ≤ 100
Boucles imbriquées
Exemple
(suite)
Algorithme
n ← lire ...
pour i de 1 à n faire tant que a 6= b faire
répéter si a < b alors
a ← lire échanger(a, b)
tant que a ≤ 0 fsi
répéter a ← a−b
b ← lire ftant
tant que b ≤ 0 écrire “PGCD = ”, a
... fpour
Boucles imbriquées
Exemple
(suite)
Algorithme
n ← lire ...
pour i de 1 à n faire tant que a 6= b faire
répéter si a < b alors
a ← lire échanger(a, b)
tant que a ≤ 0 fsi
répéter a ← a−b
b ← lire ftant
tant que b ≤ 0 écrire “PGCD = ”, a
... fpour
Boucles imbriquées
Exemple
(suite)
Algorithme
n ← lire ...
pour i de 1 à n faire tant que a 6= b faire
répéter si a < b alors
a ← lire échanger(a, b)
tant que a ≤ 0 fsi
répéter a ← a−b
b ← lire ftant
tant que b ≤ 0 écrire “PGCD = ”, a
... fpour
Boucles imbriquées
Exemple
(suite)
Algorithme
n ← lire ...
pour i de 1 à n faire tant que a 6= b faire
répéter si a < b alors
a ← lire échanger(a, b)
tant que a ≤ 0 fsi
répéter a ← a−b
b ← lire ftant
tant que b ≤ 0 écrire “PGCD = ”, a
... fpour
Autre exemple
Exemple :
Affiche toutes les multiplications
de 1 × 1 à 100 × 100. Sorties :
Algorithme
1 2 3 ... 100 (i = 1)
pour i de 1 à 100 faire 2 4 6 ... 200 (i = 2)
pour j de 1 à 100 faire
3 6 9 ... 300 ( i = 3)
m ← i ×j
écrire “ ”, m ;
...
fpour 100 200 300 ... 10000 (i = 100)
écrire “\n”
fpour
Énoncé
On souhaite afficher les n premières lignes du triangle de Pascal, n étant
donné.
Par exemple, avec n = 8 :
numéro de colonne
0 1 2 3 4 5 6 7
0 1
1 1 1
2 1 2 1
numéro 3 1 3 3 1
de ligne 4 1 4 6 4 1
5 1 5 10 10 5 1
6 1 6 15 20 15 6 1
7 1 7 21 35 35 21 7 1
Rappel de la démarche
1 comprendre l’énoncé ;
2 fixer les données et les résultats de l’algorithme (ce qu’il doit faire) ;
3 trouver une idée de l’algorithme (comment le faire) ;
4 spécifier précisément l’algorithme, avec son lexique des variables, etc. ;
5 (éventuellement) écrire un programme qui implémente l’algorithme.
Données et résultat
Données
Un nombre de lignes : n.
Résultat
Affiche les n premières lignes du triangle de Pascal.
Recherche d’idée
L’affichage doit se faire ligne après ligne.
La n-ième ligne contient n nombres.
À la ligne n et à la colonne k , on doit trouver le nombre :
n n!
=
k k ! × (n − k )!
On a donc une relation entre chaque nombre et son précédent sur la ligne.
Idée de l’algorithme
Idée
pour chaque ligne no i, de 0 à n − 1 :
le premier nombre de la ligne est 1 ;
afficher ce nombre ;
L’algorithme (enfin !)
Lexique des variables
n (entier) le nombre de lignes à afficher DONNÉE
L’algorithme (enfin !)
Lexique des variables
n (entier) le nombre de lignes à afficher DONNÉE
i (entier) numéro de ligne courant INTERMÉDIAIRE
j (entier) numéro de colonne courant INTERMÉDIAIRE
x (entier) le nombre courant dans le triangle INTERMÉDIAIRE
L’algorithme (enfin !)
Lexique des variables
n (entier) le nombre de lignes à afficher DONNÉE
i (entier) numéro de ligne courant INTERMÉDIAIRE
j (entier) numéro de colonne courant INTERMÉDIAIRE
x (entier) le nombre courant dans le triangle INTERMÉDIAIRE
L’algorithme (enfin !)
Lexique des variables
n (entier) le nombre de lignes à afficher DONNÉE
i (entier) numéro de ligne courant INTERMÉDIAIRE
j (entier) numéro de colonne courant INTERMÉDIAIRE
x (entier) le nombre courant dans le triangle INTERMÉDIAIRE
Algorithme
pour i de 0 à n − 1 faire
x ←1
écrire x
pour j de 1 à i faire
x ← (x × (i − j + 1))/j
écrire “ ”, x
fpour
écrire “\n”
fpour
H. H OCQUARD (LaBRI) Algorithmique et Programmation 2015–2016 p. 65
Structures itératives Exemple : déroulement
n 4
i ?
j ?
x ?
Sorties Algorithme
pour i de 0 à n − 1 faire
_ x ←1
écrire x
pour j de 1 à i faire
x ← (x × (i − j + 1))/j
écrire “ ”, x
fpour
écrire “\n”
fpour
n 4
@R
@
i ? 0
j ?
x ?
Sorties Algorithme
pour i de 0 à n − 1 faire
_ x ←1
écrire x
pour j de 1 à i faire
x ← (x × (i − j + 1))/j
écrire “ ”, x
fpour
écrire “\n”
fpour
n 4
@R
@
i ? 0
j ?
?
x ? 1
Sorties Algorithme
pour i de 0 à n − 1 faire
1_ x ←1
écrire x
pour j de 1 à i faire
x ← (x × (i − j + 1))/j
écrire “ ”, x
fpour
écrire “\n”
fpour
n 4
@R
@
i ? 0
j ? 1
?
x ? 1
Sorties Algorithme
pour i de 0 à n − 1 faire
1 x ←1
écrire x
_ pour j de 1 à i faire
x ← (x × (i − j + 1))/j
écrire “ ”, x
fpour
écrire “\n”
fpour
n 4
@R
@
i ? 0 1
j ? 1
?
x ? 1
Sorties Algorithme
pour i de 0 à n − 1 faire
1 x ←1
écrire x
_ pour j de 1 à i faire
x ← (x × (i − j + 1))/j
écrire “ ”, x
fpour
écrire “\n”
fpour
n 4
@R
@
i ? 0 1
j ? 1
? ?
x ? 1 1
Sorties Algorithme
pour i de 0 à n − 1 faire
1 x ←1
écrire x
1_ pour j de 1 à i faire
x ← (x × (i − j + 1))/j
écrire “ ”, x
fpour
écrire “\n”
fpour
n 4
@R
@
i ? 0 1
j ? 1 1
? ?
x ? 1 1
Sorties Algorithme
pour i de 0 à n − 1 faire
1 x ←1
écrire x
1_ pour j de 1 à i faire
x ← (x × (i − j + 1))/j
écrire “ ”, x
fpour
écrire “\n”
fpour
n 4
@R
@
i ? 0 1
j ? 1 1
? ?
?
x ? 1 1 1
Sorties Algorithme
pour i de 0 à n − 1 faire
1 x ←1
écrire x
1 1_ pour j de 1 à i faire
x ← (x × (i − j + 1))/j
écrire “ ”, x
fpour
écrire “\n”
fpour
n 4
@R
@
i ? 0 1
j ? 1 1 2
? ?
?
x ? 1 1 1
Sorties Algorithme
pour i de 0 à n − 1 faire
1 x ←1
écrire x
1 1 pour j de 1 à i faire
x ← (x × (i − j + 1))/j
_ écrire “ ”, x
fpour
écrire “\n”
fpour
n 4
@R
@
i ? 0 1 2
j ? 1 1 2
? ?
?
x ? 1 1 1
Sorties Algorithme
pour i de 0 à n − 1 faire
1 x ←1
écrire x
1 1 pour j de 1 à i faire
x ← (x × (i − j + 1))/j
_ écrire “ ”, x
fpour
écrire “\n”
fpour
n 4
@R
@
i ? 0 1 2
j ? 1 1 2
? ?
? ?
x ? 1 1 1 1
Sorties Algorithme
pour i de 0 à n − 1 faire
1 x ←1
écrire x
1 1 pour j de 1 à i faire
x ← (x × (i − j + 1))/j
1_ écrire “ ”, x
fpour
écrire “\n”
fpour
n 4
@R
@
i ? 0 1 2
j ? 1 1 2 1
? ?
? ?
x ? 1 1 1 1
Sorties Algorithme
pour i de 0 à n − 1 faire
1 x ←1
écrire x
1 1 pour j de 1 à i faire
x ← (x × (i − j + 1))/j
1_ écrire “ ”, x
fpour
écrire “\n”
fpour
n 4
@R
@
i ? 0 1 2
j ? 1 1 2 1
? ?
? ?
?
x ? 1 1 1 1 2
Sorties Algorithme
pour i de 0 à n − 1 faire
1 x ←1
écrire x
1 1 pour j de 1 à i faire
x ← (x × (i − j + 1))/j
1 2_ écrire “ ”, x
fpour
écrire “\n”
fpour
n 4
@R
@
i ? 0 1 2
j ? 1 1 2 1 2
? ?
? ?
?
x ? 1 1 1 1 2
Sorties Algorithme
pour i de 0 à n − 1 faire
1 x ←1
écrire x
1 1 pour j de 1 à i faire
x ← (x × (i − j + 1))/j
1 2_ écrire “ ”, x
fpour
écrire “\n”
fpour
n 4
@R
@
i ? 0 1 2
j ? 1 1 2 1 2
? ?
? ?
? ?
x ? 1 1 1 1 2 1
Sorties Algorithme
pour i de 0 à n − 1 faire
1 x ←1
écrire x
1 1 pour j de 1 à i faire
x ← (x × (i − j + 1))/j
1 2 1_ écrire “ ”, x
fpour
écrire “\n”
fpour
n 4
@R
@
i ? 0 1 2
j ? 1 1 2 1 2 3
? ?
? ?
? ?
x ? 1 1 1 1 2 1
Sorties Algorithme
pour i de 0 à n − 1 faire
1 x ←1
écrire x
1 1 pour j de 1 à i faire
x ← (x × (i − j + 1))/j
1 2 1 écrire “ ”, x
_ fpour
écrire “\n”
fpour
n 4
@R
@
i ? 0 1 2 3
j ? 1 1 2 1 2 3
? ?
? ?
? ?
x ? 1 1 1 1 2 1
Sorties Algorithme
pour i de 0 à n − 1 faire
1 x ←1
écrire x
1 1 pour j de 1 à i faire
x ← (x × (i − j + 1))/j
1 2 1 écrire “ ”, x
_ fpour
écrire “\n”
fpour
n 4
@R
@
i ? 0 1 2 3
j ? 1 1 2 1 2 3
? ?
? ?
? ? ?
x ? 1 1 1 1 2 1 1
Sorties Algorithme
pour i de 0 à n − 1 faire
1 x ←1
écrire x
1 1 pour j de 1 à i faire
x ← (x × (i − j + 1))/j
1 2 1 écrire “ ”, x
1_ fpour
écrire “\n”
fpour
n 4
@R
@
i ? 0 1 2 3
j ? 1 1 2 1 2 3 1
? ?
? ?
? ? ?
x ? 1 1 1 1 2 1 1
Sorties Algorithme
pour i de 0 à n − 1 faire
1 x ←1
écrire x
1 1 pour j de 1 à i faire
x ← (x × (i − j + 1))/j
1 2 1 écrire “ ”, x
1_ fpour
écrire “\n”
fpour
n 4
@R
@
i ? 0 1 2 3
j ? 1 1 2 1 2 3 1
? ?
? ?
? ? ??
x ? 1 1 1 1 2 1 1 3
Sorties Algorithme
pour i de 0 à n − 1 faire
1 x ←1
écrire x
1 1 pour j de 1 à i faire
x ← (x × (i − j + 1))/j
1 2 1 écrire “ ”, x
1 3_ fpour
écrire “\n”
fpour
n 4
@R
@
i ? 0 1 2 3
j ? 1 1 2 1 2 3 1 2
? ?
? ?
? ? ??
x ? 1 1 1 1 2 1 1 3
Sorties Algorithme
pour i de 0 à n − 1 faire
1 x ←1
écrire x
1 1 pour j de 1 à i faire
x ← (x × (i − j + 1))/j
1 2 1 écrire “ ”, x
1 3_ fpour
écrire “\n”
fpour
n 4
@R
@
i ? 0 1 2 3
j ? 1 1 2 1 2 3 1 2
? ?
? ?
? ? ???
x ? 1 1 1 1 2 1 1 3 3
Sorties Algorithme
pour i de 0 à n − 1 faire
1 x ←1
écrire x
1 1 pour j de 1 à i faire
x ← (x × (i − j + 1))/j
1 2 1 écrire “ ”, x
1 3 3_ fpour
écrire “\n”
fpour
n 4
@R
@
i ? 0 1 2 3
j ? 1 1 2 1 2 3 1 2 3
? ?
? ?
? ? ???
x ? 1 1 1 1 2 1 1 3 3
Sorties Algorithme
pour i de 0 à n − 1 faire
1 x ←1
écrire x
1 1 pour j de 1 à i faire
x ← (x × (i − j + 1))/j
1 2 1 écrire “ ”, x
1 3 3_ fpour
écrire “\n”
fpour
n 4
@R
@
i ? 0 1 2 3
j ? 1 1 2 1 2 3 1 2 3
? ?
? ?
? ? ????
x ? 1 1 1 1 2 1 1 3 3 1
Sorties Algorithme
pour i de 0 à n − 1 faire
1 x ←1
écrire x
1 1 pour j de 1 à i faire
x ← (x × (i − j + 1))/j
1 2 1 écrire “ ”, x
1 3 3 1_ fpour
écrire “\n”
fpour
n 4
@R
@
i ? 0 1 2 3
j ? 1 1 2 1 2 3 1 2 3 4
? ?
? ?
? ? ????
x ? 1 1 1 1 2 1 1 3 3 1
Sorties Algorithme
pour i de 0 à n − 1 faire
1 x ←1
écrire x
1 1 pour j de 1 à i faire
x ← (x × (i − j + 1))/j
1 2 1 écrire “ ”, x
1 3 3 1 fpour
écrire “\n”
_ fpour
n 4
@R
@
i ? 0 1 2 3 4
j ? 1 1 2 1 2 3 1 2 3 4
? ?
? ?
? ? ????
x ? 1 1 1 1 2 1 1 3 3 1
Sorties Algorithme
pour i de 0 à n − 1 faire
1 x ←1
écrire x
1 1 pour j de 1 à i faire
x ← (x × (i − j + 1))/j
1 2 1 écrire “ ”, x
1 3 3 1 fpour
écrire “\n”
_ fpour
n 4
@R
@
i ? 0 1 2 3 4
j ? 1 1 2 1 2 3 1 2 3 4
? ?
? ?
? ? ????
x ? 1 1 1 1 2 1 1 3 3 1
Sorties Algorithme
pour i de 0 à n − 1 faire
1 x ←1
écrire x
1 1 pour j de 1 à i faire
x ← (x × (i − j + 1))/j
1 2 1 écrire “ ”, x
1 3 3 1 fpour
écrire “\n”
fpour
Sub pascal()
Dim n As Integer
Dim i As Integer
Dim j As Integer
Dim x As Integer
Feuil1. Cells.Clear
Do
n = InputBox("Combien de lignes souhaitez-vous ?")
Loop Until n >= 1
If n = 1 Then
Feuil1. Cells (1, 1) = 1
End If
For i = 1 To n−1
Feuil1. Cells (1, 1) =1
x =1
For j = 1 To i
x = x * (i − j + 1) / j
Feuil1. Cells( i + 1, 1) = 1
Feuil1. Cells( i + 1, j + 1) = x
Next j
Next i
End Sub
Plan
1 Introduction
2 Langage algorithmique
3 Lexique des variables
4 Algorithme
5 Lexique des constantes
6 Structures conditionnelles
7 Structures itératives
8 Fonctions
9 Fonctions récursives
10 Tableaux
Les fonctions
En-tête de fonction
En-tête de fonction
Optionnel
Repéré par le mot clef « fonction ».
Exemple :
fonction nomFonction(mode nomParam : typeParam, . . . ) : ret typeRet
Indique ce que fait la fonction et le rôle de ses paramètres.
Corps de la fonction
Illustration
Algorithme
z ← somme(x , y )
écrire z
Illustration
Algorithme
z ← somme(x , y )
écrire z
Algorithme de somme
c ← a+b
retourner c
Illustration
Algorithme
z ← somme(x , y )
écrire z
fonction somme(in an
: entier, in bn
: entier) : ret entier
- a et b sont les paramètres formels
Lexique local des variables
c (entier) somme de a et b
Algorithme de somme
c ← a+b
retourner c
Illustration
Algorithme
z ← somme(x , y ) - x et y sont les paramètres effectifs
écrire z
fonction somme(in an
: entier, in bn
: entier) : ret entier
- a et b sont les paramètres formels
Lexique local des variables
c (entier) somme de a et b
Algorithme de somme
c ← a+b
retourner c
hauteur
côté
Déroulement de l’exemple
Variables
nbVol ? i ? côtéPri ? hauteurPri ?
Algorithme principal
nbVol ← lire
pour i de 1 à nbVol faire
côtéPri ← lire
hauteurPri ← lire
écrire “Le volume du prisme est ”, volPrisme(côtéPri, hauteurPri)
fpour
Entrées Sorties
Déroulement de l’exemple
Variables
nbVol 2 i ? côtéPri ? hauteurPri ?
Algorithme principal
nbVol ← lire
pour i de 1 à nbVol faire
côtéPri ← lire
hauteurPri ← lire
écrire “Le volume du prisme est ”, volPrisme(côtéPri, hauteurPri)
fpour
Entrées Sorties
2
Déroulement de l’exemple
Variables
nbVol 2 i 1 côtéPri ? hauteurPri ?
Algorithme principal
nbVol ← lire
pour i de 1 à nbVol faire
côtéPri ← lire
hauteurPri ← lire
écrire “Le volume du prisme est ”, volPrisme(côtéPri, hauteurPri)
fpour
Entrées Sorties
2
Déroulement de l’exemple
Variables
nbVol 2 i 1 côtéPri 10 hauteurPri 20
Algorithme principal
nbVol ← lire
pour i de 1 à nbVol faire
côtéPri ← lire
hauteurPri ← lire
écrire “Le volume du prisme est ”, volPrisme(côtéPri, hauteurPri)
fpour
Entrées Sorties
2
10
20
H. H OCQUARD (LaBRI) Algorithmique et Programmation 2015–2016 p. 77
Fonctions Exemple simple
Déroulement de l’exemple
Variables
nbVol 2 i 1 côtéPri 10 hauteurPri 20
Algorithme principal
nbVol ← lire
pour i de 1 à nbVol faire
côtéPri ← lire
hauteurPri ← lire
écrire “Le volume du prisme est ”, volPrisme(côtéPri, hauteurPri)
fpour
Entrées Sorties
2
10
20
H. H OCQUARD (LaBRI) Algorithmique et Programmation 2015–2016 p. 77
Fonctions Exemple simple
Déroulement de l’exemple
Variables
nbVol 2 i 1 côtéPri 10 hauteurPri 20
hauteurTri ? surfTri ?
Algorithme de volPrisme
√
hauteurTri ← côté × 3/2
surfTri ← côté × hauteurTri/2
retourner surfTri × hauteur
Entrées Sorties
2
10
20
H. H OCQUARD (LaBRI) Algorithmique et Programmation 2015–2016 p. 77
Fonctions Exemple simple
Déroulement de l’exemple
Variables
nbVol 2 i 1 côtéPri 10 hauteurPri 20
Algorithme de volPrisme
√
hauteurTri ← côté × 3/2
surfTri ← côté × hauteurTri/2
retourner surfTri × hauteur
Entrées Sorties
2
10
20
H. H OCQUARD (LaBRI) Algorithmique et Programmation 2015–2016 p. 77
Fonctions Exemple simple
Déroulement de l’exemple
Variables
nbVol 2 i 1 côtéPri 10 hauteurPri 20
Algorithme de volPrisme
√
hauteurTri ← côté × 3/2
surfTri ← côté × hauteurTri/2
retourner surfTri × hauteur
Entrées Sorties
2
10
20
H. H OCQUARD (LaBRI) Algorithmique et Programmation 2015–2016 p. 77
Fonctions Exemple simple
Déroulement de l’exemple
Variables
nbVol 2 i 1 côtéPri 10 hauteurPri 20
Algorithme de volPrisme
√
hauteurTri ← côté × 3/2
surfTri ← côté × hauteurTri/2
retourner surfTri × hauteur
Entrées Sorties
2
10
20
H. H OCQUARD (LaBRI) Algorithmique et Programmation 2015–2016 p. 77
Fonctions Exemple simple
Déroulement de l’exemple
Variables
nbVol 2 i 1 côtéPri 10 hauteurPri 20
Algorithme principal
nbVol ← lire
pour i de 1 à nbVol faire
côtéPri ← lire
hauteurPri ← lire
écrire “Le volume du prisme est ”, volPrisme(côtéPri, hauteurPri)
fpour
Entrées Sorties
2 Le volume du prisme est 866,000
10
20
H. H OCQUARD (LaBRI) Algorithmique et Programmation 2015–2016 p. 77
Fonctions Exemple simple
Déroulement de l’exemple
Variables
nbVol 2 i 2 côtéPri 10 hauteurPri 20
Algorithme principal
nbVol ← lire
pour i de 1 à nbVol faire
côtéPri ← lire
hauteurPri ← lire
écrire “Le volume du prisme est ”, volPrisme(côtéPri, hauteurPri)
fpour
Entrées Sorties
2 Le volume du prisme est 866,000
10
20
H. H OCQUARD (LaBRI) Algorithmique et Programmation 2015–2016 p. 77
Fonctions Exemple simple
Déroulement de l’exemple
Variables
nbVol 2 i 2 côtéPri 30 hauteurPri 40
Algorithme principal
nbVol ← lire
pour i de 1 à nbVol faire
côtéPri ← lire
hauteurPri ← lire
écrire “Le volume du prisme est ”, volPrisme(côtéPri, hauteurPri)
fpour
Entrées Sorties
... Le volume du prisme est 866,000
30
40
H. H OCQUARD (LaBRI) Algorithmique et Programmation 2015–2016 p. 77
Fonctions Exemple simple
Déroulement de l’exemple
Variables
nbVol 2 i 2 côtéPri 30 hauteurPri 40
Algorithme principal
nbVol ← lire
pour i de 1 à nbVol faire
côtéPri ← lire
hauteurPri ← lire
écrire “Le volume du prisme est ”, volPrisme(côtéPri, hauteurPri)
fpour
Entrées Sorties
... Le volume du prisme est 866,000
30
40
H. H OCQUARD (LaBRI) Algorithmique et Programmation 2015–2016 p. 77
Fonctions Exemple simple
Déroulement de l’exemple
Variables
nbVol 2 i 2 côtéPri 30 hauteurPri 40
hauteurTri ? surfTri ?
Algorithme de volPrisme
√
hauteurTri ← côté × 3/2
surfTri ← côté × hauteurTri/2
retourner surfTri × hauteur
Entrées Sorties
... Le volume du prisme est 866,000
30
40
H. H OCQUARD (LaBRI) Algorithmique et Programmation 2015–2016 p. 77
Fonctions Exemple simple
Déroulement de l’exemple
Variables
nbVol 2 i 2 côtéPri 30 hauteurPri 40
Algorithme de volPrisme
√
hauteurTri ← côté × 3/2
surfTri ← côté × hauteurTri/2
retourner surfTri × hauteur
Entrées Sorties
... Le volume du prisme est 866,000
30
40
H. H OCQUARD (LaBRI) Algorithmique et Programmation 2015–2016 p. 77
Fonctions Exemple simple
Déroulement de l’exemple
Variables
nbVol 2 i 2 côtéPri 30 hauteurPri 40
Algorithme de volPrisme
√
hauteurTri ← côté × 3/2
surfTri ← côté × hauteurTri/2
retourner surfTri × hauteur
Entrées Sorties
... Le volume du prisme est 866,000
30
40
H. H OCQUARD (LaBRI) Algorithmique et Programmation 2015–2016 p. 77
Fonctions Exemple simple
Déroulement de l’exemple
Variables
nbVol 2 i 2 côtéPri 30 hauteurPri 40
Algorithme de volPrisme
√
hauteurTri ← côté × 3/2
surfTri ← côté × hauteurTri/2
retourner surfTri × hauteur
Entrées Sorties
... Le volume du prisme est 866,000
30
40
H. H OCQUARD (LaBRI) Algorithmique et Programmation 2015–2016 p. 77
Fonctions Exemple simple
Déroulement de l’exemple
Variables
nbVol 2 i 2 côtéPri 30 hauteurPri 40
Algorithme principal
nbVol ← lire
pour i de 1 à nbVol faire
côtéPri ← lire
hauteurPri ← lire
écrire “Le volume du prisme est ”, volPrisme(côtéPri, hauteurPri)
fpour
Entrées Sorties
... Le volume du prisme est 866,000
30 Le volume du prisme est 15 588,600
40
H. H OCQUARD (LaBRI) Algorithmique et Programmation 2015–2016 p. 77
Fonctions Exemple simple
Déroulement de l’exemple
Variables
nbVol 2 i 3 côtéPri 30 hauteurPri 40
Algorithme principal
nbVol ← lire
pour i de 1 à nbVol faire
côtéPri ← lire
hauteurPri ← lire
écrire “Le volume du prisme est ”, volPrisme(côtéPri, hauteurPri)
fpour
Entrées Sorties
... Le volume du prisme est 866,000
30 Le volume du prisme est 15 588,600
40
H. H OCQUARD (LaBRI) Algorithmique et Programmation 2015–2016 p. 77
Fonctions Exemple simple
Déroulement de l’exemple
Variables
Algorithme principal
nbVol ← lire
pour i de 1 à nbVol faire
côtéPri ← lire
hauteurPri ← lire
écrire “Le volume du prisme est ”, volPrisme(côtéPri, hauteurPri)
fpour
Entrées Sorties
... Le volume du prisme est 866,000
30 Le volume du prisme est 15 588,600
40
H. H OCQUARD (LaBRI) Algorithmique et Programmation 2015–2016 p. 77
Fonctions Exemple : fonction dans retour
Algorithme
pour i de 1 à 5 par pas de 2 faire
dessineCarré(i )
fpour
Algorithme principal
pour i de 1 à 5 par pas de 2 faire
dessineCarré(i )
fpour
Algorithme principal
pour i de 1 à 5 par pas de 2 faire
dessineCarré(i )
fpour
côté 1
Algorithme principal
pour i de 1 à 5 par pas de 2 faire
dessineCarré(i )
fpour
côté 1
i ? j ?
Algorithme de dessineCarré
pour i de 1 à côté faire
pour j de 1 à côté faire
écrire “*”
fpour
écrire “\n”
fpour
côté 1
i 1 j ?
Algorithme de dessineCarré
pour i de 1 à côté faire
pour j de 1 à côté faire
écrire “*”
fpour
écrire “\n”
fpour
côté 1
i 1 j 2
Algorithme de dessineCarré
pour i de 1 à côté faire
pour j de 1 à côté faire
écrire “*”
fpour
écrire “\n”
fpour
côté 1
i 2 j 2
Algorithme de dessineCarré
pour i de 1 à côté faire
pour j de 1 à côté faire
écrire “*”
fpour
écrire “\n”
fpour
côté 1
i 2 j 2
Algorithme de dessineCarré
pour i de 1 à côté faire
pour j de 1 à côté faire
écrire “*”
fpour
écrire “\n”
fpour
// Instruction retourner implicite.
H. H OCQUARD (LaBRI) Algorithmique et Programmation 2015–2016 p. 80
Fonctions Exemple : fonction dans retour
Algorithme principal
pour i de 1 à 5 par pas de 2 faire
dessineCarré(i )
fpour
Algorithme principal
pour i de 1 à 5 par pas de 2 faire
dessineCarré(i )
fpour
côté 3
Algorithme principal
pour i de 1 à 5 par pas de 2 faire
dessineCarré(i )
fpour
côté 3
i ? j ?
Algorithme de dessineCarré
pour i de 1 à côté faire
pour j de 1 à côté faire
écrire “*”
fpour
écrire “\n”
fpour
côté 3
i 1 j ?
Algorithme de dessineCarré
pour i de 1 à côté faire
pour j de 1 à côté faire
écrire “*”
fpour
écrire “\n”
fpour
côté 3
i 1 j 4
Algorithme de dessineCarré
pour i de 1 à côté faire
pour j de 1 à côté faire
écrire “*”
fpour
écrire “\n”
fpour
côté 3
i 2 j 4
Algorithme de dessineCarré
pour i de 1 à côté faire
pour j de 1 à côté faire
écrire “*”
fpour
écrire “\n”
fpour
i 2 j 4
Algorithme de dessineCarré
pour i de 1 à côté faire
pour j de 1 à côté faire
écrire “*”
fpour
écrire “\n”
fpour
i 3 j 4
Algorithme de dessineCarré
pour i de 1 à côté faire
pour j de 1 à côté faire
écrire “*”
fpour
écrire “\n”
fpour
i 3 j 4
Algorithme de dessineCarré
pour i de 1 à côté faire
pour j de 1 à côté faire
écrire “*”
fpour
écrire “\n”
fpour
i 4 j 4
Algorithme de dessineCarré
pour i de 1 à côté faire
pour j de 1 à côté faire
écrire “*”
fpour
écrire “\n”
fpour
i 4 j 4
Algorithme de dessineCarré
pour i de 1 à côté faire
pour j de 1 à côté faire
écrire “*”
fpour
écrire “\n”
fpour
// Instruction retourner implicite.
H. H OCQUARD (LaBRI) Algorithmique et Programmation 2015–2016 p. 80
Fonctions Exemple : fonction dans retour
Algorithme principal
pour i de 1 à 5 par pas de 2 faire
dessineCarré(i )
fpour
Algorithme principal
pour i de 1 à 5 par pas de 2 faire
dessineCarré(i )
fpour
Algorithme principal
pour i de 1 à 5 par pas de 2 faire
dessineCarré(i )
fpour
i ? j ?
Algorithme de dessineCarré
pour i de 1 à côté faire
pour j de 1 à côté faire
écrire “*”
fpour
écrire “\n”
fpour
i 1 j ?
Algorithme de dessineCarré
pour i de 1 à côté faire
pour j de 1 à côté faire
écrire “*”
fpour
écrire “\n”
fpour
i 1 j 6
Algorithme de dessineCarré
pour i de 1 à côté faire
pour j de 1 à côté faire
écrire “*”
fpour
écrire “\n”
fpour
i 2 j 6
Algorithme de dessineCarré
pour i de 1 à côté faire
pour j de 1 à côté faire
écrire “*”
fpour
écrire “\n”
fpour
Algorithme de dessineCarré
pour i de 1 à côté faire
pour j de 1 à côté faire
écrire “*”
fpour
écrire “\n”
fpour
Algorithme de dessineCarré
pour i de 1 à côté faire
pour j de 1 à côté faire
écrire “*”
fpour
écrire “\n”
fpour
Algorithme de dessineCarré
pour i de 1 à côté faire
pour j de 1 à côté faire
écrire “*”
fpour
écrire “\n”
fpour
Algorithme de dessineCarré
pour i de 1 à côté faire
pour j de 1 à côté faire
écrire “*”
fpour
écrire “\n”
fpour
Algorithme de dessineCarré
pour i de 1 à côté faire
pour j de 1 à côté faire
écrire “*”
fpour
écrire “\n”
fpour
Algorithme de dessineCarré
pour i de 1 à côté faire
pour j de 1 à côté faire
écrire “*”
fpour
écrire “\n”
fpour
Paramètres out
Le mécanisme de retour de fonction ne permet de retourner qu’un seul
résultat.
Pour retourner plusieurs résultats, on peut utiliser les paramètres de
mode out.
Les résultats sont alors retournés via les variables passées en
paramètres.
Algorithme de hms
heures ← durée/3600
minutes ← (durée mod 3600)/60
secondes ← durée mod 60
Paramètres out
Déroulement de l’exemple
Variables
d ? h ? m ? s ?
Algorithme principal
d ← 12345
hms(d , h, m, s)
écrire d , “secondes =”, h, “heures”, m, “minutes”, s, “secondes”
Sorties
Déroulement de l’exemple
Variables
d 12345 h ? m ? s ?
Algorithme principal
d ← 12345
hms(d , h, m, s)
écrire d , “secondes =”, h, “heures”, m, “minutes”, s, “secondes”
Sorties
Déroulement de l’exemple
Variables
d 12345 h ? m ? s ?
6 6 6
durée 12345 heures minutes secondes
Algorithme principal
d ← 12345
hms(d , h, m, s)
écrire d , “secondes =”, h, “heures”, m, “minutes”, s, “secondes”
Sorties
Déroulement de l’exemple
Variables
d 12345 h ? m ? s ?
6 6 6
durée 12345 heures minutes secondes
Algorithme de hms
heures ← durée/3600
minutes ← (durée mod 3600)/60
secondes ← durée mod 60
Sorties
Déroulement de l’exemple
Variables
d 12345 h 3 m ? s ?
6 6 6
durée 12345 heures minutes secondes
Algorithme de hms
heures ← durée/3600
minutes ← (durée mod 3600)/60
secondes ← durée mod 60
Sorties
Déroulement de l’exemple
Variables
d 12345 h 3 m 25 s ?
6 6 6
durée 12345 heures minutes secondes
Algorithme de hms
heures ← durée/3600
minutes ← (durée mod 3600)/60
secondes ← durée mod 60
Sorties
Déroulement de l’exemple
Variables
d 12345 h 3 m 25 s 45
6 6 6
durée 12345 heures minutes secondes
Algorithme de hms
heures ← durée/3600
minutes ← (durée mod 3600)/60
secondes ← durée mod 60
Sorties
Déroulement de l’exemple
Variables
d 12345 h 3 m 25 s 45
6 6 6
durée 12345 heures minutes secondes
Algorithme de hms
heures ← durée/3600
minutes ← (durée mod 3600)/60
secondes ← durée mod 60
Sorties
Déroulement de l’exemple
Variables
d 12345 h 3 m 25 s 45
Algorithme principal
d ← 12345
hms(d , h, m, s)
écrire d , “secondes =”, h, “heures”, m, “minutes”, s, “secondes”
Sorties
Déroulement de l’exemple
Variables
d 12345 h 3 m 25 s 45
Algorithme principal
d ← 12345
hms(d , h, m, s)
écrire d , “secondes =”, h, “heures”, m, “minutes”, s, “secondes”
Sorties
12345 secondes = 3 heures 25 minutes 45 secondes
H. H OCQUARD (LaBRI) Algorithmique et Programmation 2015–2016 p. 83
Fonctions Exemple : paramètres out
Déroulement de l’exemple
Variables
Algorithme principal
d ← 12345
hms(d , h, m, s)
écrire d , “secondes =”, h, “heures”, m, “minutes”, s, “secondes”
Sorties
12345 secondes = 3 heures 25 minutes 45 secondes
H. H OCQUARD (LaBRI) Algorithmique et Programmation 2015–2016 p. 83
Fonctions Exemple : paramètres in-out
Paramètres in-out
Algorithme de échanger
c←a
a←b
b←c
Paramètres in-out
Déroulement de l’exemple
Variables
x ? y ?
Algorithme principal
x ← 123
y ← 456
écrire “avant : x =”, x , “et y =”, y
échanger(x , y )
écrire “après : x =”, x , “et y =”, y
Sorties
Déroulement de l’exemple
Variables
x 123 y 456
Algorithme principal
x ← 123
y ← 456
écrire “avant : x =”, x , “et y =”, y
échanger(x , y )
écrire “après : x =”, x , “et y =”, y
Sorties
Déroulement de l’exemple
Variables
x 123 y 456
Algorithme principal
x ← 123
y ← 456
écrire “avant : x =”, x , “et y =”, y
échanger(x , y )
écrire “après : x =”, x , “et y =”, y
Sorties
avant : x = 123 et y = 456
Déroulement de l’exemple
Variables
x 123 y 456
6 6
a b
Algorithme principal
x ← 123
y ← 456
écrire “avant : x =”, x , “et y =”, y
échanger(x , y )
écrire “après : x =”, x , “et y =”, y
Sorties
avant : x = 123 et y = 456
Déroulement de l’exemple
Variables
x 123 y 456
6 6
a b c ?
Algorithme de échanger
c←a
a←b
b←c
Sorties
avant : x = 123 et y = 456
Déroulement de l’exemple
Variables
x 123 y 456
6 6
a b c 123
Algorithme de échanger
c←a
a←b
b←c
Sorties
avant : x = 123 et y = 456
Déroulement de l’exemple
Variables
x 456 y 456
6 6
a b c 123
Algorithme de échanger
c←a
a←b
b←c
Sorties
avant : x = 123 et y = 456
Déroulement de l’exemple
Variables
x 456 y 123
6 6
a b c 123
Algorithme de échanger
c←a
a←b
b←c
Sorties
avant : x = 123 et y = 456
Déroulement de l’exemple
Variables
x 456 y 123
6 6
a b c 123
Algorithme de échanger
c←a
a←b
b←c
Sorties
avant : x = 123 et y = 456
Déroulement de l’exemple
Variables
x 456 y 123
Algorithme principal
x ← 123
y ← 456
écrire “avant : x =”, x , “et y =”, y
échanger(x , y )
écrire “après : x =”, x , “et y =”, y
Sorties
avant : x = 123 et y = 456
Déroulement de l’exemple
Variables
x 456 y 123
Algorithme principal
x ← 123
y ← 456
écrire “avant : x =”, x , “et y =”, y
échanger(x , y )
écrire “après : x =”, x , “et y =”, y
Sorties
avant : x = 123 et y = 456
après : x = 456 et y = 123
H. H OCQUARD (LaBRI) Algorithmique et Programmation 2015–2016 p. 86
Fonctions Exemple : paramètres in-out
Déroulement de l’exemple
Variables
Algorithme principal
x ← 123
y ← 456
écrire “avant : x =”, x , “et y =”, y
échanger(x , y )
écrire “après : x =”, x , “et y =”, y
Sorties
avant : x = 123 et y = 456
après : x = 456 et y = 123
H. H OCQUARD (LaBRI) Algorithmique et Programmation 2015–2016 p. 86
Fonctions récursives
Plan
1 Introduction
2 Langage algorithmique
3 Lexique des variables
4 Algorithme
5 Lexique des constantes
6 Structures conditionnelles
7 Structures itératives
8 Fonctions
9 Fonctions récursives
10 Tableaux
Fonctions récursives
Exemple
Exemple : factorielle
fonction factorielle(in n : entier) : ret entier
Calcule la factorielle de n, positif ou nul.
Algorithme de factorielle
si n = 0 alors
résultat ← 1
sinon
résultat ← n × factorielle(n − 1)
fsi
retourner résultat
Exemple d’exécution
factorielle(5) ⇒ 5 × factorielle(4)
Exemple d’exécution
factorielle(5) ⇒ 5 × factorielle(4)
)
factorielle(4) ⇒ 4 × factorielle(3)
Exemple d’exécution
factorielle(5) ⇒ 5 × factorielle(4)
)
factorielle(4) ⇒ 4 × factorielle(3)
)
factorielle(3) ⇒ 3 × factorielle(2)
Exemple d’exécution
factorielle(5) ⇒ 5 × factorielle(4)
)
factorielle(4) ⇒ 4 × factorielle(3)
)
factorielle(3) ⇒ 3 × factorielle(2)
)
factorielle(2) ⇒ 2 × factorielle(1)
Exemple d’exécution
factorielle(5) ⇒ 5 × factorielle(4)
)
factorielle(4) ⇒ 4 × factorielle(3)
)
factorielle(3) ⇒ 3 × factorielle(2)
)
factorielle(2) ⇒ 2 × factorielle(1)
)
factorielle(1) ⇒ 1 × factorielle(0)
Exemple d’exécution
factorielle(5) ⇒ 5 × factorielle(4)
)
factorielle(4) ⇒ 4 × factorielle(3)
)
factorielle(3) ⇒ 3 × factorielle(2)
)
factorielle(2) ⇒ 2 × factorielle(1)
)
factorielle(1) ⇒ 1 × factorielle(0)
)
factorielle(0) ⇒ 1 (fin de la récursion)
Exemple d’exécution
factorielle(5) ⇒ 5 × factorielle(4)
C
C
)
C
C factorielle(4) ⇒ 4 × factorielle(3)
C
C )
C factorielle(3) ⇒ 3 × factorielle(2)
C
C )
C factorielle(2) ⇒ 2 × factorielle(1)
C
C
)
C
C factorielle(1) ⇒ 1 × factorielle(0)
C
Appels C )
récursifs CW C factorielle(0) ⇒ 1 (fin de la récursion)
Exemple d’exécution
factorielle(5) ⇒ 5 × factorielle(4)
C
C
)
C
C factorielle(4) ⇒ 4 × factorielle(3)
C
C )
C factorielle(3) ⇒ 3 × factorielle(2)
C
C )
C factorielle(2) ⇒ 2 × factorielle(1)
C
C
)
C
C factorielle(1) ⇒ 1 × factorielle(0)
C
Appels C )
récursifs CW C factorielle(0) ⇒ 1 (fin de la récursion) . . . . . . . . . . 1
Exemple d’exécution
factorielle(5) ⇒ 5 × factorielle(4)
C
C
)
C
C factorielle(4) ⇒ 4 × factorielle(3)
C
C )
C factorielle(3) ⇒ 3 × factorielle(2)
C
C )
C factorielle(2) ⇒ 2 × factorielle(1)
C
C
)
C
C factorielle(1) ⇒ 1 × factorielle(0) . . . . . . . . . . 1 × 1 = 1
C AK
Appels C )
A
récursifs CW C factorielle( 0) ⇒ 1 (fin de la récursion) . . . . . . . . . . 1
Exemple d’exécution
factorielle(5) ⇒ 5 × factorielle(4)
C
C
)
C
C factorielle(4) ⇒ 4 × factorielle(3)
C
C )
C factorielle(3) ⇒ 3 × factorielle(2)
C
C )
C factorielle(2) ⇒ 2 × factorielle(1) . . . . . . . . . . . . . . . 2 × 1 = 2
C
C AK
)
A
C
C factorielle(1) ⇒ 1 × factorielle(0) . . . . . . . . . . 1 × 1 = 1
C AK
Appels C )
A
récursifs CW C factorielle( 0) ⇒ 1 (fin de la récursion) . . . . . . . . . . 1
Exemple d’exécution
factorielle(5) ⇒ 5 × factorielle(4)
C
C
)
C
C factorielle(4) ⇒ 4 × factorielle(3)
C
C )
C factorielle(3) ⇒ 3 × factorielle(2) . . . . . . . . . . . . . . . . . . . 3 × 2 = 6
C
AK
C )
A
C factorielle(2) ⇒ 2 × factorielle(1) . . . . . . . . . . . . . . . 2 × 1 = 2
C
C AK
)
A
C
C factorielle(1) ⇒ 1 × factorielle(0) . . . . . . . . . . 1 × 1 = 1
C AK
Appels C )
A
récursifs CW C factorielle( 0) ⇒ 1 (fin de la récursion) . . . . . . . . . . 1
Exemple d’exécution
factorielle(5) ⇒ 5 × factorielle(4)
C
C
)
C
C factorielle(4) ⇒ 4 × factorielle(3) . . . . . . . . . . . . . . . . . . . . . 4 × 6 = 24
C AK
C )
A
C factorielle(3) ⇒ 3 × factorielle(2) . . . . . . . . . . . . . . . . . . . 3 × 2 = 6
C
AK
C )
A
C factorielle(2) ⇒ 2 × factorielle(1) . . . . . . . . . . . . . . . 2 × 1 = 2
C
C AK
)
A
C
C factorielle(1) ⇒ 1 × factorielle(0) . . . . . . . . . . 1 × 1 = 1
C AK
Appels C )
A
récursifs CW C factorielle( 0) ⇒ 1 (fin de la récursion) . . . . . . . . . . 1
Exemple d’exécution
Exemple d’exécution
Deux exemples. . .
Exemple 1 : litÉcritOrdo
fonction litÉcritOrdo(in nb : entier) : vide
Lit, puis écrit dans le même ordre, nb nombres entiers.
Algorithme de litÉcritOrdo
si nb > 0 alors
valeur ← lire
écrire valeur
litÉcritOrdo(nb − 1)
fsi
Deux exemples. . .
Exemple 1 : litÉcritOrdo
fonction litÉcritOrdo(in nb : entier) : vide
Lit, puis écrit dans le même ordre, nb nombres entiers.
Algorithme de litÉcritOrdo
si nb > 0 alors
valeur ← lire
écrire valeur
litÉcritOrdo(nb − 1)
fsi
Deux exemples
Exemple 2 : litÉcritInv
fonction litÉcritInv(in nb : entier) : vide
Lit, puis écrit dans l’ordre inverse, nb nombres entiers.
Algorithme de litÉcritInv
si nb > 0 alors
valeur ← lire
litÉcritInv(nb − 1)
écrire valeur
fsi
Deux exemples
Exemple 2 : litÉcritInv
fonction litÉcritInv(in nb : entier) : vide
Lit, puis écrit dans l’ordre inverse, nb nombres entiers.
Algorithme de litÉcritInv
si nb > 0 alors
valeur ← lire
litÉcritInv(nb − 1)
écrire valeur
fsi
Autre exemple
n
Calcul du coefficient binomial k
:
0
si k > n
n
= 1 si k = 0 ou k = n
k n−1
n−1
+ sinon
k −1 k
n
Calcul de k
Algorithme de cnk
si k > n alors
retourner 0
sinon si k = 0 ∨ k = n alors
retourner 1
sinon
retourner cnk(n − 1, k − 1) + cnk(n − 1, k )
fsi
Exécution de cnk(4, 2)
cnk(4, 2) 3 + 3 = 6
cnk(3, 1) 1 + 2 = 3 cnk(3, 2) 2 + 1 = 3
Exécution de cnk(4, 2)
cnk(4, 2) 3 + 3 = 6
cnk(3, 1) 1 + 2 = 3 cnk(3, 2) 2 + 1 = 3
Exécution de cnk(4, 2)
cnk(4, 2) 3 + 3 = 6
cnk(3, 1) 1 + 2 = 3 cnk(3, 2) 2 + 1 = 3
Exécution de cnk(4, 2)
cnk(4, 2) 3 + 3 = 6
cnk(3, 1) 1 + 2 = 3 cnk(3, 2) 2 + 1 = 3
Exécution de cnk(4, 2)
cnk(4, 2) 3 + 3 = 6
cnk(3, 1) 1 + 2 = 3 cnk(3, 2) 2 + 1 = 3
Exécution de cnk(4, 2)
cnk(4, 2) 3 + 3 = 6
cnk(3, 1) 1 + 2 = 3 cnk(3, 2) 2 + 1 = 3
Exécution de cnk(4, 2)
cnk(4, 2) 3 + 3 = 6
cnk(3, 1) 1 + 2 = 3 cnk(3, 2) 2 + 1 = 3
Exécution de cnk(4, 2)
cnk(4, 2) 3 + 3 = 6
cnk(3, 1) 1 + 2 = 3 cnk(3, 2) 2 + 1 = 3
Exécution de cnk(4, 2)
cnk(4, 2) 3 + 3 = 6
cnk(3, 1) 1 + 2 = 3 cnk(3, 2) 2 + 1 = 3
Exécution de cnk(4, 2)
cnk(4, 2) 3 + 3 = 6
cnk(3, 1) 1 + 2 = 3 cnk(3, 2) 2 + 1 = 3
Exécution de cnk(4, 2)
cnk(4, 2) 3 + 3 = 6
cnk(3, 1) 1 + 2 = 3 cnk(3, 2) 2 + 1 = 3
Exécution de cnk(4, 2)
cnk(4, 2) 3 + 3 = 6
cnk(3, 1) 1 + 2 = 3 cnk(3, 2) 2 + 1 = 3
Exécution de cnk(4, 2)
cnk(4, 2) 3 + 3 = 6
cnk(3, 1) 1 + 2 = 3 cnk(3, 2) 2 + 1 = 3
Exécution de cnk(4, 2)
cnk(4, 2) 3 + 3 = 6
cnk(3, 1) 1 + 2 = 3 cnk(3, 2) 2 + 1 = 3
Exécution de cnk(4, 2)
cnk(4, 2) 3 + 3 = 6
cnk(3, 1) 1 + 2 = 3 cnk(3, 2) 2 + 1 = 3
Exécution de cnk(4, 2)
cnk(4, 2) 3 + 3 = 6
cnk(3, 1) 1 + 2 = 3 cnk(3, 2) 2 + 1 = 3
Exécution de cnk(4, 2)
cnk(4, 2) 3 + 3 = 6
cnk(3, 1) 1 + 2 = 3 cnk(3, 2) 2 + 1 = 3
Exécution de cnk(4, 2)
cnk(4, 2) 3 + 3 = 6
cnk(3, 1) 1 + 2 = 3 cnk(3, 2) 2 + 1 = 3
Exécution de cnk(4, 2)
cnk(4, 2) 3 + 3 = 6
cnk(3, 1) 1 + 2 = 3 cnk(3, 2) 2 + 1 = 3
Exécution de cnk(4, 2)
cnk(4, 2) 3 + 3 = 6
cnk(3, 1) 1 + 2 = 3 cnk(3, 2) 2 + 1 = 3
Exécution de cnk(4, 2)
cnk(4, 2) 3 + 3 = 6
cnk(3, 1) 1 + 2 = 3 cnk(3, 2) 2 + 1 = 3
Exécution de cnk(4, 2)
cnk(4, 2) 3 + 3 = 6
cnk(3, 1) 1 + 2 = 3 cnk(3, 2) 2 + 1 = 3
Plan
1 Introduction
2 Langage algorithmique
3 Lexique des variables
4 Algorithme
5 Lexique des constantes
6 Structures conditionnelles
7 Structures itératives
8 Fonctions
9 Fonctions récursives
10 Tableaux
Les tableaux
Déclaration (exemple)
Lexique des variables
tNotes (tableau [6] de réels) Liste de notes INTERMÉDIAIRE
Les tableaux
Déclaration (exemple)
Lexique des variables
tNotes (tableau [6] de réels) Liste de notes INTERMÉDIAIRE
A A
A A
A A Type des éléments du tableau
A
AA
Nombre d’éléments dans le tableau
Les tableaux
Déclaration (exemple)
Lexique des variables
tNotes (tableau [6] de réels) Liste de notes INTERMÉDIAIRE
Chaque élément est repéré dans le tableau par un indice qui varie
de 0 à taille − 1 (ex. : tNotes[−1] et tNotes[6] n’existent pas !).
0 1 2 3 4 5
tNotes
On accède à la case 2 par tNotes[2]. Attention, c’est la 3e case !
Tableaux de constantes
Exemple
On a besoin de la liste des nombres de jours des mois de l’année
⇒ on peut définir un tableau dans le lexique des constantes
Algorithme
// Initialisation du tableau tMesValeurs
tMesValeurs ← {5, 9, −4, 2, 12, 17, 2, 7}
...
Pour initialiser un tableau avec des valeurs fournies par l’utilisateur, on est
obligé de lire les valeurs une par une.
Une boucle de lecture est donc nécessaire.
L’affichage se fait aussi élément par élément.
Pour initialiser un tableau avec des valeurs fournies par l’utilisateur, on est
obligé de lire les valeurs une par une.
Une boucle de lecture est donc nécessaire.
L’affichage se fait aussi élément par élément.
Exemple
Algorithme
pour i de 0 à nbElem − 1 faire // boucle de lecture...
tab[i ] ← lire
fpour
...
pour i de 0 à nbElem − 1 faire // boucle d’écriture...
écrire tab[i ]
fpour
Pour initialiser un tableau avec des valeurs fournies par l’utilisateur, on est
obligé de lire les valeurs une par une.
Une boucle de lecture est donc nécessaire.
L’affichage se fait aussi élément par élément.
Exemple
Algorithme
pour i de 0 à nbElem − 1 faire // boucle de lecture...
tab[i ] ← lire
fpour
...
pour i de 0 à nbElem − 1 faire // boucle d’écriture...
écrire tab[i ]
fpour
Sub tableau()
Dim n As Integer
Dim t(1 To tmax) As Double
Do
n = InputBox("Combien de valeurs voulez-vous saisir ?")
Loop Until n > 0 And n <= tmax
For i = 1 To n
t ( i ) = InputBox("Entrez la " & i & " ème valeur du tableau")
Next
For i = 1 To n
MsgBox ("t[" & i & "] = " & t(i))
Next
End Sub
Tableaux et fonctions
Exemple
fonction lirePrix(out tPrix : tableau de réels, in taille : entier) : vide
Lit taille prix et les stocke dans tPrix.
Algorithme de lirePrix
pour i de 0 à taille − 1 faire
tPrix[i ] ← lire
fpour
Exemple
Exemple (suite)
Algorithme
// remplissage de la liste des prix des produits
lirePrix(tPrix, NB_PROD)
total ← 0
// lecture du premier numéro de produit
numProd ← lire
tant que numProd 6= EOF faire
si numProd ≥ 1 ∧ numProd ≤ NB_PROD alors
quantité ← lire
total ← total + quantité × tPrix[numProd − 1]
fsi
numProd ← lire
ftant
écrire “Le montant total est ”, total, “e”
Exemple (suite)
Algorithme
// remplissage de la liste des prix des produits
lirePrix(tPrix, NB_PROD)
total ← 0
// lecture du premier numéro de produit
numProd ← lire
tant que numProd 6= EOF faire
si numProd ≥ 1 ∧ numProd ≤ NB_PROD alors
quantité ← lire
total ← total + quantité × tPrix[numProd − 1]
fsi
numProd ← lire
ftant
écrire “Le montant total est ”, total, “e”
Exemple (suite)
Algorithme
// remplissage de la liste des prix des produits
lirePrix(tPrix, NB_PROD)
total ← 0
// lecture du premier numéro de produit
numProd ← lire
tant que numProd 6= EOF faire
si numProd ≥ 1 ∧ numProd ≤ NB_PROD alors
quantité ← lire
total ← total + quantité × tPrix[numProd − 1]
fsi
numProd ← lire
ftant
écrire “Le montant total est ”, total, “e”
Exemple
Impression d’une liste de valeurs lues, en ordre inverse.
Lexique des variables
taille (entier) taille du tableau DONNÉE
tab (tableau [taille] d’entiers) un tableau. . . INTERMÉDIAIRE
i (entier) compteur de boucle INTERMÉDIAIRE
Algorithme
pour i de 0 à taille − 1 faire
tab[i ] ← lire
fpour
pour i de taille − 1 à 0 en descendant faire
écrire tab[i ]
fpour
Exemple
Données
/ (texte lu)
Résultat
Affiche le nombre d’occurrences des lettres ‘a’, ‘e’, ‘i’, ‘o’, ‘u’ et ‘y’ dans un texte.
Idée
Lire le texte caractère par caractère pour compter les occurrences des voyelles.
Algorithme
Algorithme
(suite)
tNbVoy ← {0, 0, 0, 0, 0, 0}
carLu ← lire ...
tant que carLu 6= EOF faire si i 6= −1 alors
selon que carLu est tNbVoy[i ] ← tNbVoy[i ] + 1
cas ‘a’ : i ← 0 fsi
cas ‘e’ : i ← 1 carLu ← lire
cas ‘i’ : i ← 2 ftant
cas ‘o’ : i ← 3 écrire “Nombre de a:”, tNbVoy[0]
cas ‘u’ : i ← 4 écrire “Nombre de e:”, tNbVoy[1]
cas ‘y’ : i ← 5 écrire “Nombre de i:”, tNbVoy[2]
défaut : i ← −1 écrire “Nombre de o:”, tNbVoy[3]
fselon écrire “Nombre de u:”, tNbVoy[4]
... écrire “Nombre de y:”, tNbVoy[5]
Variante de l’exemple
Idée
Comme précédemment, mais en utilisant un tableau constant de caractères à la
place de la structure selon que.
Lexique des constantes
NB_VOY (entier) =6 nombre de
voyelles dans
l’alphabet
tVoy (tableau [NB_VOY] de caractères) = {‘a’, ‘e’, ‘i’, liste des voyelles
‘o’, ‘u’, ‘y’}
Lexique des variables
tNbVoy (tableau [NB_VOY] d’entiers) compteurs INTERMÉDIAIRE
carLu (caractère) caractère du texte INTERMÉDIAIRE
i (entier) indice de compteur INTERMÉDIAIRE
Algorithme
Algorithme
tNbVoy ← {0, 0, 0, 0, 0, 0}
carLu ← lire
tant que carLu 6= EOF faire
pour i de 0 à NB_VOY − 1 faire
si carLu = tVoy[i ] alors
tNbVoy[i ] ← tNbVoy[i ] + 1
fsi
fpour
carLu ← lire
ftant
pour i de 0 à NB_VOY − 1 faire
écrire “Nombre de ”, tVoy[i ], “:”, tNbVoy[i ]
fpour
Références
Arnaud G IERSCH
Algorithmique 1ère Année
Communication privée, 2012
Sylvain C ONTASSOT-V IVIER
Algorithmique 1ère Année
Communication privée, 2007
Thomas H. C ORMEN, Charles E. L EISERSON, Ronald L. R IVEST et Clifford S TEIN
Introduction to Algorithms
The MIT Press, 2e édition, 2001
ISO/IEC JTC1/SC22
ISO/IEC 14882:2003(E) : Programming languages – C++
ISO/IEC, 2e édition, 2003
Bjarne S TROUSTRUP
Le langage C++
CampusPress France, 3e édition, 1999