Aller au contenu

TP - Parcours de matrices

Dans ce TP, les différentes parties sont globalement indépendantes.

Téléchargez le fichier « à trous » TPB05.30.py (clic droit -> [Enregistrer sous]) et enregistrez-le dans le dossier [B05_Tableaux_de_Tableaux].

Consignes communes à chaque partie

Le programme principal contient un appel au module doctest :

##----- Programme principal et tests -----##
if __name__ == '__main__':
    import doctest
    doctest.testmod()
Dans le « main », il faudra penser à élaborer un plan de test (avec des affichages console).
Pensez à demander au professeur de valider ce plan de test...

Important

Pensez à utiliser les fonctions affichage_par_ligne() et matrice_alea() programmées dans le TP précédent et dont le code est fourni dans le fichier à compléter.

Partie 1 : Recherche de maximum

  1. Complétez la définition de la fonction max_tab_2D() qui renvoie la valeur du plus grand élément contenu dans le tableau de tableau matrice non vide passé en paramètre (ajoutez les assertions nécessaires).
    Dans le programme principal, ajoutez un test de cette fonction à l'aide d'une matrice générée aléatoirement.

    1
    2
    3
    4
    5
    6
    7
    8
    def max_tab_2D(matrice):
        """
        matrice - list, tableau de tableaux non vides de nombres entiers
        Sortie: int - valeur du plus grand élément contenu dans matrice
        >>> A = [ [4, 5, 6], [1, 2, 3], [7, 9, 8] ]
        >>> max_tab_2D(A)
        9
        """
    

    Exemple de test

    >>> max_tab_2D([])
    AssertionError: La matrice ne doit pas être vide
    
    >>> max_tab_2D([[], [], []])
    AssertionError: Les sous-tableaux ne doivent pas être vides
    
    >>> C = [[49, -15, 8, 84, 66, 62], [81, -43, -54, -53, -55, 93], [-13, -69, 53, -48, 16, 31]]
    >>> max_tab_2D(C)
    93
    
  2. Complétez la définition de la fonction indice_max_tab_2D() qui renvoie le couple des coordonnées du plus grand élément contenu dans le tableau de tableau matrice non vide passé en paramètre.
    Dans le programme principal, ajoutez un test de cette fonction à l'aide d'une matrice générée aléatoirement.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    def indice_max_tab_2D(matrice):
        """
        matrice - list, tableau de tableaux non vides de nombres entiers
        Sortie: tuple - couple (i, j) des coordonnées du plus grand élément
                contenu dans matrice
        >>> A = [ [4, 5, 6], [1, 2, 3], [7, 9, 8] ]
        >>> indice_max_tab_2D(A)
        (2, 1)
        """
    

    Exemple de test

    >>> indice_max_tab_2D([])
    AssertionError: La matrice ne doit pas être vide
    
    >>> indice_max_tab_2D([[], [], []])
    AssertionError: Les sous-tableaux ne doivent pas être vides
    
    >>> C = [[49, -15, 8, 84, 66, 62], [81, -43, -54, -53, -55, 93], [-13, -69, 53, -48, 16, 31]]
    >>> indice_max_tab_2D(C)
    (1, 5)
    

Partie 2 : Plus grand des minimum

Complétez la définition de la fonction max_des_min() qui renvoie la valeur du plus grand élément parmi les minimums de chacune des lignes de la matrice passée en paramètre.
Dans le programme principal, ajoutez un test de cette fonction à l'aide d'une matrice générée aléatoirement.

1
2
3
4
5
6
7
8
9
def max_des_min(matrice):
    """
    matrice - list, tableau de tableaux non vides de nombres entiers
    Sortie: int - valeur du plus grand élément parmi
            les minimum de chaque ligne de matrice
    >>> A = [ [4, 5, 6], [1, 2, 3], [7, 9, 8] ]
    >>> max_des_min(A)
    7
    """

Exemple de test

>>> max_des_min([])
AssertionError: La matrice ne doit pas être vide

>>> max_des_min([[], [], []])
AssertionError: Les sous-tableaux ne doivent pas être vides

>>> C = [[49, -15, 8, 84, 66, 62], [81, -43, -54, -53, -55, 93], [-13, -69, 53, -48, 16, 31]]
>>> max_des_min(C)
-15

Partie 3 : Beaucoup de 0, quelques 1

On reprend deux exercices déjà réalisés dans le TP précédent, mais avec un raisonnement différent. Dans chaque cas :

  • vous allez définir une matrice entièrement remplie de 0 ;
  • puis vous effectuez un parcours qui permet de mettre à 1 les cases indiquées par la consigne de la question posée.

Diagonale 01

  1. Complétez la définition de la fonction premiere_diagonale_bis() qui renvoie une matrice carrée de n lignes et n colonnes contenant des 0 sauf la première diagonale qui contient des 1.
    Les carrés blancs de l'image ci-contre représente les 0 de la matrice et les carrés noirs représentent les 1.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    def premiere_diagonale_bis(n):
        """
        n - int, entier strictement positif
        Sortie: list -  matrice contenant n lignes et n colonnes.
                Les éléments valent tous 0 sauf ceux de la première
                diagonale qui valent 1.   
        >>> premiere_diagonale_bis(4)
        [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]   
        """
    

    Exemple de test

    >>> A = premiere_diagonale_bis(5)        
    >>> affichage_par_ligne(A)
    [1, 0, 0, 0, 0]
    [0, 1, 0, 0, 0]
    [0, 0, 1, 0, 0]
    [0, 0, 0, 1, 0]
    [0, 0, 0, 0, 1]
    

    Diagonale 02

  2. Complétez la définition de la fonction deuxieme_diagonale_bis() qui renvoie une matrice carrée de n lignes et n colonnes contenant des 0 sauf la seconde diagonale qui contient des 1.
    Les carrés blancs de l'image ci-contre représente les 0 de la matrice et les carrés noirs représentent les 1.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    def deuxieme_diagonale_bis(n):
        """
        n - int, entier strictement positif
        Sortie: list -  matrice contenant n lignes et n colonnes.
                Les éléments valent tous 0 sauf ceux de la seconde
                diagonale qui valent 1. 
        >>> deuxieme_diagonale_bis(4)
        [[0, 0, 0, 1], [0, 0, 1, 0], [0, 1, 0, 0], [1, 0, 0, 0]] 
        """
    

    Exemple de test

    >>> B = deuxieme_diagonale_bis(6)    
    >>> affichage_par_ligne(B)
    [0, 0, 0, 0, 0, 1]
    [0, 0, 0, 0, 1, 0]
    [0, 0, 0, 1, 0, 0]
    [0, 0, 1, 0, 0, 0]
    [0, 1, 0, 0, 0, 0]
    [1, 0, 0, 0, 0, 0]