Exercice JAVA multiplication de matrices - tableaux
Rédigé par GC Team, Publié le 17 Août 2010, Mise à jour le Lundi, 31 Août 2020 18:15But:
On cherche ici à écrire un programme qui calcule le produit de deux matrices
Tableaux
On cherche ici à écrire un programme MulMat.java qui calcule la multiplication de deux matrices (rappel ci-dessous).
Vous utiliserez pour représenter la matrice un tableau de tableaux de double.
Déclarations :
- Dans la méthode main, déclarez deux matrices mat1 et mat2.
Traitements :
-
Lire depuis le clavier les éléments de chacune des deux matrices (après avoir demandé leurs dimensions).
-
Multiplier les deux matrices et stocker le résultat dans une nouvelle matrice prod.
-
Afficher le contenu de cette nouvelle matrice ligne par ligne.
Méthode :
- Lire depuis le clavier les dimensions lignes (nombre de lignes) et colonnes (nombre de colonnes) de la première matrice mat1
- Lire le contenu de mat1.
- De même, lire les dimensions puis le contenu de la seconde matrice mat2.
- Vérifier que le nombre de lignes de mat2 est identique au nombre de colonnes de mat1.
Dans le cas contraire, afficher un message d'erreur "Multiplication de matrices impossible !". (rappel: si l'on multiplie deux matrices M = M1*M2, les dimensions de M sont "nombre de lignes de M1" et "nombre de colonnes de M2", et l'élément Mi,j est défini par - afficher le résultat ligne par ligne.
Exemple d'utilisation:
Saisie de la 1ère matrice : Nombre de lignes : 2 Nombre de colonnes : 3 M[1,1]=1.0 M[1,2]=2.0 M[1,3]=3.0 M[2,1]=4.0 M[2,2]=5.0 M[2,3]=6.0 Saisie de la 2ème matrice : Nombre de lignes : 3 Nombre de colonnes : 4 M[1,1]=1.0 M[1,2]=2.0 M[1,3]=3.0 M[1,4]=4.0 M[2,1]=5.0 M[2,2]=6.0 M[2,3]=7.0 M[2,4]=8.0 M[3,1]=9.0 M[3,2]=0.0 M[3,3]=1.0 M[3,4]=2.0 Résultat : 38.0 14.0 20.0 26.0 83.0 38.0 53.0 68.0
Encore un tableau à deux dimensions, mais cette fois il y a plusieurs tests d'intégrité à effectuer (taille non-nulle des matrices, matrices de tailles compatibles pour la mutliplication etc...)
La remarque faite lors des deux exercices précédents est valable ici aussi: des parties importantes du codes sont dupliquées. La série 5 vous permettra de reprendre ce code en remédiant à cette situation.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
import java.util.Scanner; class MulMat { private static Scanner scanner = new Scanner(System.in); public static void main(String[] args) { int lignes = 0; int colonnes = 0; // Saisie de la 1ère matrice System.out.println("Saisie de la 1ere matrice :"); // On vérifie que le nombre de lignes est plus grand // que 0 do { System.out.print(" Nombre de lignes : "); lignes = scanner.nextInt(); } while (lignes < 1); // On vérifie que le nombre de colonnes est plus grand // que 0 do { System.out.print(" Nombre de colonnes : "); colonnes = scanner.nextInt(); } while (colonnes < 1); // Déclaration-construction de la 1ère matrice double[][] mat1 = new double[lignes][colonnes]; for (int row = 0; row < lignes; row++) { for (int col = 0; col < colonnes; col++) { System.out.print(" M[" + (row + 1) + "," + (col + 1) + "]="); mat1[row][col] = scanner.nextDouble(); } } // ... et on refait la même chose pour la 2ème matrice System.out.println("Saisie de la 2eme matrice :"); do { System.out.print(" Nombre de lignes : "); lignes = scanner.nextInt(); } while (lignes < 1); do { System.out.print(" Nombre de colonnes : "); colonnes = scanner.nextInt(); } while (colonnes < 1); double[][] mat2 = new double[lignes][colonnes]; for (int row = 0; row < lignes; row++) { for (int col = 0; col < colonnes; col++) { System.out.print(" M[" + (row + 1) + "," + (col + 1) + "]="); mat2[row][col] = scanner.nextDouble(); } } // Ici on multiplie les matrices if (mat1[0].length != mat2.length) { System.out.println("Multiplication de matrices " + "impossible !"); } else { // Déclaration-construction de la matrice résultat double[][] prod = new double[mat1.length][mat2[0].length]; for (int row = 0; row < mat1.length; row++) { for (int col = 0; col < mat2[0].length; col++) { prod[row][col] = 0.0; for (int i = 0; i < mat2.length; i++) { prod[row][col] += mat1[row][i] * mat2[i][col]; } } } // Affichage du résultat System.out.println("Résultat :"); for (int row = 0; row < prod.length; row++) { for (int col = 0; col < prod[row].length; col++) { System.out.print(prod[row][col] + " "); } System.out.println(); } } } } |