[C] Tri et fusion de tableaux
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

[C] Tri et fusion de tableaux



  1. #1
    mimow

    [C] Tri et fusion de tableaux


    ------

    Bonsoir tout le monde !

    Alors voilà comme l'indique le titre, le but est de fusionner 2 tableaux composés préalablement par l'utilisateur qui doit faire en sorte de les remplir en tenant compte de l'ordre .

    J'ai réalisé un programme qui m'est paru très logique, il y'a eu des erreurs a l'éxecution, j'ai vérifié ça avec mon professeur durant 15 minutes, il n'est pas arrivé a localiser d'erreurs, je suis revenu chez moi j'ai testé un truc et ça a fait marcher le programme à merveille mais je ne comprends pas pourquoi il ne marche pas sans cela ! Donc voici mon programme :

    Code:
    #include <stdio.h>
    #include <conio.h>
    #define NMAX 100
    #define MMAX 100
    
    int main()
    {
        int i,A[NMAX],B[MMAX],M,N,j,FUS[NMAX+MMAX],t=0 ;
        printf("Entrez la taille de votre premier tableau \n") ;
        scanf("%d",&N) ;
        printf("Entrez des valeurs triees a l'ordre croissant pour le 1er tableau \n");
        for(i=0;i<N;i++)
        {
            printf("Entrez une valeur pour la %d case \t",i+1);
            scanf("%d",&A[i]);
        }
        printf("Entrez la taille de votre 2eme tableau \n") ;
        scanf("%d",&M) ;
        printf("Entrez des valeurs triees a l'ordre croissant pour le 2eme tableau \n");
        for(j=0;j<M;j++)
        {
            printf("Entrez une valeur pour la %d case \t",j+1);
            scanf("%d", &B[j]); 
        }                               \\ jusqu'a là, le but est d'initialiser les 2 tableaux triés
        i=0 ;
        j=0 ;                        
        while (i<N || j<M)        \\ on ne sait pas quel tableau risque de s'épuiser, autant ne pas mettre de && .
        {
           if(i<N && j<M)
           {
                if (B[j] < A[i])
                {
                   FUS[t]=B[j]   ;
                   j++ ;
                }
               if (A[i] < B[j])
               {
                 FUS[t]=A[i];
                 i++ ;
               }
               if (A[i]==B[j])     \\ pas de répétitions . 
              {
                FUS[t]=A[i] ;
                  i++ ;
                  j++ ;
              }
        t++ ;
          }
          if(i==N && j<M)     \\On traite les différents cas possibles d'épuisement . 
          {
                FUS[t]=B[j] ;
                j++ ;
                t++ ;
          }
          if(j==M && i<N)
          {
            FUS[t]=A[i];
            i++ ;
            t++ ;
          }
       }
      printf("la fusion de vos 2 tableaux est : \n ") ;  \\ Et voila !
      for(i=0;i<t;i++)
        printf("%d \n",FUS[i]);
      return 0;
    }
    Alors voilà le programme qui ne marche pas ! par exemple quand j'execute, je donne au tableau A les valeurs 2,4,6 et au tableau B 1,2,3 , le tableau fusionné me donne 2,4,6 xD, si je mets 1,2,3,8 a B par exemple j'aurai FUS = 2,4,6,8 .

    le truc que j'ai fais qui a tout réglé c'est que j'ai mi l'incrémentation de t a l'intérieur de chaque "if", j'avais mis ça au début mais voyant que je le repete dans chaque je me suis dis je pourrai l'enlever et le mettre en bas puisque dans tout les cas le t est incrémenté, eh bein non ... et je ne comprends pas pourquoi >< j'espère que vous pourrez m'expliquer ^^

    Merci à tous et bonne soirée .

    -----
    Dernière modification par JPL ; 17/01/2013 à 23h14. Motif: Ajout de la balise Code (#) pour garder l'indentation

  2. #2
    Jack
    Modérateur

    Re : [C] Tri et fusion de tableaux

    ​Il serait bon de lire les règles participatives de ce forum avant de poster:
    http://forums.futura-sciences.com/programmation-langages-algorithmique/441632-regles-participatives-nouveau-forum.html

    Merci

  3. #3
    fred1599

    Re : [C] Tri et fusion de tableaux

    Bonsoir,

    Il faut virer déjà les entrées utilisateurs inutiles dans l'algorithme tri fusion, ça simplifie le code et vous les replacez avec deux tableaux triés et leurs valeurs.

    Ensuite comme dis plus haut, sans la balise code, c'est pas motivant et surtout illisible, donc merci pour nos petits yeux.

    Quand on envoie une difficulté sur un forum, on cible le problème, donc ciblez, car les printf, ça doit pas être le problème, si?

    Autre question, avez-vous vu les fonctions?
    Dernière modification par fred1599 ; 17/01/2013 à 23h06.

  4. #4
    mimow

    Re : [C] Tri et fusion de tableaux

    Citation Envoyé par Jack Voir le message
    ​Il serait bon de lire les règles participatives de ce forum avant de poster:
    http://forums.futura-sciences.com/programmation-langages-algorithmique/441632-regles-participatives-nouveau-forum.html

    Merci
    Je m'excuse de ne pas avoir lu les régles avant, c'est vrai que je m'étais dis que c'était pas bien visible j'ai essayé de trouver une solution mais j'ai omis de vérifier les règles .

    Citation Envoyé par fred1599 Voir le message

    Il faut virer déjà les entrées utilisateurs inutiles dans l'algorithme tri fusion, ça simplifie le code et vous les replacez avec deux tableaux triés et leurs valeurs.
    Je n'ai pas bien compris ça, vous voulez dire que je devrai initialiser 2 tableaux tout seul vite fait ?


    Citation Envoyé par fred1599 Voir le message
    Quand on envoie une difficulté sur un forum, on cible le problème, donc ciblez, car les printf, ça doit pas être le problème, si?
    Vous avez raison, je vais modifier mon message pour clarifier cela ^^ .


    Citation Envoyé par fred1599 Voir le message
    Autre question, avez-vous vu les fonctions?
    En cours non, pas encore, mais ayant suivi le processus du siteduzero parallèlement, je sais un peu ce que c'est, mais je n'utilise pas ça en classe ^^ .

  5. A voir en vidéo sur Futura
  6. #5
    mimow

    Re : [C] Tri et fusion de tableaux

    Puisqu'on ne peut modifier notre message que dans un intervalle de 5 minutes, je reposte ici clairement le problème .
    Code:
       
                             
        j=0 , i=0 , t=0 ;                      
        while (i<N || j<M)        \\ on ne sait pas quel tableau risque de s'épuiser, autant ne pas mettre de && .
        {
           if(i<N && j<M)
           {
                if (B[j] < A[i])
                {
                   FUS[t]=B[j]   ;
                   j++ ;
                }
               if (A[i] < B[j])
               {
                 FUS[t]=A[i];
                 i++ ;
               }
               if (A[i]==B[j])     \\ pas de répétitions . 
              {
                FUS[t]=A[i] ;
                  i++ ;
                  j++ ;
              }
        t++ ;  \\ puisque dans tout les cas précédents il doit etre incrémenté, autant éviter la répétition .
          }
          if(i==N && j<M)     \\On traite les différents cas possibles d'épuisement . 
          {
                FUS[t]=B[j] ;
                j++ ;
                t++ ;
          }
          if(j==M && i<N)
          {
            FUS[t]=A[i];
            i++ ;
            t++ ;
          }
       }
    Donc comme j'ai cité précédemment quand je metsi l'incrémentation de t a l'intérieur de chaque "if", le programme marche bien, mais je ne comprends pas pourquoi il ne marche pas correctement avec le programme cité ci dessus .

    Merci à tous et bonne fin de soirée !

  7. #6
    Chanur

    Re : [C] Tri et fusion de tableaux

    Bonjour,
    Quand tu dis :
    Citation Envoyé par mimow Voir le message
    dans tout les cas le t est incrémenté
    il y a une différence entre mettre le t++ dans chaque if et ce que tu as écrit : rien n'empêche de passer pas plusieurs des if (puisqu'on modifie soit i, soit j, chaque if peut modifier le résultat du suivant). Il faudrait mettre "else if" :
    Code:
    #include <stdio.h>#define NMAX 100
    #define MMAX 100
    
    
    int main()
    {
        int i,A[NMAX],B[MMAX],M,N,j,FUS[NMAX+MMAX],t=0 ;
        printf("Entrez la taille de votre premier tableau \n") ;
        scanf("%d",&N) ;
        printf("Entrez des valeurs triees a l'ordre croissant pour le 1er tableau \n");
        for(i=0;i<N;i++)
        {
            printf("Entrez une valeur pour la %d case \t",i+1);
            scanf("%d",&A[i]);
        }
        printf("Entrez la taille de votre 2eme tableau \n") ;
        scanf("%d",&M) ;
        printf("Entrez des valeurs triees a l'ordre croissant pour le 2eme tableau \n");
        for(j=0;j<M;j++)
        {
            printf("Entrez une valeur pour la %d case \t",j+1);
            scanf("%d", &B[j]);
        }                               // jusqu'a là, le but est d'initialiser les 2 tableaux triés
        i=0 ;
        j=0 ;
        while (i<N || j<M)        // on ne sait pas quel tableau risque de s'épuiser, autant ne pas mettre de && .
        {
            if(i<N && j<M)
            {
                if (B[j] < A[i])
                {
                    FUS[t]=B[j]   ;
                    j++ ;
                }
                else if (A[i] < B[j])
                {
                    FUS[t]=A[i];
                    i++ ;
                }
                else if (A[i]==B[j])     // pas de répétitions . 
                {
                    FUS[t]=A[i] ;
                    i++ ;
                    j++ ;
                }
            }
            else if(i==N && j<M)     //On traite les différents cas possibles d'épuisement . 
            {
                FUS[t]=B[j] ;
                j++ ;
            }
            else if(j==M && i<N)
            {
                FUS[t]=A[i];
                i++ ;
            }
            t++ ;
        }
        printf("la fusion de vos 2 tableaux est : \n ") ;  // Et voila !
        for(i=0;i<t;i++)
            printf("%d \n",FUS[i]);
        return 0;
    }
    Tu (ou ton prof) aurais du le tester pas par pas avec un debugger ...
    A+
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

  8. #7
    whoami

    Re : [C] Tri et fusion de tableaux

    Bonjour,

    Déjà, quand je vois
    Code:
        printf("Entrez des valeurs triees a l'ordre croissant pour le 1er tableau \n");
    je ne vais pas plus loin.

    La moindre des choses pour un problème comme celui-ci est d'inclure une fonction de tri.

  9. #8
    fred1599

    Re : [C] Tri et fusion de tableaux

    @whoami

    +1, c'est le minimum, seulement il n'a pas le droit aux fonctions c'est du travail à l'arrache, je cautionne pas du tout!

  10. #9
    whoami

    Re : [C] Tri et fusion de tableaux

    Bonjour,

    Un prof de plus à jeter.

    Heureusement qu'ils sont quand même relativement rares.

  11. #10
    mimow

    Re : [C] Tri et fusion de tableaux

    Citation Envoyé par Chanur Voir le message
    Bonjour,
    Quand tu dis :
    il y a une différence entre mettre le t++ dans chaque if et ce que tu as écrit : rien n'empêche de passer pas plusieurs des if (puisqu'on modifie soit i, soit j, chaque if peut modifier le résultat du suivant). Il faudrait mettre "else if" :
    Merci, ton message m'a exactement corrigé et a expliqué mon erreur, j'avais totalement oublié ça :/ .

    Citation Envoyé par Chanur Voir le message
    Tu (ou ton prof) aurais du le tester pas par pas avec un debugger ...
    Comment procéder pour ça ?

    Citation Envoyé par whoami Voir le message
    Bonjour,

    Déjà, quand je vois
    Code:
        printf("Entrez des valeurs triées a l'ordre croissant pour le 1er tableau \n");
    je ne vais pas plus loin.

    La moindre des choses pour un problème comme celui-ci est d'inclure une fonction de tri.
    Oui c'est vrai que quand je lis sur les fonctions dans les tuto je me dis qu'on perd beaucoup de temps pour des détails comme ça en classe ^^ je ne sais pas si c'est le prof qui est a jeter ou notre programme ( je suis au Maroc pas en France ) et je ne sais pas s'ils sont autorisé a nous enseigner les fonctions des le début mais ca serait bien plus intelligent de le faire xD .

    Je voudrai vous demander, ou pourrai-je trouver des problèmes / exercices sur les tableaux et tout ?
    Dernière modification par mimow ; 24/01/2013 à 20h37. Motif: erreur de citation

  12. #11
    Chanur

    Re : [C] Tri et fusion de tableaux

    Citation Envoyé par mimow Voir le message
    Citation Envoyé par Chanur Voir le message
    Tu (ou ton prof) aurais du le tester pas par pas avec un debugger ...
    Comment procéder pour ça ?
    La plupart (ou même tous ?) les compilateurs sont fournis avec un debugger.
    Tu utilises quoi comme compilateur ?
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

  13. #12
    mimow

    Re : [C] Tri et fusion de tableaux

    J'utilise Codeblocks, et oui il contient un débugger, seulement on n'a JAMAIS utilisé / parlé de ça en classe, ni sur le siteduzero aussi, du coup je ne l'ai jamais utilisé non plus

  14. #13
    Jack
    Modérateur

    Re : [C] Tri et fusion de tableaux

    ni sur le siteduzero
    Encore faut-il chercher ...

    http://www.siteduzero.com/informatiq...ec-code-blocks

Discussions similaires

  1. Pétrin boulangerie 380v tri 50hz à 220v tri 60hz
    Par invite18e96374 dans le forum Bricolage et décoration
    Réponses: 22
    Dernier message: 31/10/2017, 08h00
  2. Réponses: 3
    Dernier message: 01/11/2012, 16h48
  3. Code source d'un tri Fusion en Langage C
    Par invitefe71e0cf dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 23/05/2012, 10h02
  4. fusion des deux tableaux tries
    Par invitee2f3230c dans le forum Logiciel - Software - Open Source
    Réponses: 7
    Dernier message: 18/03/2009, 08h27
  5. Réponses: 8
    Dernier message: 20/12/2008, 07h36