Informatique Pour Tous page 3/4 PCSI1 2013-2014
11.
Écrire en Python une fonction nommée
surface
renvoyant la surface d’un parallélépipède de côtés L, H et
P
indiqués dans l’appel de la fonction.
def surface(L,H, P) :
return 2*(L*H + H*P + L*P)
12. Écrire en Python un programme utilisant une fonction nommée table_mult(n) qui reçoit
en argument un entier n et retourne les 10 premiers termes de la table de multiplication de base
n. Le programme affiche le résultat de 3
×
××
×
5.
Par exemple, pour n = 3, la fonction renvoie (1,3,9,12,15,18,21,24,27,30) ou
[1,3,9,12,15,18,21,24,27,30] et le programme affiche la valeur 15.
def table_mult
(base) : # version tuple
table = () #initialisation du tuple table
for i in range(1,11) :
table += (i*base,) #remplissage de la table
return table
table_3 = table_mult(3) # appel de la fonction
print(table_3[4]) # affichage de 3×
××
×5
Algorithmique
13. Analyse d’un algorithme
a) Sans utiliser les fonctions max() et
sort() de Python, définir une fonction
maximum(lst) qui reçoit en argument une liste non vide de valeurs numériques et retourne la
valeur la plus élevée de cette liste.
Par exemple,
maximum([1,9,2,7,-3,0,4,8,7])
retourne
9.
def maximum(lst):
max = lst[0]
for v in lst[1 :len(lst)]:
if v > max:
max = v
return max
def maximum(lst):
max = lst[0]
for i in range(1 , len(lst)):
if lst[i] > max:
max = lst[i]
return max
b) Démontrer la correction de cet algorithme
On propose comme invariant de boucle la propriété
P : {max est la valeur la plus élevée de lst[0 : i+1], i étant l’indice de boucle }
avant la première itération i = 0 donc lst[0 :1] = lst[0]. On a bien max = lst[0] ;
après une itération, max est la valeur la plus élevée des éléments de la liste d’indices compris
entre 0 et i donc de lst[0 : i+1] (car le dernier indice touché par cette syntaxe est i + 1 – 1 = i ;
après la dernière itération, max est la valeur la plus élevée de toute la liste soit lst[0 : len(lst)+1].
Les trois conditions nécessaires sont vérifiées donc la correction est démontrée.
c) Évaluer la complexité en temps dans le pire des cas de cet algorithme
Avant la boucle for, il y a une affectation.
À chaque itération (une gestion du compteur), il y a un test et au pire une affectation soit 3
instructions simples au pire.