Exercice JAVA multiplication de matrices - tableaux

 But:

On cherche ici à écrire un programme qui calcule le produit de deux matrices

Thème:

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.0Saisie 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.0Résultat :38.0 14.0 20.0 26.083.0 38.0 53.0 68.0
Fichiers:

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.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687import 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(); } } }}
Article publié le 17 Août 2010 Mise à jour le Lundi, 31 Août 2020 18:15 par Salim KHALIL