/* Manipulations sur une matrice de int        */

public class ManipulationsMatriceEntierEnConsole {

/* Fonction de creation d'une matrice de int   */
/* initialisee avec des nombres aleatoires     */
/* compris dans l'intervalle [0,max]           */

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

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

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

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

/* Fonction de recherche et retour             */
/* de la plus petite valeur contenue           */
/* dans une matrice d'int                      */
/* t : Le tableau d'int où faire la recherche  */

  static int min(int [][] t) {
    int min = t[0][0];
    for ( int i = 0 ; i < t.length ; i++ ) {
      for ( int j = 0 ; j < t[0].length ; j++ ) {
        if ( t[i][j] < min ) {
          min = t[i][j]; } } }
    return min;
  }

/* Type agrege de stockage d'une position 2D   }
/* a coordonnees entières                      */

  static class Position {
    int l = 0;
    int c = 0; };

/* Fonction de recherche et retour             */
/* des coordonnees de la plus petite valeur    */
/* contenue dans une matrice d'int             */
/* t : La matrice d'int où faire la recherche  */

  static Position positionMin(int [][] t) {
    Position pMin = new Position();
    int min = t[0][0];
    for ( int i = 0 ; i < t.length ; i++ ) {
      for ( int j = 0 ; j < t[0].length ; j++ ) {
        if ( t[i][j] < min ) {
          pMin.l = i;
          pMin.c = j;
          min = t[i][j]; } } }
    return pMin;
  }

/* Fonction de calcul et retour                */
/* de la somme des valeurs contenues           */
/* dans un tableau d'int                       */
/* ligne : Le tableau d'int traité             */

  static int sommeLigne(int [] ligne) {
    int somme = 0;
    for ( int i = 0 ; i < ligne.length ; i++ ) {
      somme = somme+ligne[i]; }
    return somme;
  }

/* Fonction de calcul et retour                */
/* de l'indice de la ligne de somme maximum    */
/* des lignes contenues                        */
/* dans une matrice d'int                      */
/* t : Le tableau d'int traité                 */

  static int ligneMax(int [][] t) {
    int somme;
    int max = sommeLigne(t[0]);
    int iMax = 0;
    for ( int i = 1 ; i < t.length ; i++ ) {
      somme = sommeLigne(t[i]);
      if ( somme > max ) {
        iMax = i;
        max = somme; } }
    return iMax;
  }

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

/* Programme principal                         */

  public static void main(String [] args) {
    Console.setTitle("ManipulationsMatriceEntier");
    int iMax;
    int [][] t = initRandMatrice(20,8,999);
    affichageMatrice(t);
    Console.sautDeLigne();
    Console.afficherln("Plus petite valeur : ",min(t));
    Position p = positionMin(t);
    Console.afficherln("En position        : ",p.l," ",p.c);
    iMax = ligneMax(t);
    Console.afficherln("La ligne max est   : ",iMax);
  }
}