/* Auteur: Nicolas JANEY */ /* nicolas.janey@univ-fcomte.fr */ /* Fevrier 2005 */ import java.io.*; public class RechercheMinimumMatrice { static BufferedReader flux = new BufferedReader(new InputStreamReader(System.in)); /* Fonction de recherche de la valeur minimale */ /* d'une matrice */ /* m : tableau d'entiers ou effectuer la recherche */ /* Resultat fonction : entier */ public static int minimumMatrice(int [][] m) { /* Definition et initialisation du minimum courant */ int min = m[0][0]; for ( int i = 0 ; i < m.length ; i++ ) { /* Pour toute les lignes de la matrice ou rechercher */ for ( int j = 0 ; j < m[0].length ; j++ ) { /* Pour toute les colones de la matrice ou rechercher */ if ( m[i][j] < min ) min = m[i][j]; } } return(min); } /* Fonction de recherche des indices de la valeur */ /* minimale d'une matrice */ /* m : tableau d'entiers ou effectuer la recherche */ /* Resultat fonction : Tableau de deux entiers */ public static int [] indicesMinimumMatrice(int [][] m) { /* Definition et initialisation d'un tableau */ /* de deux entiers */ /* Indice 0 : abscice du minimum */ /* Indice 1 : ordonnee du minimum */ int [] min = new int[2]; min[0] = 0; min[1] = 0; for ( int i = 0 ; i < m.length ; i++ ) { /* Pour toute les lignes de la matrice ou rechercher */ for ( int j = 0 ; j < m[0].length ; j++ ) { /* Pour toute les colones de la matrice ou rechercher */ if ( m[i][j] < m[min[0]][min[1]] ) { min[0] = i; min[1] = j; } } } return(min); } /* Fonction de creation d'une matrice d'entiers */ /* initialisee avec des nombres aleatoires */ /* l,c : 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 l,int c,int max) { /* Allocation de la matrice */ int [][] m = new int[l][c]; /* Pour toutes les lignes de la matrice a initialiser */ for ( int i = 0 ; i < l ; i++ ) /* Pour toutes les colonnes de la matrice a initialiser */ for ( int j = 0 ; j < c ; 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); } 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 larg) { 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 principale */ public static void main(String [] args) throws IOException { /* Lecture au clavier du nombre de lignes */ /* et du nombre de colonnes de la matrice */ System.out.print("Combien de lignes : "); int l = Integer.valueOf(flux.readLine()).intValue(); System.out.print("Combien de colones : "); int c = Integer.valueOf(flux.readLine()).intValue(); System.out.print("Valeur maximale : "); int max = Integer.valueOf(flux.readLine()).intValue(); /* Creation d'une matrice de l sur c entiers */ int [][] m = creationMatriceAleatoire(l,c,max); /* Affichage de la matrice */ affichageMatrice(m,(""+max).length()); /* Affichages */ System.out.println("Valeur minimale : "+minimumMatrice(m)); int [] imin = indicesMinimumMatrice(m); System.out.println("Abscice : "+imin[0]); System.out.println("Ordonnee : "+imin[1]); } }