You are on page 1of 54

Informatique

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

Structuration des algorithmes


Probl`
eme
Comment structurer un algorithme pour le rendre plus
comprehensible ?

tisseau@enib.fr

Algorithmique

c
enib 2009

3/21

Structuration des algorithmes


Probl`
eme
Comment structurer un algorithme pour le rendre plus
comprehensible ?
ieee code = []
k exponent = 8
k significand = 23
k ieee = 32
bias = code(127,2,k exponent)
x int = int(abs(x))
x frac = abs(x) - x int
expo 2 = 0
for i in range(k ieee) : append(ieee code,0)
# calcul du signe
sign = int(x < 0)

if len(significand) > 0 and significand[0] == 1 :


del significand[0]
expo 2 = len(significand)
i = len(significand)
while (x frac != 0) and (i < k significand) :
x frac = x frac * 2
x int = int(x frac)
x frac = x frac - x int
if (x int == 0) and (i == 0) :
expo 2 = expo 2 - 1
else :
append(significand,x int)
i = i + 1

# 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

Structuration des algorithmes


Probl`
eme
Comment structurer un algorithme pour le rendre plus
comprehensible ?
ieee code = []
k exponent = 8
k significand = 23
k ieee = 32
bias = code(127,2,k exponent)
x int = int(abs(x))
x frac = abs(x) - x int
expo 2 = 0
for i in range(k ieee) : append(ieee code,0)
# calcul du signe
sign = int(x < 0)
# 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

if len(significand) > 0 and significand[0] == 1 :


del significand[0]
expo 2 = len(significand)
i = len(significand)
while (x frac != 0) and (i < k significand) :
x frac = x frac * 2
x int = int(x frac)
x frac = x frac - x int
if (x int == 0) and (i == 0) :
expo 2 = expo 2 - 1
else :
append(significand,x int)
i = i + 1
et quelques 20 lignes plus loin...
ieee code[0] = sign
ieee code[1 :9] = exponent
ieee code[9 :32] = significand

Algorithmique

c
enib 2009

3/21

Structuration des algorithmes


El
ement de r
eponse
Utiliser des fonctions et des procedures.

tisseau@enib.fr

Algorithmique

c
enib 2009

4/21

Structuration des algorithmes


El
ement de r
eponse
Utiliser des fonctions et des procedures.
# calcul du signe
sign = int(x < 0)
# calcul de la mantisse
significand, expo 2 = mantisse(x)
# calcul de lexposant
exponent = exposant(expo 2,127)
# code IEEE 754
ieee code[0] = sign
ieee code[1 :9] = exponent
ieee code[9 :32] = significand

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

from lego import cube

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

def somm eArith metique ( n ):


"""
somme s des n premiers entiers

4
5
6
7
8
9
10
11
12

>>> for n in range (7):


...
print sommeArithmetique ( n ) == n *( n +1)/2 ,
True True True True True True True
"""
assert type ( n ) is int
assert n >= 0
q = q + 1
s = n *( n +1)/2

13
14

tisseau@enib.fr

return s

Algorithmique

c
enib 2009

16/21

Sp
ecification et impl
ementation

Sp
ecification dun algorithme

Quoi ?

La specification decrit la fonction et lutilisation dun algorithme (ce


que fait lalgorithme).

tisseau@enib.fr

Algorithmique

c
enib 2009

17/21

Sp
ecification et impl
ementation

Sp
ecification dun algorithme

Quoi ?

La specification decrit la fonction et lutilisation dun algorithme (ce


que fait lalgorithme).
Lalgorithme est vu comme une bote noire dont on ne connat pas le
fonctionnement interne.

tisseau@enib.fr

Algorithmique

c
enib 2009

17/21

Sp
ecification et impl
ementation

Sp
ecification dun algorithme

Quoi ?

La specification decrit la fonction et lutilisation dun algorithme (ce


que fait lalgorithme).
Lalgorithme est vu comme une bote noire dont on ne connat pas le
fonctionnement interne.

Impl
ementation dun algorithme

Comment ?

Limplementation decrit le fonctionnement interne de lalgorithme


(comment fait lalgorithme).

tisseau@enib.fr

Algorithmique

c
enib 2009

17/21

Sp
ecification et impl
ementation

Sp
ecification dun algorithme

Quoi ?

La specification decrit la fonction et lutilisation dun algorithme (ce


que fait lalgorithme).
Lalgorithme est vu comme une bote noire dont on ne connat pas le
fonctionnement interne.

Impl
ementation dun algorithme

Comment ?

Limplementation decrit le fonctionnement interne de lalgorithme


(comment fait lalgorithme).
Limplementation precise lenchanement des instructions necessaires `a
la resolution du probl`eme considere.

tisseau@enib.fr

Algorithmique

c
enib 2009

17/21

Sp
ecification et impl
ementation

p
q

prcond

La specification decrit la fonction et lutilisation dun algorithme


algorithme f

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 ?

Limplementation decrit le fonctionnement interne de lalgorithme

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

>>> for n in range(7):


...
print sommeArithmetique(n)\
== n*(n+1)/2
True True True True True True True
"""
assert type(n) is int
assert n >= 0

>>> for n in range(7):


...
print sommeArithmetique(n)\
== n*(n+1)/2
True True True True True True True
"""
assert type(n) is int
assert n >= 0

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 versus Utilisateur

Concepteur
Le concepteur dun algorithme definit linterface et limplementation
de lalgorithme.

tisseau@enib.fr

Algorithmique

c
enib 2009

20/21

Concepteur versus Utilisateur

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 versus Utilisateur

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

You might also like