Exercice JAVA multiplication de matrices - tableaux
But:
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.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.0Encore 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.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 | 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(); } } }} |