Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème dans mon heap sorts

23 mars 2018 à 10:03:42

Bonjour a tous, je viens vers vous car j'ai deux problèmes dans mon heap sorts et je ne vois pas d'où viens les soucis.

Le premier c'est que quand je lance mon programme ma fonction heapsorts ne ce lance pas. donc j'ai essayé avec un point d'arrêt ou la sa fonctionne. Pourquoi ? 

la second c'est que quand j'arrive a le lancer mon vec n'est pas du tout correct des chiffre ce modifie et le vec n'est pas ranger :/. 

D'où viennes les problème ?

voici mon code ; 

#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;
}

//I:je lui passe la debut du vec et le nombre de case 
//P:La fonction enCode les case du vec, je remplie mon vecteur 
//O:
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);
}
//I:je lui passe la debut du vec et le nombre de case 
//P:La fonction affiche le vecteur 
//O:
void faffichage(float *pvec,int nbl)
{
    int i;

    printf("affichage Vec : \n  ");

    i=0;

    do
    {
        printf("%f   ", *(pvec+i));
        i++;
    }while(i<nbl);
}
//I:je lui passe la debut du vec et le nombre de case 
//P:La fonction trie le vecteur du plus plus petit au plus grand. 
//O:
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);
}
//I:je lui passe la debut du vec et le nombre de case et je lui donne x qui est idp:dernier père 
//P:La fonction compare les deux fils si il y en a deux et ensuite compare avec le père le plus grand des deux fils et les permute si fils > que père 
//O:
void fPaterner(float *pvec,int nbl,int x)
{
    int PF,DF,idp,temp,temp2;;
    float F1,F2;

    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);
                *(pvec+x)=*(pvec+temp);
                *(pvec+temp)=temp2;
         }
         x=temp;
    }
}



  • Partager sur Facebook
  • Partager sur Twitter
23 mars 2018 à 10:16:59

Bonjour,

Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention plus facilement.
Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

Pour plus d'informations, nous vous invitons à lire les règles générales du forum

Doublon

Ce sujet est un doublon ...

Je vous invite à continuer la discussion sur l'autre sujet : https://openclassrooms.com/forum/sujet/heap-sorts-probleme?page=1#message-92279622

Je ferme ce sujet. Me contacter par MP si besoin.

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL