Exercice Java corrigé multiplication de matrices – tableaux

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.

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();
            }
        }
    }
}

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *