Partage
  • Partager sur Facebook
  • Partager sur Twitter

heap sorts probleme

    23 mars 2018 à 0:11:40

    bonjour, je ne comprend pas ou je fais une erreur dans mon heapsort mon res afficher est totalement faux quelqu'un saurait me dire ou je fais une faute 
    #include <stdio.h>
    #include <stdlib.h>
    void fencodage(float*,int);
    void faffichage(float*,int);
    void fHeapSort(float*,int);
    void fPaterner(float*,int,int);
    
    
    int main()
    {
    
        float vec[100];
        float *pvec=&vec[0];
        int nbl,Menu,i;
        i=0;
        while(i!=1)
        {
            printf(" \n  ====MENU==== \n 1. Choisir la taille de votre vec \n 2. Encoder votre vec \n 3. Afficher le vec \n 4. Heap Sort \n 5. Faire tout le programme \n 6. Quittez le programme \n");
            fflush(stdin);
            scanf("%d",&Menu);
    
            system("cls");
    
            switch(Menu)
            {
    
            case 1:
                printf("entrez la taille de votre vec : ");
                fflush(stdin);
                scanf("%d",&nbl);
                break;
    
            case 2 :
                fencodage(pvec, nbl);
    
                break;
    
            case 3 :
                faffichage(pvec, nbl);
    
                break;
    
            case 4 :
                fHeapSort(pvec, nbl);
    
    
                break;
    
            case 5 :
                printf("entrez la taille de votre vec : ");
                fflush(stdin);
                scanf("%d",&nbl);
                fencodage(pvec, nbl);
                faffichage(pvec, nbl);
                fHeapSort(pvec, nbl);
                faffichage(pvec, nbl);
                break;
    
            case 6 :
                i=1;
                break;
            };
    
        }
    
        return 0;
    }
    
    void fencodage(float *pvec,int nbl)
    {
        int i;
    
        printf("encodage Vec : \n");
    
        i=0;
    
        do
        {
            printf("entrez un nombre : ");
            fflush(stdin);
            scanf("%f",(pvec+i));
            i++;
        }while(i<nbl);
    }
    
    void faffichage(float *pvec,int nbl)
    {
        int i;
    
        printf("affichage Vec : \n  ");
    
        i=0;
    
        do
        {
            printf("%f   ", *(pvec+i));
            i++;
        }while(i<nbl);
    }
    
    void fHeapSort(float *pvec,int nbl)
    {
        int nbl2,idp,ipf,x;
        float temp;
    
    
        nbl2=nbl;
        idp=nbl/2-1;
        ipf=idp*2+1;
        temp=0;
    
        x=idp;
    
        while(x>0)// creation de l'arbre
        {
            fPaterner(pvec,nbl,x);
            x--;
        }
    
        while(nbl2>0)
        {
            temp=*(pvec+nbl2-1);
            *(pvec+nbl2-1)=*pvec;
            *pvec=temp;
            nbl2--;
    
            fPaterner(pvec,nbl2,0);
        }
       faffichage(pvec, nbl);
    }
    
    void fPaterner(float *pvec,int nbl,int x)
    {
        int PF,DF,idp;
        float F1,F2,temp,temp2;
    
        PF=x*2+1;
        DF=x*2+1+1;
        idp=nbl/2-1;
        temp=0;
        temp2=0;
    
        while(x<=idp)
        {
            temp=0;
            temp2=0;
    
            if(DF<nbl)
            {
                if(*pvec+(x*2+1+1)>*pvec+(x*2+1))
                {
                    temp=DF;
                }
                else
                {
                    temp=PF;
                }
            }
            else
            {
                temp=PF;
            }
    
        if(*pvec+(temp)>*pvec+(x))
             {
                 temp2=*pvec+(x);
                 x=*pvec+(temp);
                 temp=temp2;
             }
             x=temp;
        }
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
      23 mars 2018 à 10:07:47

      Tu utilises mal ton tableau pvec dans fPaterner. Il faut des parenthèses : *pvec+(x*2+1+1) => *(pvec+(x*2+1+1)) et dans toutes les autres expression ! ;) Tu pourrais utiliser des crochets aussi, c'est plus compréhensible ! ;)
      • Partager sur Facebook
      • Partager sur Twitter
        23 mars 2018 à 10:10:55

        donc dans toute ma fonction paterner je dois modifier ceci ?

        pvec+(x*2+1+1) => *(pvec+(x*2+1+1))

        • Partager sur Facebook
        • Partager sur Twitter
          23 mars 2018 à 10:19:46

          Bonjour,

          @LoïcPinet : Merci de lire et respecter les règles du forum. Par exemple :

          • Inutile de poster 3 fois la même question ... Tu peux tout à fait éditer ton message de départ ou poster une réponse plus détaillée
          • Dommage de mettre un sujet "Résolu" sans préciser la solution trouvée, ce n'est pas l'esprit de partage de cette communauté ...
          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            23 mars 2018 à 10:45:31

            Et pour le problème que je ne rentre pas dans heapsort tu sais pas ?
            • Partager sur Facebook
            • Partager sur Twitter

            heap sorts probleme

            × 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