/* Auteur: Nicolas JANEY */ /* nicolas.janey@univ-fcomte.fr */ /* Fevrier 2005 */ import java.io.*; public class TransposeeMatrice { static BufferedReader flux = new BufferedReader(new InputStreamReader(System.in)); /* Fonction de recherche de la valeur */ /* de absolue maximale d'une matrice */ /* m : tableau d'entiers ou effectuer la recherche */ /* Resultat fonction : entier */ public static int valAbsMax(int [][] m) { int ii = 0; int jj = 0; for ( int i = 0 ; i < m.length ; i++ ) { for ( int j = 0 ; j < m[0].length ; j++ ) { if ( Math.abs(m[i][j]) > Math.abs(m[ii][jj]) ) { ii = i; jj = j; } } } return(m[ii][jj]); } /* Fonction de creation d'une chaine de caracteres */ /* representant un nombre justifie a droite complemente */ /* par des espaces */ /* v : entier a formater */ /* larg : nombre de caracteres de la chaine resultat */ /* Resultat fonction : Chaine de caracteres */ public static String justifieADroite(int v,int larg) { /* Definition et initialisation de la chaine */ /* avec l'entier a formater */ String s = ""+v; /* Ajout a gauche a la chaine d'autant de caracteres */ /* espace qu'il le faut pour que sa longueur devienne */ /* superieure ou egale a la largeur recherchee */ while ( s.length() < larg ) s = " "+s; /* Resultat de la fonction */ return(s); } /* Fonction d'affichage d'une matrice d'entiers */ /* m : tableau d'entiers a afficher */ /* larg : largeur de chaque colonne */ public static void affichageMatrice(int [][] m) { int max = valAbsMax(m); int larg = 1+((""+max).length()); for ( int i = 0 ; i < m.length ; i++ ) { /* Pour toute les lignes de la matrice a afficher */ for ( int j = 0 ; j < m[0].length ; j++ ) { /* Affichage d'un entier de la ligne i */ /* (sans aller a la ligne */ System.out.print(justifieADroite(m[i][j],larg+1)); } /* On va a la ligne quand tous les entiers d'une ligne */ /* ont ete affiches */ System.out.println(); } } /* Fonction de creation d'une matrice carree d'entiers */ /* initialisee avec des nombres aleatoires */ /* n : nombres de lignes et de colonnes de la matrice */ /* max : valeur maximale des nombres aleatoires */ /* Resultat fonction : Matrice d'entiers */ public static int [][] creationMatriceAleatoire(int n,int max) { /* Allocation de la matrice */ int [][] m = new int[n][n]; /* Pour toutes les lignes de la matrice a initialiser */ for ( int i = 0 ; i < n ; i++ ) /* Pour toutes les colonnes de la matrice a initialiser */ for ( int j = 0 ; j < n ; j++ ) { /* Initialisation avec un nombre aleatoire compris */ /* entre 0 et max */ m[i][j] =(int) (Math.random()*(max+1)); } /* Resultat de la fonction */ return(m); } /* Fonction de calcul de la matrice matrice transposee */ /* d'une matrice carree */ /* m : Tableau d'entiers */ /* Resultat fonction : Tableau d'entiers */ public static int [][] transposeeMatrice(int [][] m) { /* Calcul et staockage dans la variable n de la taille */ /* de la matrice m */ int n = m.length; /* Declaration et allocation d'une matrice carree */ /* de taille n */ int [][] t = new int[n][n]; /* Pour tous les entiers d'indice (j,i) de la matrice m */ for ( int i = 0 ; i < n ; i++ ) for ( int j = 0 ; j < n ; j++ ) /* L'entier d'indice (i,j) de t est affecte avec */ /* l'entier d'indice (j,i) de m */ t[i][j] = m[j][i]; /* Resultat de la fonction */ return(t); } /* Fonction principale */ public static void main(String [] args) throws IOException { /* Lecture au clavier de la taille de la matrice */ System.out.print("Taille de la matrice : "); int n = Integer.valueOf(flux.readLine()).intValue(); /* Creation d'une matrice de n sur n entiers aleatoires */ int [][] m = creationMatriceAleatoire(n,100); /* Affichage de ma matice m */ System.out.println("La matrice est"); affichageMatrice(m); /* Creation de la matrice transposee de m */ int [][] mt = transposeeMatrice(m); /* Affichage du resultat du remplissage */ System.out.println("La matrice transposee est"); affichageMatrice(mt); } }