bac 25

.

Exercice N°1 :

Enoncé Exemple :

Écrire une fonction recherche qui prend en paramètre un tableau de nombres entiers
tab, et qui renvoie la liste (éventuellement vide) des couples d'entiers consécutifs
successifs qu'il peut y avoir dans tab.

>>> recherche([1, 4, 3, 5])

[]

>>> recherche([1, 4, 5, 3])

[(4, 5)]

>>> recherche([7, 1, 2, 5, 3, 4])

[(1, 2), (3, 4)]

>>> recherche([5, 1, 2, 3, 8, -5, -4, 7])

[(1, 2), (2, 3), (-5, -4)]

REPONSE

def recherche(T):

    resultat=[]

    for i in range(int(len(T)-1)):

        if T[i+1]==T[i]+1:

            resultat.append((T[i],T[i+1]))

    return resultat

Il faut utiliser idle et copier la commande ci-dessous et appuyer sur entrée

#RESULTAT

>>> recherche([1, 4, 3, 5])

[]

>>> recherche([1, 4, 5, 3])

[(4, 5)]

>>> recherche([7, 1, 2, 5, 3, 4])

[(1, 2), (3, 4)]

>>> recherche([5, 1, 2, 3, 8, -5, -4, 7])

[(1, 2), (2, 3), (-5, -4)]

>> 

.

Exercice N°2 :

Chercher :

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 :

 

                               

M =

 

0

0

1

0

0

1

0

1

1

1

1

0

0

1

1

0

sont

M =

 

0

0

1

0

0

1

0

1

1

1

1

0

0

1

1

0

 

 

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 propager prend pour paramètre une image M, 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 s’il vaut 0.

 

 

Par exemple, { propager(M,2,1,3)erreur }

RECTIFICATION propager(M, 1 , 2,3) donne :

 

M =

 

0

0

1

0

0

3

0

1

3

3

3

0

0

3

3

0

 

Compléter le code récursif de la fonction propager donné ci-dessous :

 

def propager(M, i, j, val):

    if M[i][j]== ...:

    return

    M[i][j]=val

    # l'élément en haut fait partie de la composante

    if ((i-1) >= 0 and M[i-1][j] == ...):

        propager(M, i-1, j, val)

    # l'élément en bas fait partie de la composante

    if ((...) < len(M) and M[i+1][j] == 1):

        propager(M, ..., j, val)

    # l'élément à gauche fait partie de la composante

    if ((...) >= 0 and M[i][j-1] == 1):

        propager(M, i, ..., val)

    # l'élément à droite fait partie de la composante

    if ((...) < len(M) and M[i][j+1] == 1):

        propager(M, i, ..., val)

Exemple :

>>> M = [[0,0,1,0],[0,1,0,1],[1,1,1,0],[0,1,1,0]]

>>> propager(M,2,1,3)

>>> M

[[0, 0, 1, 0], [0, 3, 0, 1], [3, 3, 3, 0], [0, 3, 3, 0]]

.

REPONSE

.

RESULTAT Demandé EXEMPLE de programme

M = [[0,0,1,0,],

     [0,1,0,1],

     [1,1,1,0],

     [0,1,1,0],

[[0,0,1,0],[0,1,0,1],[1,1,1,0],[0,1,1,0]]

def propager(M, i, j, val):

        if M[i][j] == 0:        

           propager(M, j, i, val)

           return M

        M[i][j]=val

        # l'élément en haut fait partie de la composante

        if ((i-1) >= 0 and M[i-1][j] == 1):

            propager(M, i-1, j, val)

        # l'élément en bas fait partie de la composante

        if ((i+1) < len(M) and M[i+1][j] == 1):

            propager(M,i+1, j, val)

        # l'élément à gauche fait partie de la composante

        if ((j-1) >= 0 and M[i][j-1] == 1):

            propager(M, i, j-1, val)

        # l'élément à droite fait partie de la composante

        if ((j+1) < len(M) and M[i][j+1] == 1):

            propager(M, i, j+1, val)

M = [[0,0,1,0,0],

     [0,1,1,0,1],

     [1,1,1,1,0],

     [0,1,1,1,0],

     [0,1,1,1,0]]

def propager(M, i, j, val):    

        if M[i][j] == 0:            

           propager(M, j, i, val)

           return

        M[i][j]=val

        # l'élément en haut fait partie de la composante

        if ((i-1) >= 0 and M[i-1][j] == 1):

            propager(M, i-1, j, val)

        # l'élément en bas fait partie de la composante

        if ((i+1) < len(M) and M[i+1][j] == 1):

            propager(M,i+1, j, val)

        # l'élément à gauche fait partie de la composante

        if ((j-1) >= 0 and M[i][j-1] == 1):

            propager(M, i, j-1, val)

        # l'élément à droite fait partie de la composante

        if ((j+1) < len(M) and M[i][j+1] == 1):

            propager(M, i, j+1, val)

        if M[i][j]==val:

            return M

Il faut utiliser idle et copier la commande ci-dessous et appuyer sur entrée

Il faut utiliser idle et copier la commande ci-dessous et appuyer sur entrée

>>> propager(M,1,2,3)

[[0, 0, 1, 0],

 [0, 3, 0, 1],

 [3, 3, 3, 0],

 [0, 3, 3, 0]]

 

>>> propager(M,2,1,4)

[[0, 0, 4, 0, 0],

[0, 4, 4, 0, 1],

[4, 4, 4, 4, 0],

[0, 4, 4, 4, 0],

[0, 4, 4, 4, 0]]