Somme de deux tableaux à deux dimensions

Signaler
Messages postés
45
Date d'inscription
vendredi 26 octobre 2007
Statut
Membre
Dernière intervention
5 janvier 2009
-
Messages postés
45
Date d'inscription
vendredi 26 octobre 2007
Statut
Membre
Dernière intervention
5 janvier 2009
-
the messenger





bonjour je vous informe que j'ai résolu mon probléme.Mais il se trouve que je doit ecrire une fonction qui fait la somme de deux tableaux à deux dimensions .et voila ce que j'ai fait merci de me doner des conseils 

cordialement

      /**fonction ajouter qui prend en argument deux matrices
       et renvoie un tableau a deux dimensions*/
   
    public static int[][] ajouter (int [][] t1,int [][] t2) {
   
        int [][] sommeTab;
     int i;
     int j;
     for (i = 0;i < sommeTab.length;i ++) {
          for (j = 0;j < sommeTab[0].length;j ++) {
         sommeTab[i][j] = t1[i][j] + t2[i][j];
       }
              }
  
              return sommeTab;
         }
A voir également:

8 réponses

Messages postés
45
Date d'inscription
vendredi 26 octobre 2007
Statut
Membre
Dernière intervention
5 janvier 2009

the messenger




voila le programme...merci








        /** le main */
  
    public static void main(String[] args) {
  
  /*declaration des varriables et des tableaux*/
  
  int[][] tab1;
  int[][] tab2;
  int nbLignesTab1;
  int nbColonnesTab1;
  int nbLignesTab2;
  int nbColonnesTab2;
  int i;
  int j;
  int i1;
  int j1;
        /*on demandes a l'utilusateur de saisir le nombre de lignes
   et le nombre de colonnes du tableau tab1*/
  
  nbLignesTab1 = Console.readInt("\nSaisir le nombre de lignes du tableau tab1:");
  nbColonnesTab1 = Console.readInt("\nSaisir le nombre de colonnes du tableau tab1 :");
  
  /*on demandes a l'utilusateur de saisir le nombre de lignes
   et le nombre de colonnes du tableau tab2*/
  
        nbLignesTab2 = Console.readInt("\nSaisir le nombre de lignes du tableau tab2 :");
  nbColonnesTab2 = Console.readInt("\nSaisir le nombre de colonnes du tableau tab2:");
  
  /*initialisation du tableau tab1*/
  
  tab1 = new int [nbLignesTab1][nbColonnesTab1];
  
  /*initialisation du tableau tab2*/
  
  tab2 = new int [nbLignesTab2][nbColonnesTab2];
  
  /*saisit des valeurs du tableau tab1*/
  
  for (i = 0;i < tab1.length;i ++) {
       for (j = 0;j < tab1[0].length;j ++) {
       tab1[i][j] = Console.readInt("\nSaisir la valeur de la ligne " + i + " et de la colonne " + j + " du tableau tab1"); 
                //System.out.println("tab1["+i+"]["+j+"] = " +tab1[i][j]);
             }
  }
  
  /*appel de la procedure afficheTableau2D*/
  
   
     
     /*saisit des valeurs du tableau tab2*/
  
  for (i1 = 0;i1 < tab2.length;i1 ++) {
      for (j1 = 0;j1 < tab2[0].length;j1 ++) {
       tab2[i1][j1] = Console.readInt("\nSaisir la valeur de la ligne " + i1 + " et de la colonne " + j1 + " du tableau tab2"); 
         }
  }
  
  /*appel de la procedure afficheTableaux2D*/
  
  afficherTableaux2D(tab2);
  afficherTableaux2D(tab1);
         tab1[i][j] + tab2[i1][j1]=ajouter(tab1,tab2);  
 }// fin du main
 
         /**procedure afficherTAbleaux2D qui prend en argument un tableau
      à deux dimensions et l'affiche sous forme de matrice*/
   
    public static void afficherTableaux2D(int[][] t) {
   
    /*declaration des variables*/
   
       int i;//variable de boucle pour parcourir les lignes du tableau
    int j;//variable de boucle pour pacourir les colonnes du tableau
    for (i = 0;i < t.length;i ++) {
       for (j = 0;j < t[0].length;j ++) {
        System.out.print("\n\t"+t[i][j] + " ");
          }
    }
       }//fin de la procedure 
  









      /**fonction ajouter qui prend en argument deux matrices
       et renvoie un tableau a deux dimensions*/
   
    public static int[][] ajouter (int [][] t1,int [][] t2) {
   
        int [][] sommeTab;
     int i;
     int j;
     for (i = 0;i < sommeTab.length;i ++) {
          for (j = 0;j < sommeTab[0].length;j ++) {
         sommeTab[i][j] = t1[i][j] + t2[i][j];
       }
              }
    
     }
     }
  

