Partage
  • Partager sur Facebook
  • Partager sur Twitter

fusion de deux tableaux

Sujet résolu
    17 mai 2012 à 23:55:08

    Bonjour à tous.

    Voilà je dois programmer un tri de fusion de deux tableaux.

    J'ai essayé de modifier des tas de petites choses mais rien n'y fait, ça ne veut tourner ni sous msdos-scite ni sur Eclipse.

    Et aucun affichage d'erreur pour me permettre de corriger, juste le néant.

    Merci beaucoup à ceux qui auront la possibilité de m'aider, et bon courage aux autres qui rencontrent des problèmes !

    Voici le programme :

    import java.io.* ;
    
    public class Bla
    {
    	public static int[] fusion ( int[] tab1, int[]tab2 )
    	{
    		int dim1 = tab1.length ;
    		int dim2 = tab2.length ;
    		
    		int[] tab3 = new int[dim1+dim2] ;
    		
    		int a = 0 ;
    		int b = 0 ;
    		int c = 0 ;
    		
    		while ( c < dim1+dim2-1 )
    		{
    			if ( tab1[a] < tab2[b] )
    			{
    				tab3[c] = tab1[a] ;
    				a++ ;
    				c++ ;
    				if ( a >= dim1-1 )
    				{
    					while ( b < dim2)
    					{
    					tab3[c] = tab2[b] ;
    					b ++ ;
    					}
    				}
    			}
    			else
    			{
    			if ( tab1[a] > tab2[b] )
    			{
    				tab3[c] = tab2[b] ;
    				b++ ;
    				c++ ;
    				if ( b >= dim2-1 )
    				{
    					while ( a < dim1)
    					{
    					tab3[c] = tab1[b] ;
    					a ++ ;
    					}
    				}
    			}
    			}
    		
    		}
    		return tab3 ;
    	}
    	
    	public static void main (String[] arg )
    	{
    		System.out.println();
    		
    		int[] tab3 = new int[3] ;
    		int[] tab4 = new int[3] ;
    		
    		tab3[0] = 1 ;
    		tab3[1] = 2 ;
    		tab3[2] = 7 ;
    		//tab1[3] = 8 ;
    		//tab1[4] = 9 ;
    		
    		tab4[0] = 1 ;
    		tab4[1] = 2 ;
    		tab4[2] = 5 ;
    		
    		int[] tab5 = new int[6] ;
    		
    		tab3 = fusion(tab3,tab4) ;
    		
    		for ( int i=0 ; i < tab3.length ; i++ )
    		{
    			System.out.print(tab3[i] + " ");
    			}
    	
    	}
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
      18 mai 2012 à 9:03:05


      Voilà, code corrigé.

      Navré pour la gène occasionnée.
      • Partager sur Facebook
      • Partager sur Twitter
        18 mai 2012 à 9:59:38

        J'ai pas essayé de le faire marcher chez moi, mais un début d'erreur possible

        int[] tab5 = new int[6] ;
        tab3 = fusion(tab3,tab4) ;
        


        Ce serait pas plutot

        int[] tab5 = new int[6] ;
        tab5 = fusion(tab3,tab4) ;
        


        Je crois que tu t'es trompé de tableau pour réceptionné ton tri.

        Du coup il faut aussi que tu modifie ton affichage.

        System.out.print(tab5[i] + " ");
        



        EDIT: Wah je viens de regarder un peu plus ton code, il est truffé de chose incohérentes. Tiens regarde (les alertes sont //)



        while ( c < dim1+dim2-1 )
        		{
        			if ( tab1[a] < tab2[b] )
        			{
        				tab3[c] = tab1[a] ;
        				a++ ;
        				c++ ;
        				if ( a >= dim1-1 )
        				{
        					while ( b < dim2)
        					{
        					tab3[c] = tab2[b] ;
        					b ++ ; //tu n'incrémentes pas ta valeur c
        					}
        				}
        			}
        			else
        			{
        			if ( tab1[a] > tab2[b] )
        			{
        				tab3[c] = tab2[b] ;
        				b++ ;
        				c++ ;
        				if ( b >= dim2-1 )
        				{
        					while ( a < dim1)
        					{
        					tab3[c] = tab1[b] ; //tu ne met pas la bonne variable (b au lieu de a)
        					a ++ ; //tu n'incrémentes pas ta valeur c
        					}
        				}
        			}
        			} //tu ne prend pas en compte le fait que tab1[a]==tab2[b]
        		
        		}
        

        • Partager sur Facebook
        • Partager sur Twitter
          18 mai 2012 à 11:18:06


          Merci beaucoup Ellirar !

          En effet c'étaient les incoréhences de la méthode qui faisaient planter le programme et non pas l'erreur d'indice ( que j'ai faite par la suite en essayant de bidouiller mais alors que ça plantait déjà sérieusement ).

          Grosse avancée, le tableau était en partie trié après tes améliorations.

          J'ai juste eu à corriger les if comme indiqué sur le programme final joint pour qu'il fonctionne.

          Encore une fois, un grand merci à toi ^^


          import java.io.* ;
          
          public class Bla
          {
          	public static int[] fusion ( int[] tab1, int[]tab2 )
          	{
          		int dim1 = tab1.length ;
          		int dim2 = tab2.length ;
          		
          		int[] tab3 = new int[dim1+dim2] ;
          		
          		int a = 0 ;
          		int b = 0 ;
          		int c = 0 ;
          		
          		while ( c < dim1+dim2-1 )
          		{
          			if ( tab1[a] <= tab2[b] )
          			{
          				tab3[c] = tab1[a] ;
          				a++ ;
          				c++ ;
          				if ( a == dim1-1 )
          				{
          					while ( b < dim2)  // ici le <= entrainait une copie du reste du tableau trop rapide
          					{
          					tab3[c] = tab2[b] ;
          					b ++ ;
          					c ++ ;
          					}
          				}
          			}
          			else
          			{
          			if ( tab1[a] > tab2[b] )
          			{
          				tab3[c] = tab2[b] ;
          				b++ ;
          				c++ ;
          				if ( b == dim2-1 )
          				{
          					while ( a < dim1 )  // ici aussi c'était le cas
          					{
          					tab3[c] = tab1[a] ;
          					a ++ ;
          					c++ ;
          					}
          				}
          			}
          			}
          		
          		}
          		return tab3 ;
          	}
          	
          	public static void main (String[] arg )
          	{
          		System.out.println();
          		
          		int[] tab3 = new int[5] ;
          		int[] tab4 = new int[3] ;
          		
          		tab3[0] = 1 ;
          		tab3[1] = 2 ;
          		tab3[2] = 7 ;
          		tab3[3] = 8 ;
          		tab3[4] = 9 ;
          		
          		tab4[0] = 1 ;
          		tab4[1] = 2 ;
          		tab4[2] = 5 ;
          		
          		int[] tab5 = new int[8] ;
          		
          		tab5 = fusion(tab3,tab4) ;
          		
          		for ( int i=0 ; i < tab5.length ; i++ )
          		{
          			System.out.print(tab5[i] + " ");
          			}
          	
          	}
          }
          
          • Partager sur Facebook
          • Partager sur Twitter
            18 mai 2012 à 11:27:23

            Je te présente ma solution (juste au cas où :) )qui ne marche que si tu as des tableaux trié en entrés:

            public static int[] fusion2 ( int[] tab1, int[]tab2 ){
            		int[] result= new int[tab1.length+tab2.length];
            		int index1=0;
            		int index2=0;
            		int i=0;
            		while (i<tab1.length+tab2.length && index1!=tab1.length && index2 != tab2.length){//on vérifie qu'on sort d'aucun des 3 tableaux sinon sa te fournit une erreur
            			if (tab1[index1]<=tab2[index2]){ //si le tableau 1 est <= au tableau 2
            				result[i]=tab1[index1];
            				index1++;
            			}
            			else if(tab1[index1]>tab2[index2]){ //si le tableau 1 est > au tableau 2
            				result[i]=tab2[index2];
            				index2++;
            			}
            			i++;
            		}
            		//dans le cas ou les deux tableaux ne font pas la même taille
            		while (index1 < tab1.length){ //le premier tableau est plus grand que le second
            			result[i]=tab1[index1];
            			i++;
            			index1++;
            		}
            		while (index2 < tab2.length){ //la c'est le second 
            			result[i]=tab2[index2];
            			i++;
            			index2++;
            		}
            		return result;
            	}
            


            Si c'est bon pour toi, problème résolu !
            • Partager sur Facebook
            • Partager sur Twitter
              7 février 2013 à 19:40:59

              Bsr je peux vous exposer un exercice que j'ai des difficultés à résoudre ?
              • Partager sur Facebook
              • Partager sur Twitter

              fusion de deux tableaux

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown