/* Manipulations sur une matrice de double      */

public class ManipulationsMatriceReelEnConsole {

/* Fonction de creation d'une matrice de double */
/* initialisee avec des nombres aleatoires      */
/* compris dans l'intervalle [10.0,10.0+max]    */
/* et un chiffre apres la virgule               */

  static double [][] initRandMatrice(int lignes,
                                     int colonnes,
                                     double max) {
    double [][] tab = new double[lignes][colonnes];
    for ( int i = 0 ; i < lignes ; i++ ) {
      for ( int j = 0 ; j < colonnes ; j++ ) {
        tab[i][j] = ((int) (100.0+Math.random()*max*10.0))/10.0; } }
    return tab;
  }

/* Fonction d'affichage des valeurs contenues   */
/* dans une matrice de double                   */

  static void affichageMatrice(double [][] t) {
    for ( int i = 0 ; i < t.length ; i++ ) {
      for ( int j = 0 ; j < t[0].length ; j++ ) {
        Console.afficher(t[i][j]," "); }
      Console.sautDeLigne(); }
  }

//////////////////////////////////////////////////

/* Fonction de copie d'une matrice de double    */
/* dans une matrice de double supposee          */
/* de tailles identiques                        */
/* src : La matrice de double source            */
/* dst : La matrice de double cible             */

  static void copie(double [][] src,double [][] dst) {
    for ( int i = 0 ; i < src.length ; i++ ) {
      for ( int j = 0 ; j < src[0].length ; j++ ) {
        dst[i][j] = src[i][j]; } }
  }

/* Fonction de transposition d'une matrice      */
/* de double dans une matrice de double         */
/* supposee de tailles compatibles              */
/* src : La matrice de double source            */
/* dst : La matrice de double cible             */

  static void transposition(double [][] src,double [][] dst) {
    for ( int i = 0 ; i < src.length ; i++ ) {
      for ( int j = 0 ; j < src[0].length ; j++ ) {
        dst[j][i] = src[i][j]; } }
  }

/* Fonction de transposition d'une matrice      */
/* carree de double                             */
/* m : La matrice de double à transposer        */

  static void transposition(double [][] m) {
    double aux;
    for ( int i = 0 ; i < m.length-1 ; i++ ) {
      for ( int j = i+1 ; j < m.length ; j++ ) {
        aux = m[i][j];
        m[i][j] = m[j][i];
        m[j][i] = aux; } }
  }

//////////////////////////////////////////////////

/* Programme principal                          */

  public static void main(String [] args) {
    Console.setTitle("ManipulationsMatriceReel");
    double [][] m = initRandMatrice(5,7,90.0);
    Console.afficherln("Matrice 5x7 initiale");
    affichageMatrice(m);
    Console.sautDeLigne();
    double [][] mc = new double[5][7];
    copie(m,mc);
    Console.afficherln("Matrice copiee");
    affichageMatrice(mc);
    Console.sautDeLigne();
    double [][] mt = new double[7][5];
    transposition(m,mt);
    Console.afficherln("Matrice 7x5 transposee");
    affichageMatrice(mt);
    Console.sautDeLigne();
    double [][] m2 = initRandMatrice(5,5,90.0);
    Console.afficherln("Matrice 5x5 initiale");
    affichageMatrice(m2);
    Console.sautDeLigne();
    transposition(m2);
    Console.afficherln("Matrice 5x5 transposee");
    affichageMatrice(m2);
  }
}