Ca c'est faux :
for (j = 0;j < sommeTab[0].length;j ++) {

Tu as fait la même erreur que la dernière fois, tu es étourdi.  Mets plutôt :

for (j = 0;j < sommeTab[i].length;j ++) {

Messages postés
5350
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
29 juin 2020
97
Salut,

1 - Tu ne retiens pas les explications qui te sont données... donc pourquoi poser des questions ?
2 - Merci de ne pas créer un nouveau thread pour répondre à une question que tu à posé sur un autre...

sinon j'y plus loin en plus de la correction de [auteur/GOUESSEJ/684669.aspx gouessej]:
<strike>for (j = 0;j < tab1[0].length;j ++) {</strike>[faux]

for (j = 0;j < tab1[i].length;j ++) {
[vrai]

<strike>for (j1 = 0;j1 < tab2[0].length;j1 ++) {</strike>[faux]

for (j1 = 0;j1 < tab2[i].length;j1 ++) {
[vrai]

<strike>for (j = 0;j < t[0].length;j ++) {</strike>[faux]

for (j = 0;j < t[i].length;j ++) {
[vrai]

enfin, pourquoi tu créer les incréments de tes boucles en globale à ton main ??? tu n'est pas en C ici tu sais... tu peux aisément limiter la portée des la variables à ta boucle...

for ( int i = 0;i < tab1.length;i ++)

    for (int j = 0;j < tab1[i].length;j ++)

sinon au pire si tu preferes utiliser une variable globale à la fonction pourquoi ne pas utiliser la même ?
int i, j;
[...]

for (i = 0;i < tab1.length;i ++)

    for (j = 0;j < tab1[i].length;j ++)
[...]

for (i = 0;i < tab2.length;i ++)

    for (j = 0;j < tab2[i].length;j ++)

[...]

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
Messages postés
45
Date d'inscription
vendredi 26 octobre 2007
Statut
Membre
Dernière intervention
5 janvier 2009

merci pour tout,vous savez quand on est debutant c'est dure et moi je suis arriver avec un mois et demi de retard dans mon iut ...
j'ai suivi vos conseils et ca marche voici le programme encore merci...

class TestMatrices {


        /** le main */
  
    public static void main(String[] args) {
  
  /*declaration des varriables et des tableaux*/
  
  int[][] tab1;
  int[][] tab2;
  int nbLignesTab1;
  int nbColonnesTab1;
  int nbLignesTab2;
  int nbColonnesTab2;
  int i;
  int j;
  int i1;
  int j1;
  int[][] somme;
        /*on demandes a l'utilusateur de saisir le nombre de lignes
   et le nombre de colonnes du tableau tab1*/
  
  nbLignesTab1 = Console.readInt("\nSaisir le nombre de lignes du tableau tab1:");
  nbColonnesTab1 = Console.readInt("\nSaisir le nombre de colonnes du tableau tab1 :");
  
  /*on demandes a l'utilusateur de saisir le nombre de lignes
   et le nombre de colonnes du tableau tab2*/
  
        nbLignesTab2 = Console.readInt("\nSaisir le nombre de lignes du tableau tab2 :");
  nbColonnesTab2 = Console.readInt("\nSaisir le nombre de colonnes du tableau tab2:");
  
  /*initialisation du tableau tab1*/
  
  tab1 = new int [nbLignesTab1][nbColonnesTab1];
  
  /*initialisation du tableau tab2*/
  
  tab2 = new int [nbLignesTab2][nbColonnesTab2];
  
  /*saisit des valeurs du tableau tab1*/
  
  for (i = 0;i < tab1.length;i ++) {
       for (j = 0;j < tab1[i].length;j ++) {
       tab1[i][j] = Console.readInt("\nSaisir la valeur de la ligne " + i + " et de la colonne " + j + " du tableau tab1"); 
                //System.out.println("tab1["+i+"]["+j+"] = " +tab1[i][j]);
             }
  }
  
  /*appel de la procedure afficheTableau2D*/
  
   
     
     /*saisit des valeurs du tableau tab2*/
  
  for (i1 = 0;i1 < tab2.length;i1 ++) {
      for (j1 = 0;j1 < tab2[i1].length;j1 ++) {
       tab2[i1][j1] = Console.readInt("\nSaisir la valeur de la ligne " + i1 + " et de la colonne " + j1 + " du tableau tab2"); 
         }
  }
  
  /*appel de la procedure afficheTableaux2D*/
  
  afficherTableaux2D(tab2);
  afficherTableaux2D(tab1);
        somme = ajouter(tab1,tab2);  
 }// fin du main
 
         /**procedure afficherTAbleaux2D qui prend en argument un tableau
      à deux dimensions et l'affiche sous forme de matrice*/
   
    public static void afficherTableaux2D(int[][] t) {
   
    /*declaration des variables*/
   
       int i;//variable de boucle pour parcourir les lignes du tableau
    int j;//variable de boucle pour pacourir les colonnes du tableau
    for (i = 0;i < t.length;i ++) {
       for (j = 0;j < t[i].length;j ++) {
        System.out.print("\t "+ t[i][j]);
     }
    System.out.println();
    }
 }//fin de la procedure 


  


      /**fonction ajouter qui prend en argument deux matrices
       et renvoie un tableau a deux dimensions*/
   
    public static int[][] ajouter (int [][] t1,int [][] t2) {
   
        int [][] sommeTab = new int [t1.length][t1[0].length] ;
     int i;
     int j;
     for (i = 0;i < sommeTab.length;i ++) {
          for (j = 0;j < sommeTab[i].length;j ++) {
         sommeTab[i][j] = t1[i][j] + t2[i][j];
       }
              }
     return sommeTab;
         }//fin fonction


"tout ce que je sais c'est que je sais rien " socrate 
Messages postés
5350
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
29 juin 2020
97
Salut,

dernière petite correction (je l'avait pas vu t'aleur ^^)
dans
la méthode ajouter la création de ton tableau (sommeTab) me choque, tu
peux avoir t1[0].length = 10 et t1[1].length = 8 de plus tu n'est pas
certaint que t1 et t2 aient le même nombre de lignes...

bref je te propose cette solution :

public static int[][] ajouter(int[][] t1, int[][] t2) {
   
//ici on se borne sur celui qui a le moins de lignes pour éviter
l'exeption, et on renseigne plus tard le nombre d'elements de la 2eme
dimention
    int[][] sommeTab = new int[(t1.length < t2.length) ? t1.length : t2.length][];
    for (int i = 0; i < sommeTab.length; i++) {
        //ici on se borne sur celui qui a le moins de lignes pour éviter l'exeption et on céer la 2eme dimention
        sommeTab[i] = new int[(t1[i].length < t2[i].length) ? t1[i].length : t2[i].length];
        for (int j = 0; j < sommeTab[i].length; j++)
            sommeTab[i][j] = t1[i][j] + t2[i][j];
    }
    return sommeTab;
}

bref ce n'est qu'une idée ^^

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
Messages postés
45
Date d'inscription
vendredi 26 octobre 2007
Statut
Membre
Dernière intervention
5 janvier 2009

salut, je vous derange encore ca marche l fonction que vous m'avez donné mais que signifie le point d'interrogation(?)
merci

 tout le monde peut y arriver avec codes sources
Messages postés
5350
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
29 juin 2020
97
Salut,

il s'agit de l'opérateur ternaire : explication ICI

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
Messages postés
45
Date d'inscription
vendredi 26 octobre 2007
Statut
Membre
Dernière intervention
5 janvier 2009

merci pour  tout je croit que j'aurais une bonne note au prochain controle