Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fusion de deux tableaux (Problème avec boucle For)

Sujet résolu
    14 septembre 2020 à 3:36:44

    Bonjour tout le monde,

    J'aimerai avoir votre aide sur un problème qui me tourmente depuis quelque jours avec une boucle (FOR).

    Je vous explique premièrement qu'est ce que j'essaie de faire, dans mon code C, j'essaye de fusionner deux tableaux, A, et B dans un troisième intitulé Tableau_C.

    La première fonction que j'avais fait, permet de définir la taille ainsi que la saisi des tableaux A et B.

    La deuxième fonction qui s'intitule Fusion de deux Tableaux, permet de faire appel à la fonction précédente (Saisi), afin qu'elle puisse concaténer les deux tableaux (A et B), à mon point de vue, elle le fait, mais il ne m'affiche pas le dernier résultat qui est l'Affichage du tableaux C.

    Après plusieurs tentatives, j'ai remarqué que le programme n'exécute pas ma dernière boucle For dans la fonction Fusion des Deux Tableaux.


    Si vous pouvez m'aider, je vous en serais très reconnaissant, vos remarques et critiques seront d'une grande importance durant mon parcours d'apprentissage du langage C.

    Je vous joint une copie de mon code.

    Merci beaucoup à vous tous, et au plaisir de lire vos commentaires.

    Vous trouverez ci-dessous Mon code


    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    
    void Fusion_Deux_Tableaux(int Tableau_1[], int Tableau_2[], int Tableau_Fusion[], int Taille);
    int SaisiDuTableau(int Tableau[]);
    
    //***************************************************************************************************//
    //                                       FONCTION MAIN                                               //
    //***************************************************************************************************//
    void main()
    {
        printf("Hello Hamza, Lets get Fun Again!\n\n");
    
    int Taille=0;
    
    
    int Tableau_1[Taille];
    int Tableau_2[Taille];
    int Tableau_C[Taille+Taille];
    
    
    Fusion_Deux_Tableaux(Tableau_1,Tableau_2,Tableau_C,Taille);
    
    }
    
    //***************************************************************************************************//
    //                                       FONCTION DE FUSION                                          //
    //***************************************************************************************************//
    void Fusion_Deux_Tableaux(int Tableau_1[], int Tableau_2[],int Tableau_Fusion[], int Taille)
    {
    int j = 1;
    int i = 0;
    int k = 0;
    Taille = 0;
    
    
    SaisiDuTableau(Tableau_1);
        for(i=0 ; i<Taille ; i++)
            {
                Tableau_Fusion[i]=Tableau_1[i];
            }
    
    SaisiDuTableau(Tableau_2);
        for(k=Taille, i=0;k<(Taille+Taille);k++, i++)
            {
                Tableau_Fusion[k]=Tableau_2[i];
                //i++;
            }
    
    for(i=0 ; i<(Taille+Taille) ; i++)
    {
        printf("La valeur du %i element du Tableau est maintenant : %d\n\n", j, Tableau_Fusion[i]);
        j++;
    }
    
    }
    
    //***************************************************************************************************//
    //                                       SAISI FONCTION                                              //
    //***************************************************************************************************//
    
    int SaisiDuTableau(int Tableau[])
    {
    int j = 1;
    int i = 0;
    int Taille=0;
    
    printf("Donner la taille du Tableau SVP!!\n\n");
    scanf("%i", &Taille);
    
        for(i=0 ; i<Taille ; i++)
        {
            printf("donner le %d Element du tableau \n\n", j);
            scanf("%d", &Tableau[i]);
            j++;
        }
    
    
    j=1;
       for(i=0 ; (i<Taille) ;i++ )
       {
          printf("La valeur du %i element du Tableau est : %i\n\n", j, Tableau[i]);
          j++;
       }
    
    int ValTemporary1, ValTemporary2;
    
        for(i=0 ; (i<Taille) ;i++ )
            {
                for(j=i;j<(Taille);j++)
                {
                    if((Tableau[i]>Tableau[j]))
                        {
                        ValTemporary1=Tableau[i];
                        Tableau[i]=0;
                        ValTemporary2=Tableau[j];
                        Tableau[j]=0;
                        Tableau[i]=ValTemporary2;
                        Tableau[j]=ValTemporary1;
                                    ValTemporary1 = 0;
                                    ValTemporary2 = 0;
                        }
                }
            }
    
       return Tableau[Taille];
    }
    
    
    //**********************************************************************************************************************//
    
    
    
    
    
    
    
    



    -
    Edité par HamzaFokraoui 14 septembre 2020 à 3:37:54

    • Partager sur Facebook
    • Partager sur Twitter
      14 septembre 2020 à 7:02:34

      Salut,
      J'ai l'impression que tu ne saisis pas certaines choses au sujet des boucles et des fonctions.
      Dans la fonction saisiDuTableau, tu as deux indices pour la même fonction: j et i.
      tu peux utiliser  i  directement dans ton printf
          printf("...", i+1);
      Tu ne retournes pas la taille vers la fonction Fusion_Deux_Tableaux
          return taille;
      Tu dois faire:
          taille = SaisiDuTableau(Tableau_1);
      et pas besoin de la mettre  à 0 au début.
      Même remarque au sujet de la variable j dans cette fonction, elle est inutile.
      Que ferais-tu si on te donne des grandeurs différentes pour les deux tableaux?
      et pour être plus méchant, si la taille est supérieure à ce que tu as réservé?
      Il faut vérifier que la taille soit au plus égale à ce que tu attends.
      Dans ton main, tu mets taille = 0 et tu définis tes tableaux de dimension taille, donc 0 éléments?
      La taille ne changera pas à l'exécution. Pour cela il faut utiliser l'allocation dynamique que tu n'as sûrement pas encore étudié.
      Pour tes tests, mets une taille fixe, disons de 100 positions.
      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

        14 septembre 2020 à 9:57:03

        Ça commence mal :

        int Taille=0; 
         
        int Tableau_1[Taille];
        int Tableau_2[Taille];
        int Tableau_C[Taille+Taille];

        Quel est la taille de tes tableaux ?

        PS : Les VLA sont vouée à disparition.

        • Partager sur Facebook
        • Partager sur Twitter
          14 septembre 2020 à 15:37:48

          PierrotLeFou a écrit:

          Salut,
          J'ai l'impression que tu ne saisis pas certaines choses au sujet des boucles et des fonctions.
          Dans la fonction saisiDuTableau, tu as deux indices pour la même fonction: j et i.
          tu peux utiliser  i  directement dans ton printf
              printf("...", i+1);
          Tu ne retournes pas la taille vers la fonction Fusion_Deux_Tableaux
              return taille;
          Tu dois faire:
              taille = SaisiDuTableau(Tableau_1);
          et pas besoin de la mettre  à 0 au début.
          Même remarque au sujet de la variable j dans cette fonction, elle est inutile.
          Que ferais-tu si on te donne des grandeurs différentes pour les deux tableaux?
          et pour être plus méchant, si la taille est supérieure à ce que tu as réservé?
          Il faut vérifier que la taille soit au plus égale à ce que tu attends.
          Dans ton main, tu mets taille = 0 et tu définis tes tableaux de dimension taille, donc 0 éléments?
          La taille ne changera pas à l'exécution. Pour cela il faut utiliser l'allocation dynamique que tu n'as sûrement pas encore étudié.
          Pour tes tests, mets une taille fixe, disons de 100 positions.


          Ton aide et tes remarques ont été d'une grande importance, j'ai résolu le problème

          Merci Beaucoup

          • Partager sur Facebook
          • Partager sur Twitter
            14 septembre 2020 à 17:34:27

            @rouloude:
            De la façon dont c'était fait, les VLA ne fonctionnent même pas, sinon pour réserver 0 positions au début ...
            • Partager sur Facebook
            • Partager sur Twitter

            Le Tout est souvent plus grand que la somme de ses parties.

              15 septembre 2020 à 2:27:14

              rouloude a écrit:

              Ça commence mal :

              int Taille=0; 
               
              int Tableau_1[Taille];
              int Tableau_2[Taille];
              int Tableau_C[Taille+Taille];

              Quel est la taille de tes tableaux ?

              PS : Les VLA sont vouée à disparition.

              ça commence absolument pas Mal, :), La taille des tableaux tu la définit dans ta fonction SaisiTableau, Ce que tu as mentionnée dans mon programme c'est une initialisation de la taille, mais après je définit c'est quoi la dimension de mon Tableau.

              -
              Edité par HamzaFokraoui 15 septembre 2020 à 2:29:59

              • Partager sur Facebook
              • Partager sur Twitter
                15 septembre 2020 à 2:41:16

                Sauf que tu ne réserves pas l'espace requis dans ton main. Ce n'est pas parce que tu saisis la valeur de 'taille' que le tableau prend cette dimension par magie.
                Ça pourra te dire quelle partie de ton tableau tu veux utiliser, pas plus.
                Pour l'instant, fais comme j'ai dit, mets une valeur fixe comme dimension pour tes tableaux.
                Quand tu auras vu l'allocation dynamique avec malloc(), tu pourras faire autrement.
                • Partager sur Facebook
                • Partager sur Twitter

                Le Tout est souvent plus grand que la somme de ses parties.

                  15 septembre 2020 à 10:21:14

                  HamzaFokraoui a écrit:

                  rouloude a écrit:

                  Ça commence mal :

                  int Taille=0; 
                   
                  int Tableau_1[Taille];
                  int Tableau_2[Taille];
                  int Tableau_C[Taille+Taille];

                  Quel est la taille de tes tableaux ?

                  PS : Les VLA sont vouée à disparition.

                  ça commence absolument pas Mal, :), La taille des tableaux tu la définit dans ta fonction SaisiTableau, Ce que tu as mentionnée dans mon programme c'est une initialisation de la taille, mais après je définit c'est quoi la dimension de mon Tableau.

                  Une bonne révision s'impose !

                  Quand tu écris :

                  int Taille=0;  
                  int Tableau_1[Taille];

                  Ça fait un tableau de taille 0 

                  int Tableau_1[0]; // taille vaut 0 !

                  Une fois que ton tableau est créé, tu ne peux plus changer sa taille, donc ton tableau aura une taille de 0 tout le reste du programme.



                  • Partager sur Facebook
                  • Partager sur Twitter
                    16 septembre 2020 à 15:40:27

                    rouloude a écrit:

                    HamzaFokraoui a écrit:

                    rouloude a écrit:

                    Ça commence mal :

                    int Taille=0; 
                     
                    int Tableau_1[Taille];
                    int Tableau_2[Taille];
                    int Tableau_C[Taille+Taille];

                    Quel est la taille de tes tableaux ?

                    PS : Les VLA sont vouée à disparition.

                    ça commence absolument pas Mal, :), La taille des tableaux tu la définit dans ta fonction SaisiTableau, Ce que tu as mentionnée dans mon programme c'est une initialisation de la taille, mais après je définit c'est quoi la dimension de mon Tableau.

                    Une bonne révision s'impose !

                    Quand tu écris :

                    int Taille=0;  
                    int Tableau_1[Taille];

                    Ça fait un tableau de taille 0 

                    int Tableau_1[0]; // taille vaut 0 !

                    Une fois que ton tableau est créé, tu ne peux plus changer sa taille, donc ton tableau aura une taille de 0 tout le reste du programme.



                    rouloude, j'apprécie tes explications, je prends en note tout ce que tu viens de mentionner

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Fusion de deux tableaux (Problème avec boucle For)

                    × 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