Exercices corrigés sur les matrices en Python, Java et langage C - TD 1
Une matrice est un tableau à deux dimensions, qui contient des éléments du même type.
Dans les exercices suivants, nous essaierons de vous initier à la façon de gérer un tableau 2D en résolvant des problèmes liés au calcul matriciel.
Tous les exercices sont résolus en utilisant la programmation Python, Java et C
Exercice 1
Écrivez un programme pour lire les éléments de deux matrices et ajoutez les deux matrices dans la troisième.
La somme de deux matrices de taille (m,n), \((A_{i,j})\) et \((B_{i,j})\) notée \(A+B\) est à nouveau une matrice \((C_{i,j})\) de taille (m,n), obtenue en additionnant les éléments correspondants:
pour tous i, j : \(c_{i,j}=a_{i,j}+b_{i,j}\)
Exemple :
$$ \begin{pmatrix} 2 & 3 & 5 \\ 6 & 8 & 9 \end{pmatrix} + \begin{pmatrix} -1 & 1 & 2 \\ 7 & 2 & 1 \end{pmatrix} = \begin{pmatrix} 1 & 4 & 7 \\ 13 & 10 & 10 \end{pmatrix} $$
Corrigé
import java.util.Scanner; public class Test { public static void main(String[] variables) { Scanner clavier = new Scanner(System.in); int A[][], B[][], C[][]; int M = 2, N = 2, i, j; // intialiser la taille des matrices A et B A = new int[M][N]; B = new int[M][N]; C = new int[M][N]; // Saisir les éléments de la matrice A for (i = 0; i < M; i++) { for (j = 0; j < M; j++) { System.out.print("A[" + i + "][" + j + "] : "); A[i][j] = clavier.nextInt(); } } // Saisir les éléments de la matrice B for (i = 0; i < M; i++) { for (j = 0; j < M; j++) { System.out.print("B[" + i + "][" + j + "] : "); B[i][j] = clavier.nextInt(); } } // Ajoutez les deux matrices A et B par élément et stockez le résultat dans la matrice C for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { /* Cij = Aij + Bij */ C[i][j] = A[i][j] + B[i][j]; } } // Afficher le résultat System.out.println("\nLa somme de A+B = \n"); for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { System.out.print(C[i][j] + " \t"); } System.out.println(); } // fermer les ressources clavier.close(); } }
#include <stdio.h> #define LIGNES 3 // Nombre de lignes #define COLS 4 // Nombre de colonnes int main() { int A[LIGNES][COLS]; // Matrice 1 int B[LIGNES][COLS]; // Matrice 2 int C[LIGNES][COLS]; // Résultat int i, j; /* Saisir les éléments de la matrice A */ printf("Saisir les éléments de la matrice A de taille (%d,%d) \n",LIGNES, COLS); for(i=0; i<LIGNES; i++) { for(j=0; j<COLS; j++) { scanf("%d", &A[i][j]); } } /* Saisir les éléments de la matrice B */ printf("Saisir les éléments de la matrice B de taille (%d,%d) \n",LIGNES, COLS); for(i=0; i<LIGNES; i++) { for(j=0; j<COLS; j++) { scanf("%d", &B[i][j]); } } /* * Ajoutez les deux matrices A et B par élément et stockez le résultat dans la matrice C */ for(i=0; i<LIGNES; i++) { for(j=0; j<COLS; j++) { /* Cij = Aij + Bij */ C[i][j] = A[i][j] + B[i][j]; } } /* Afficher le résultat */ printf("\nLa somme de A+B = \n"); for(i=0; i<LIGNES; i++) { for(j=0; col<COLS; j++) { printf("%d ", C[i][j]); } printf("\n"); } return 0; }
# Taille de la matrice M = 2 N = 2 # intialiser la taille des matrices A = [[0 for i in range(N)] for j in range(M)] B = [[0 for i in range(N)] for j in range(M)] C = [[0 for i in range(N)] for j in range(M)] # Saisir les éléments de A for i in range(M): for j in range(N): A[i][j] = int(input("Saisir l'élement A[{0}][{1}] : ".format(i, j))) # Saisir les éléments de B for i in range(M): for j in range(N): B[i][j] = int(input("Saisir l'élement B[{0}][{1}] : ".format(i, j))) # Ajoutez les deux matrices A et B par élément et stockez le résultat dans la matrice C for i in range(M): for j in range(N): C[i][j] = A[i][j]+B[i][j] # Afficher le résultat for i in range(M): for j in range(N): print(C[i][j], end=" , ") print("")
Exercice 2
Écrivez un programme pour lire les éléments d'une matrice et d'un scalaire puis effectuez une multiplication scalaire de la matrice.
La multiplication scalaire de la matrice \((A_{i,j})\) de taille (m,n) et d'un scalaire c est la matrice \((B_{i,j})\) définie par :
pour tous i, j : \(b_{i,j}=c*a_{i,j}\)
Exemple :
$$ 3 * \begin{pmatrix} 2 & 3 & 5 \\ 6 & 8 & 9 \end{pmatrix} = \begin{pmatrix} 3 & 9 & 21 \\ 18 & 24 & 27 \end{pmatrix} $$
Corrigé
import java.util.Scanner; public class Test { public static void main(String[] variables) { Scanner clavier = new Scanner(System.in); int A[][], C[][]; int M = 2, N = 2, c, i, j; // intialiser la taille de A A = new int[M][N]; C = new int[M][N]; // Saisir les éléments de la matrice A for (i = 0; i < M; i++) { for (j = 0; j < M; j++) { System.out.print("A[" + i + "][" + j + "] : "); A[i][j] = clavier.nextInt(); } } System.out.print("Saisir un scalaire : "); c = clavier.nextInt(); // Effectuer la multiplication scalaire de la matrice for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { // Cij = c * Aij C[i][j] = c * A[i][j]; } } // Afficher le résultat */ System.out.println("\n cA = \n"); for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { System.out.print(C[i][j] + " \t"); } System.out.println(); } // fermer les ressources clavier.close(); } }
#include <stdio.h> #define LIGNES 3 // Nombre de lignes #define COLS 4 // Nombre de colonnes int main() { int A[LIGNES][COLS]; int num, i, j; /* Saisir les éléments de la matrice A */ printf("Saisir les éléments de la matrice A de taille (%d,%d) \n",LIGNES, COLS); for(i=0; i<LIGNES; i++) { for(j=0; j<COLS; j++) { scanf("%d", &A[i][j]); } } /* Saisir un scalaire */ printf("Saisir un scalaire "); scanf("%d", &num); /* Effectuer la multiplication scalaire de la matrice */ for(i=0; i<LIGNES; i++) { for(j=0; j<COLS; j++) { /* (cAij) = c . Aij */ A[i][j] = num * A[i][j]; } } /* Afficher le résultat */ printf("\n c.A = \n"); for(i=0; i<SIZE; i++) { for(j=0; j<SIZE; j++) { printf("%d ", A[i][j]); } printf("\n"); } return 0; }
# Taille de la matrice M = 2 N = 2 # intialiser la taille des matrices A = [[0 for i in range(N)] for j in range(M)] C = [[0 for i in range(N)] for j in range(M)] num = int(input("Saisir un scalaire : ")) # Saisir les éléments de A for i in range(M): for j in range(N): A[i][j] = int(input("Saisir l'élement A[{0}][{1}] : ".format(i, j))) # Effectuer la multiplication scalaire de la matrice for i in range(M): for j in range(N): C[i][j] = num*A[i][j] # Afficher le résultat for i in range(M): for j in range(N): print(C[i][j], end=" , ") print("")
Exercice 3
Écrivez un programme pour lire les éléments de deux matrices, puis multipliez les deux matrices dans la troisième.
Deux matrices ne peuvent être multipliées que si le nombre de colonnes de la première matrice est le même que le nombre de lignes de la seconde matrice.
Si \(A=(a_{i,j})\) est une matrice de taille (m,n), et \(B=(b_{i,j})\) est une matrice de taille (n,p), alors leur produit, noté \(AB=(c_{i,j})\) est une matrice de taille (m,p) définie par :
$$ \forall i,j : c_{i,j}=\sum_{k=1}^{n} a_{ik}*b_{kj} $$
Exemple :
$$ \begin{pmatrix} 1 & 2 & 0 \\ 4 & 3 & -1 \end{pmatrix} * \begin{pmatrix} 5 & 1\\ 2 & 3\\ 3 & 4 \end{pmatrix} = \begin{pmatrix} 9 & 7\\ 23 & 9 \end{pmatrix} $$
Corrigé
import java.util.Scanner; public class Test { public static void main(String[] variables) { Scanner clavier = new Scanner(System.in); int A[][], B[][], C[][]; int M = 2, N = 2, P = 2, i, j, k, somme = 0; // intialiser la taille des matrices A et B A = new int[M][N]; B = new int[N][P]; C = new int[M][P]; // Saisir les éléments de la matrice A for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { System.out.print("A[" + i + "][" + j + "] : "); A[i][j] = clavier.nextInt(); } } // Saisir les éléments de la matrice B for (i = 0; i < N; i++) { for (j = 0; j < P; j++) { System.out.print("B[" + i + "][" + j + "] : "); B[i][j] = clavier.nextInt(); } } /* Ajoutez les deux matrices A et B par élément et stockez le résultat dans la matrice C */ for (i = 0; i < M; i++) { for (j = 0; j < P; j++) { somme = 0; /* Multipliez la ligne de la première matrice par la colonne de la deuxième matrice et stockez la somme du produit des éléments dans somme. */ for (k = 0; k < N; k++) { somme += A[i][k] * B[k][j]; } C[i][j] = somme; } } // Afficher le résultat */ System.out.println("\n A*B = \n"); for (i = 0; i < M; i++) { for (j = 0; j < P; j++) { System.out.print(C[i][j] + " \t"); } System.out.println(); } // fermer les ressources clavier.close(); } }
#include <stdio.h> #define M 3 #define N 4 #define P 2 int main() { int A[M][N]; int B[N][P]; int C[M][P]; int j, j, k, somme; /* Saisir les éléments de la matrice A */ printf("Saisir les éléments de la matrice A de taille (%d,%d) \n",LIGNES, COLS); for(i=0; i<M; i++) { for(j=0; j<N; j++) { scanf("%d", &A[i][j]); } } /* Saisir les éléments de la matrice B */ printf("Saisir les éléments de la matrice B de taille (%d,%d) \n",LIGNES, COLS); for(i=0; i<N; i++) { for(j=0; j<P; j++) { scanf("%d", &B[i][j]); } } /* * A*B */ for(i=0; i<M; i++) { for(j=0; j<P; j++) { somme = 0; /* * Multipliez la ligne de la première matrice par la colonne de la * deuxième matrice et stockez la somme du produit des éléments dans somme. */ for(k=0; k<N; k++) { somme += A[i][k] * B[k][j]; } C[i][j] = somme; } } /* Afficher le résultat */ printf("\nA * B = \n"); for(i=0; i<M; i++) { for(j=0; j<P; j++) { printf("%d ", C[i][j]); } printf("\n"); } return 0; }
# Taille de la matrice M = 2 N = 2 P = 2 # intialiser la taille des matrices A = [[0 for i in range(N)] for j in range(M)] B = [[0 for i in range(P)] for j in range(N)] C = [[0 for i in range(P)] for j in range(M)] # Saisir les éléments de A for i in range(M): for j in range(N): A[i][j] = int(input("Saisir l'élement A[{0}][{1}] : ".format(i, j))) # Saisir les éléments de B for i in range(M): for j in range(N): B[i][j] = int(input("Saisir l'élement B[{0}][{1}] : ".format(i, j))) # Ajoutez les deux matrices A et B par élément et stockez le résultat dans la matrice C for i in range(M): for j in range(P): somme = 0 # Multipliez la ligne de la première matrice par la colonne de la deuxième # matrice et stockez la somme du produit des éléments dans somme. for k in range(N): somme += A[i][k] * B[k][j] C[i][j] = somme # Afficher le résultat for i in range(M): for j in range(N): print(C[i][j], end=" , ") print("")
Exercice 4
Écrivez un programme pour lire les éléments d'une matrice et trouver la somme des éléments de la diagonale principale de la matrice.
Si \(A=(a_{i,j})\) est une matrice de taille (m,n), alors la somme des éléments de la diagonale notée S :
$$ S=\sum_{k=1}^{m}a_{k,k}; $$
Exemple :
$$ A= \begin{pmatrix} 1 & 2 & 3 \\ 4 & 3 & -1 \\ 4 & 7 & 9 \end{pmatrix} \hspace{1cm} S = 1 + 3 + 9 = 13 $$
Corrigé
import java.util.Scanner; public class Test { public static void main(String[] variables) { Scanner clavier = new Scanner(System.in); int A[][]; int M = 2, N = 2, i, j, somme = 0; // intialiser la taille de A A = new int[M][N]; // Saisir les éléments de la matrice A for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { System.out.print("A[" + i + "][" + j + "] : "); A[i][j] = clavier.nextInt(); } } // Trouver la somme des éléments diagonaux for (i = 0; i < M; i++) { somme += A[i][i]; } // Afficher le résultat System.out.println(" Somme des éléments diagonaux = " + somme); // fermer les ressources clavier.close(); } }
#include <stdio.h> #define LIGNES 3 // Nombre de lignes #define COLS 3 // Nombre de colonnes int main() { int A[LIGNES][COLS]; int i, j, somme = 0; /* Saisir les éléments de la matrice A */ printf("Saisir les éléments de la matrice A de taille (%d,%d) \n",LIGNES, COLS); for(i=0; i<LIGNES; i++) { for(j=0; j<COLS; j++) { scanf("%d", &A[i][j]); } } /* Trouver la somme des éléments diagonaux */ for(i=0; i<LIGNES; row++) { somme = somme + A[i][i]; } printf("\n Somme des éléments diagonaux = %d", somme); return 0; }
# Taille de la matrice M = 2 N = 2 # intialiser la taille des matrices A = [[0 for i in range(N)] for j in range(M)] # Saisir les éléments de A for i in range(M): for j in range(N): A[i][j] = int(input("Saisir l'élement A[{0}][{1}] : ".format(i, j))) # Trouver la somme des éléments diagonaux somme = 0 for i in range(M): somme += A[i][i] # Afficher le résultat print("Somme des éléments diagonaux = ", somme)
Exercice 5
Écrivez un programme pour lire les éléments d'une matrice et trouver la somme des éléments de chaque ligne et colonne de la matrice.
Exemple
$$ A= \begin{pmatrix} 1 & 2 & 3 \\ 4 & 3 & -1 \\ 4 & 7 & 9 \end{pmatrix} \hspace{1cm} \begin{array}{r} Ligne \hspace{0.1cm} 1= 6 \\ Ligne \hspace{0.1cm} 2= 6 \\ Ligne \hspace{0.1cm} 3= 30 \end{array} $$ $$ \begin{array}{r} Colonne \hspace{0.1cm} 1= 9 \\ Colonne \hspace{0.1cm} 2= 12 \\ Colonne \hspace{0.1cm} 3= 11 \end{array} $$
Corrigé
import java.util.Scanner; public class Test { public static void main(String[] variables) { Scanner clavier = new Scanner(System.in); int A[][]; int M = 2, N = 2, i, j, somme = 0; // intialiser la taille de A A = new int[M][N]; // Saisir les éléments de la matrice A for (i = 0; i < M; i++) { for (j = 0; j < N; j++) { System.out.print("A[" + i + "][" + j + "] : "); A[i][j] = clavier.nextInt(); } } // Calculer la somme des éléments de chaque ligne de la matrice */ for (i = 0; i < M; i++) { somme = 0; for (j = 0; j < N; j++) { somme += A[i][j]; } System.out.println("Somme des éléments de la ligne " + (i + 1) + " = " + somme); } // Calculer la somme des éléments de chaque colonne de la matrice */ for (j = 0; j < N; j++) { somme = 0; for (i = 0; i < M; i++) { somme += A[i][j]; } System.out.println("Somme des éléments de la colonne " + (j + 1) + " = " + somme); } // fermer les ressources clavier.close(); } }
#include <stdio.h> #define LIGNES 3 // Nombre de lignes #define COLS 3 // Nombre de colonnes int main() { int A[LIGNES][COLS]; int i, j, somme = 0; /* Saisir les éléments de la matrice A */ printf("Saisir les éléments de la matrice A de taille (%d,%d) \n",LIGNES, COLS); for(i=0; i<LIGNES; i++) { for(j=0; j<COLS; j++) { scanf("%d", &A[i][j]); } } /* Calculer la somme des éléments de chaque ligne de la matrice */ for(i=0; i<LIGNES; i++) { somme = 0; for(j=0; j<COLS; j++) { somme += A[i][j]; } printf("Somme des éléments de la ligne %d = %d\n", i+1, somme); } /* Calculer la somme des éléments de chaque colonne de la matrice*/ for(j=0; j<COLS; j++) { somme = 0; for(i=0; i<LIGNES; i++) { somme += A[i][j]; } printf("Somme des éléments de la colonne %d = %d\n", j+1, somme); } return 0; }
# Taille de la matrice M = 2 N = 2 # intialiser la taille des matrices A = [[0 for i in range(N)] for j in range(M)] # Saisir les éléments de A for i in range(M): for j in range(N): A[i][j] = int(input("Saisir l'élement A[{0}][{1}] : ".format(i, j))) # Calculer la somme des éléments de chaque ligne de la matrice for i in range(M): somme = 0 for j in range(N): somme += A[i][j] print("Somme des éléments de la ligne ", (i + 1), " = ", somme) # Calculer la somme des éléments de chaque colonne de la matrice for j in range(N): somme = 0 for i in range(M): somme += A[i][j] print("Somme des éléments de la colonne ", (j + 1), " = ", somme)