Listes opérations
Récursivité
Ep 27
le document
l'algorithme
Issue de : 23-NSI-36
EXERCICE 1
Ăcrire une fonction couples_consecutifs
qui prend en paramĂštre une liste de nombres entiers tab
non vide, et qui renvoie la liste (éventuellement vide) des couples d'entiers consécutifs successifs qu'il peut y avoir dans tab
.
Exemples :
đ Script Python >>> couples_consecutifs ([ 1 , 4 , 3 , 5 ])
[]
>>> couples_consecutifs ([ 1 , 4 , 5 , 3 ])
[( 4 , 5 )]
>>> couples_consecutifs ([ 1 , 1 , 2 , 4 ])
[( 1 , 2 )]
>>> couples_consecutifs ([ 7 , 1 , 2 , 5 , 3 , 4 ])
[( 1 , 2 ), ( 3 , 4 )]
>>> couples_consecutifs ([ 5 , 1 , 2 , 3 , 8 , - 5 , - 4 , 7 ])
[( 1 , 2 ), ( 2 , 3 ), ( - 5 , - 4 )]
RĂ©ponse
Complétez le code ci-dessous
# Mettre votre code icibksl-nlbksl-nl
Solution
def couplespy-undconsecutifs(tab):bksl-nl solution = []bksl-nl for i in range(len(tab)-1):bksl-nl if tab[i] + 1 == tab[i+1]:bksl-nl solution.append((tab[i], tab[i+1]))bksl-nl return solutionbksl-nlbksl-nltry:bksl-nl assert couplespy-undconsecutifs([1, 4, 3, 5]) == []bksl-nl assert couplespy-undconsecutifs([1, 4, 5, 3]) == [(4, 5)]bksl-nl assert couplespy-undconsecutifs([1, 1, 2, 4]) == [(1, 2)]bksl-nl assert couplespy-undconsecutifs([7, 1, 2, 5, 3, 4]) == [(1, 2), (3, 4)]bksl-nl assert couplespy-undconsecutifs([5, 1, 2, 3, 8, -5, -4, 7]) == [(1, 2), (2, 3), (-5, -4)]bksl-nl print('Tout semble correct đ')bksl-nlbksl-nlexcept AssertionError as asser:bksl-nl print('Le rĂ©sultat de votre fonction n\'est pas conforme đ€')bksl-nl
EXERCICE 2
Soit une image binaire représentée dans un tableau à 2 dimensions. Les éléments
M[i][j]
, appelés pixels, sont égaux soit à 0
soit Ă 1
.
Une composante dâune image est un sous-ensemble de lâimage constituĂ© uniquement de
1
et de 0
qui sont cĂŽte Ă cĂŽte, soit horizontalement soit verticalement.
Par exemple, les composantes de
sont
On souhaite, Ă partir dâun pixel Ă©gal Ă 1
dans une image M
, donner la valeur val
Ă tous les pixels de la composante Ă laquelle appartient ce pixel.
La fonction colore_comp1
prend pour paramÚtre une image M (représentée par une liste
de listes), deux entiers i
et j
et une valeur entiĂšre val. Elle met Ă la valeur val tous les
pixels de la composante du pixel M[i][j]
sâil vaut 1 et ne fait rien sinon.
Par exemple, colore_comp1(M, 2, 1, 3)
donne
Compléter le code récursif de la fonction colore_comp1 donné ci-dessous :
đ Script Python 1
2
3
4
5
6
7
8
9
10
11
12
13
14 def colore_comp1 ( M , i , j , val ):
if M [ i ][ j ] != 1 :
return
M [ i ][ j ] = val
if i - 1 >= 0 : # propage Ă gauche
colore_comp1 ( M , i - 1 , j , val )
if ... < len ( M ): # propage Ă droite
colore_comp1 ( M , ... , j , val )
if ... : # propage en haut
colore_comp1 ( M , ... , ... , val )
if ... : # propage en bas
...
Exemple :
đ Script Python >>> M = [[ 0 , 0 , 1 , 0 ], [ 0 , 1 , 0 , 1 ], [ 1 , 1 , 1 , 0 ], [ 0 , 1 , 1 , 0 ]]
>>> colore_comp1 ( M , 2 , 1 , 3 )
>>> M
[[ 0 , 0 , 1 , 0 ], [ 0 , 3 , 0 , 1 ], [ 3 , 3 , 3 , 0 ], [ 0 , 3 , 3 , 0 ]]
RĂ©ponse
Complétez le code ci-dessous
def colorepy-undcomp1(M, i, j, val):bksl-nl if M[i][j] != 1:bksl-nl returnbksl-nlbksl-nl M[i][j] = valbksl-nlbksl-nl if i-1 >= 0: # propage Ă gauchebksl-nl colorepy-undcomp1(M, i-1, j, val)bksl-nl if ... < len(M): # propage Ă droite bksl-nl colorepy-undcomp1(M, ..., j, val) bksl-nl if ...: # propage en haut bksl-nl colorepy-undcomp1(M, ..., ..., val) bksl-nl if ...: # propage en bas bksl-nl ...bksl-nl
Solution
def colorepy-undcomp1(M, i, j, val):bksl-nl if M[i][j] != 1:bksl-nl returnbksl-nlbksl-nl M[i][j] = valbksl-nlbksl-nl if i-1 >= 0: # propage Ă gauchebksl-nl colorepy-undcomp1(M, i-1, j, val)bksl-nl if i+1 < len(M): # propage Ă droite bksl-nl colorepy-undcomp1(M, i+1, j, val) bksl-nl if j-1 >= 0: # propage en haut bksl-nl colorepy-undcomp1(M, i, j-1, val) bksl-nl if j+1 < len(M): # propage en bas bksl-nl colorepy-undcomp1(M, i, j+1, val)bksl-nltry:bksl-nl M = [[0, 0, 1, 0], [0, 1, 0, 1], [1, 1, 1, 0], [0, 1, 1, 0]]bksl-nl colorepy-undcomp1(M, 2, 1, 3)bksl-nl assert M == [[0, 0, 1, 0], [0, 3, 0, 1], [3, 3, 3, 0], [0, 3, 3, 0]]bksl-nl print('Tout semble correct đ')bksl-nlbksl-nlexcept AssertionError as asser:bksl-nl print('Le rĂ©sultat de votre fonction n\'est pas conforme đ€')bksl-nl