Académique Documents
Professionnel Documents
Culture Documents
S1
Initiation `
a lalgorithmique
proc
edures et fonctions
1. D
efinition dune fonction
Jacques TISSEAU
nieurs de Brest
Ecole Nationale dInge
Technop
ole Brest-Iroise
CS 73862 - 29238 Brest cedex 3 - France
c
enib
2009
tisseau@enib.fr
Algorithmique
c
enib
2009
1/21
R
eutilisabilit
e des algorithmes
Probl`
eme
Comment reutiliser un algorithme existant sans avoir `a le reecrire ?
tisseau@enib.fr
Algorithmique
c
enib
2009
2/21
R
eutilisabilit
e des algorithmes
Probl`
eme
Comment reutiliser un algorithme existant sans avoir `a le reecrire ?
>>>
>>>
>>>
...
...
>>>
6
n = 3
f = 1
for i in range(1,n+1) :
f = f*i
f
tisseau@enib.fr
Algorithmique
c
enib
2009
2/21
R
eutilisabilit
e des algorithmes
Probl`
eme
Comment reutiliser un algorithme existant sans avoir `a le reecrire ?
>>>
>>>
>>>
...
...
>>>
6
n = 3
f = 1
for i in range(1,n+1) :
f = f*i
f
tisseau@enib.fr
>>>
>>>
>>>
...
...
>>>
120
Algorithmique
n = 5
f = 1
for i in range(1,n+1) :
f = f*i
f
c
enib
2009
2/21
R
eutilisabilit
e des algorithmes
Probl`
eme
Comment reutiliser un algorithme existant sans avoir `a le reecrire ?
>>>
>>>
>>>
...
...
>>>
6
n = 3
f = 1
for i in range(1,n+1) :
f = f*i
f
>>>
>>>
>>>
...
...
>>>
120
n = 5
f = 1
for i in range(1,n+1) :
f = f*i
f
El
ement de r
eponse
Encapsuler le code dans des fonctions ou des procedures.
tisseau@enib.fr
Algorithmique
c
enib
2009
2/21
R
eutilisabilit
e des algorithmes
Probl`
eme
Comment reutiliser un algorithme existant sans avoir `a le reecrire ?
>>>
>>>
>>>
...
...
>>>
6
n = 3
f = 1
for i in range(1,n+1) :
f = f*i
f
>>>
>>>
>>>
...
...
>>>
120
n = 5
f = 1
for i in range(1,n+1) :
f = f*i
f
El
ement de r
eponse
Encapsuler le code dans des fonctions ou des procedures.
>>> factorielle(3)
6
tisseau@enib.fr
Algorithmique
c
enib
2009
2/21
R
eutilisabilit
e des algorithmes
Probl`
eme
Comment reutiliser un algorithme existant sans avoir `a le reecrire ?
>>>
>>>
>>>
...
...
>>>
6
n = 3
f = 1
for i in range(1,n+1) :
f = f*i
f
>>>
>>>
>>>
...
...
>>>
120
n = 5
f = 1
for i in range(1,n+1) :
f = f*i
f
El
ement de r
eponse
Encapsuler le code dans des fonctions ou des procedures.
>>> factorielle(3)
6
tisseau@enib.fr
>>> factorielle(5)
120
Algorithmique
c
enib
2009
2/21
tisseau@enib.fr
Algorithmique
c
enib
2009
3/21
# calcul de la mantisse
i = 0
significand = []
while (x int != 0) and (i < k significand) :
insert(significand,0,x int%2)
x int = x int/2
i = i + 1
tisseau@enib.fr
Algorithmique
c
enib
2009
3/21
tisseau@enib.fr
Algorithmique
c
enib
2009
3/21
tisseau@enib.fr
Algorithmique
c
enib
2009
4/21
tisseau@enib.fr
Algorithmique
c
enib
2009
4/21
Diviser pour r
egner
Structuration
Les fonctions et les procedures permettent de decomposer un
programme complexe en une serie de sous-programmes plus simples,
lesquels peuvent `a leur tour etre decomposes eux-memes en fragments
plus petits, et ainsi de suite.
tisseau@enib.fr
Algorithmique
c
enib
2009
5/21
Diviser pour r
egner
Structuration
Les fonctions et les procedures permettent de decomposer un
programme complexe en une serie de sous-programmes plus simples,
lesquels peuvent `a leur tour etre decomposes eux-memes en fragments
plus petits, et ainsi de suite.
a
f
s
tisseau@enib.fr
Algorithmique
c
enib
2009
5/21
Diviser pour r
egner
Structuration
Les fonctions et les procedures permettent de decomposer un
programme complexe en une serie de sous-programmes plus simples,
lesquels peuvent `a leur tour etre decomposes eux-memes en fragments
plus petits, et ainsi de suite.
a
f
s
tisseau@enib.fr
f1
f2
f3
f4
Algorithmique
c
enib
2009
5/21
Fonctions
Fonctions
Une fonction est une suite ordonnee dinstructions qui retourne une
valeur (bloc dinstructions nomme et parametre).
tisseau@enib.fr
Algorithmique
c
enib
2009
6/21
Fonctions
Fonctions
Une fonction est une suite ordonnee dinstructions qui retourne une
valeur (bloc dinstructions nomme et parametre).
Fonction expression
Une fonction joue le role dune expression.
tisseau@enib.fr
Algorithmique
c
enib
2009
6/21
Fonctions
Fonctions
Une fonction est une suite ordonnee dinstructions qui retourne une
valeur (bloc dinstructions nomme et parametre).
Fonction expression
Une fonction joue le role dune expression.
Elle enrichit le jeu des expressions possibles.
tisseau@enib.fr
Algorithmique
c
enib
2009
6/21
Fonctions
Fonctions
Une fonction est une suite ordonnee dinstructions qui retourne une
valeur (bloc dinstructions nomme et parametre).
Fonction expression
Une fonction joue le role dune expression.
Elle enrichit le jeu des expressions possibles.
Exemple
renvoie la valeur du sinus de x
y = sin(x)
nom : sin
param`
etres : x :float sin(x) :float
tisseau@enib.fr
Algorithmique
c
enib
2009
6/21
Proc
edures
Proc
edures
Une procedure est une suite ordonnee dinstructions qui ne retourne
pas de valeur (bloc dinstructions nomme et parametre).
tisseau@enib.fr
Algorithmique
c
enib
2009
7/21
Proc
edures
Proc
edures
Une procedure est une suite ordonnee dinstructions qui ne retourne
pas de valeur (bloc dinstructions nomme et parametre).
Proc
edure instruction
Une procedure joue le r
ole dune instruction.
tisseau@enib.fr
Algorithmique
c
enib
2009
7/21
Proc
edures
Proc
edures
Une procedure est une suite ordonnee dinstructions qui ne retourne
pas de valeur (bloc dinstructions nomme et parametre).
Proc
edure instruction
Une procedure joue le r
ole dune instruction.
Elle enrichit le jeu des instructions existantes.
tisseau@enib.fr
Algorithmique
c
enib
2009
7/21
Proc
edures
Proc
edures
Une procedure est une suite ordonnee dinstructions qui ne retourne
pas de valeur (bloc dinstructions nomme et parametre).
Proc
edure instruction
Une procedure joue le r
ole dune instruction.
Elle enrichit le jeu des instructions existantes.
Exemple
affiche les valeurs de x, y et z
print(x, y, z)
nom : print
param`
etres : x, y, z
tisseau@enib.fr
Algorithmique
c
enib
2009
7/21
Modules
import lego
duplo.cube
lego.cube
tisseau@enib.fr
Algorithmique
c
enib
2009
8/21
D
efinition dune fonction
Les 6
etapes de d
efinition
Nom : un identificateur suffisamment explicite.
tisseau@enib.fr
Algorithmique
c
enib
2009
9/21
D
efinition dune fonction
Les 6
etapes de d
efinition
Nom : un identificateur suffisamment explicite.
Param`
etres : la liste des param`etres dentree-sortie de lalgorithme.
tisseau@enib.fr
Algorithmique
c
enib
2009
9/21
D
efinition dune fonction
Les 6
etapes de d
efinition
Nom : un identificateur suffisamment explicite.
Param`
etres : la liste des param`etres dentree-sortie de lalgorithme.
Pr
econditions : une liste dexpressions booleennes qui precisent les
conditions dapplication de lalgorithme.
tisseau@enib.fr
Algorithmique
c
enib
2009
9/21
D
efinition dune fonction
Les 6
etapes de d
efinition
Nom : un identificateur suffisamment explicite.
Param`
etres : la liste des param`etres dentree-sortie de lalgorithme.
Pr
econditions : une liste dexpressions booleennes qui precisent les
conditions dapplication de lalgorithme.
Appel : des exemples dutilisation de lalgorithme avec les
resultats attendus.
tisseau@enib.fr
Algorithmique
c
enib
2009
9/21
D
efinition dune fonction
Les 6
etapes de d
efinition
Nom : un identificateur suffisamment explicite.
Param`
etres : la liste des param`etres dentree-sortie de lalgorithme.
Pr
econditions : une liste dexpressions booleennes qui precisent les
conditions dapplication de lalgorithme.
Appel : des exemples dutilisation de lalgorithme avec les
resultats attendus.
Description : une phrase qui dit ce que fait lalgorithme.
tisseau@enib.fr
Algorithmique
c
enib
2009
9/21
D
efinition dune fonction
Les 6
etapes de d
efinition
Nom : un identificateur suffisamment explicite.
Param`
etres : la liste des param`etres dentree-sortie de lalgorithme.
Pr
econditions : une liste dexpressions booleennes qui precisent les
conditions dapplication de lalgorithme.
Appel : des exemples dutilisation de lalgorithme avec les
resultats attendus.
Description : une phrase qui dit ce que fait lalgorithme.
Code : la sequence dinstructions necessaires `a la resolution du
probl`eme.
tisseau@enib.fr
Algorithmique
c
enib
2009
9/21
Nom et param`
etres dentr
ee-sortie
1
nom
tisseau@enib.fr
nom
>>> factorielle()
>>>
def factorielle() :
return
Algorithmique
c
enib
2009
10/21
Nom et param`
etres dentr
ee-sortie
1
nom
def factorielle() :
return
2
param`etres dentree-sortie
nom
>>> factorielle()
>>>
def factorielle(n) :
f = 1
return f
param`etres dentree-sortie
>>> factorielle(5)
1
>>> factorielle(-5)
1
>>> factorielle(toto)
1
factorielle
tisseau@enib.fr
Algorithmique
c
enib
2009
10/21
Pr
econditions
preconditions
def factorielle(n)
assert type(n) is int
assert n >= 0
f = 1
return f
tisseau@enib.fr
preconditions
>>> factorielle(5)
1
>>> factorielle(-5)
AssertionError :
assert n >= 0
>>> factorielle(toto)
AssertionError :
assert type(n) is int
Algorithmique
c
enib
2009
11/21
Pr
econditions
preconditions
def factorielle(n)
assert type(n) is int
assert n >= 0
f = 1
return f
preconditions
>>> factorielle(5)
1
>>> factorielle(-5)
AssertionError :
assert n >= 0
>>> factorielle(toto)
AssertionError :
assert type(n) is int
factorielle
n:int
f:int
[n >= 0]
tisseau@enib.fr
Algorithmique
c
enib
2009
11/21
Jeu de tests
jeu de tests
def factorielle(n) :
"""
>>> for i in range(8) :
...
print(factorielle(i),end= )
1 1 2 6 24 120 720 5040
"""
assert type(n) is int
assert n >= 0
f = 1
return f
tisseau@enib.fr
jeu de tests
>>> for i in range(8) :
...
print(factorielle(i),end=
)
...
1 1 1 1 1 1 1 1
Algorithmique
c
enib
2009
12/21
Jeu de tests
jeu de tests
def factorielle(n) :
"""
>>> for i in range(8) :
...
print(factorielle(i),end= )
1 1 2 6 24 120 720 5040
"""
assert type(n) is int
assert n >= 0
f = 1
return f
tisseau@enib.fr
jeu de tests
>>> for i in range(8) :
...
print(factorielle(i),end=
)
...
1 1 1 1 1 1 1 1
Algorithmique
c
enib
2009
12/21
Description
description
def factorielle(n) :
"""
f = n!
>>> for i in range(8) :
...
print(factorielle(i),end= )
1 1 2 6 24 120 720 5040
"""
assert type(n) is int
assert n >= 0
f = 1
return f
tisseau@enib.fr
description
>>> for i in range(8) :
...
print(factorielle(i),end=
)
...
1 1 1 1 1 1 1 1
Algorithmique
c
enib
2009
13/21
Description
description
def factorielle(n) :
"""
f = n!
>>> for i in range(8) :
...
print(factorielle(i),end= )
1 1 2 6 24 120 720 5040
"""
assert type(n) is int
assert n >= 0
f = 1
return f
tisseau@enib.fr
description
>>> for i in range(8) :
...
print(factorielle(i),end=
)
...
1 1 1 1 1 1 1 1
Algorithmique
c
enib
2009
13/21
Impl
ementation
implementation
def factorielle(n) :
"""
f = n!
>>> for i in range(8) :
...
print(factorielle(i),end= )
1 1 2 6 24 120 720 5040
"""
assert type(n) is int
assert n >= 0
f = 1
for i in range(1,n+1) :
f = f * i
return f
tisseau@enib.fr
implementation
>>> for i in range(8) :
...
print(factorielle(i),end=
)
...
1 1 2 6 24 120 720 5040
Algorithmique
c
enib
2009
14/21
Impl
ementation
implementation
def factorielle(n) :
"""
f = n!
>>> for i in range(8) :
...
print(factorielle(i),end= )
1 1 2 6 24 120 720 5040
"""
assert type(n) is int
assert n >= 0
f = 1
for i in range(1,n+1) :
f = f * i
return f
tisseau@enib.fr
implementation
>>> for i in range(8) :
...
print(factorielle(i),end=
)
...
1 1 2 6 24 120 720 5040
Algorithmique
c
enib
2009
14/21
factorielle(n) : tout en un
1
2
3
4
5
6
7
8
9
10
11
def factorielle ( n ):
"""
f = n!
>>> for i in range (10):
...
print factorielle ( i ) ,
1 1 2 6 24 120 720 5040 40320 362880
>>> factorielle (15)
1307674368000 L
"""
assert type ( n ) is int
assert n >= 0
12
13
14
f = 1
for i in range (1 , n +1): f = f * i
15
16
tisseau@enib.fr
return f
Algorithmique
c
enib
2009
15/21
sommeArithmetique(n) : tout en un
1
2
3
4
5
6
7
8
9
10
11
12
13
14
tisseau@enib.fr
return s
Algorithmique
c
enib
2009
16/21
Sp
ecification et impl
ementation
Sp
ecification dun algorithme
Quoi ?
tisseau@enib.fr
Algorithmique
c
enib
2009
17/21
Sp
ecification et impl
ementation
Sp
ecification dun algorithme
Quoi ?
tisseau@enib.fr
Algorithmique
c
enib
2009
17/21
Sp
ecification et impl
ementation
Sp
ecification dun algorithme
Quoi ?
Impl
ementation dun algorithme
Comment ?
tisseau@enib.fr
Algorithmique
c
enib
2009
17/21
Sp
ecification et impl
ementation
Sp
ecification dun algorithme
Quoi ?
Impl
ementation dun algorithme
Comment ?
tisseau@enib.fr
Algorithmique
c
enib
2009
17/21
Sp
ecification et impl
ementation
p
q
prcond
Quoi ?
def f(p,q):
assert(type(p) is int)
assert(type(q) is int)
assert(p > 0 and q > 0)
while p != q:
if p > q: p = p q
else: q = q p
d = p
return d
Comment ?
tisseau@enib.fr
Algorithmique
c
enib
2009
18/21
Une sp
ecification, des impl
ementations
#-------------------------------------def sommeArithmetique(n):
#-------------------------------------"""
somme s des n premiers entiers
#-------------------------------------def sommeArithmetique(n):
#-------------------------------------"""
somme s des n premiers entiers
s = n*(n+1)/2
s = 0
for i
return s
#--------------------------------------
tisseau@enib.fr
in range(n+1): s = s + i
return s
#--------------------------------------
Algorithmique
c
enib
2009
19/21
Concepteur
Le concepteur dun algorithme definit linterface et limplementation
de lalgorithme.
tisseau@enib.fr
Algorithmique
c
enib
2009
20/21
Concepteur
Le concepteur dun algorithme definit linterface et limplementation
de lalgorithme.
Utilisateur
Lutilisateur dun algorithme na pas `a connatre son implementation ;
seule linterface de lalgorithme le concerne.
tisseau@enib.fr
Algorithmique
c
enib
2009
20/21
Concepteur
Le concepteur dun algorithme definit linterface et limplementation
de lalgorithme.
Utilisateur
Lutilisateur dun algorithme na pas `a connatre son implementation ;
seule linterface de lalgorithme le concerne.
Selon la specification de lalgorithme, lutilisateur appelle (utilise)
lalgorithme sous forme dune procedure ou dune fonction.
tisseau@enib.fr
Algorithmique
c
enib
2009
20/21
Propri
et
es dun algorithme
Propri
et
es dun algorithme
validit
e : etre conforme aux jeux de tests
tisseau@enib.fr
Algorithmique
c
enib
2009
21/21
Propri
et
es dun algorithme
Propri
et
es dun algorithme
validit
e : etre conforme aux jeux de tests
robustesse : verifier les preconditions
tisseau@enib.fr
Algorithmique
c
enib
2009
21/21
Propri
et
es dun algorithme
Propri
et
es dun algorithme
validit
e : etre conforme aux jeux de tests
robustesse : verifier les preconditions
r
eutilisabilit
e : etre correctement parametre
tisseau@enib.fr
Algorithmique
c
enib
2009
21/21