IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Problème avec un heapsort avec pointeur


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Problème avec un heapsort avec pointeur
    Bonjour à tous ,
    j'ai un problème avec le tri heap sort. Les fonctions encodages et affichages fonctionnent. Mais les fonctions paterner et tri, font crashé. si vous sauriez m'aidé.
    Mon but est de faire le heapsort avec des pointeurs.

    message erreur:
    Nom d’événement de problème: APPCRASH
    Nom de l’application: ---------------
    Version de l’application: 0.0.0.0
    Horodatage de l’application: 52f78a79
    Nom du module par défaut: ---------.exe
    Version du module par défaut: 0.0.0.0
    Horodateur du module par défaut: 52f78a79
    Code de l’exception: c0000005
    Décalage de l’exception: 00001546
    Version du système: 6.1.7601.2.1.0.256.48
    Identificateur de paramètres régionaux: 1036
    Information supplémentaire n°*1: 0a9e
    Information supplémentaire n°*2: 0a9e372d3b4ad19135b953a78882e789
    Information supplémentaire n°*3: 0a9e
    Information supplémentaire n°*4: 0a9e372d3b4ad19135b953a78882e789


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    #include <stdio.h>
    #include <stdlib.h>
     
    #define LIM 50
     
    int encod(int *);
    void affichage(int *,int );
     
    void paterner ( int **, int  );
    void triepi(int * ,int );
     
    int main()
    {
       int vec[LIM],j,n;
     
       do
       {
     
           do
           {
     
     
            printf ("\n|***********************************************************************|\n");
            printf ("|   saisir 1 pour encoder:                                              |\n");
            printf ("|   saisir 2 pour afficher                                              |\n");
            printf ("|   saisir 3 pour trier                                                 |\n");
            printf ("|   saisir 4 pour arreter le programme                                  |\n");
            printf ("|***********************************************************************|\n");
                fflush(stdin);
                scanf("%d",&n);
     
           }while (n<1&&n>=4);
     
           switch(n)
           {
           case 1:
              j=encod(&vec[0]);
            break;
           case 2:
     
               affichage(&vec[0], j);
            break;
           case 3:
     
               triepi(&vec[0],j);
     
            break;
           case 4:
            break;
           }
     
       }while (n!=4);
     
        return 0;
    }
     
     
     
     
    int encod(int *pvec)
    {
        int j,i;
     
        do
        {
            printf("saisir le nbombre de case \n");
            fflush (stdin);
            scanf("%d",&j);
        }while(j<1&&j>=50) ;
     
     
        for (i=0;i<j;i++)
        {
            printf("saisir un nombre dans case %d \n",i);
            scanf("%3d",& *pvec);
            pvec++;
            printf("\n");
        }
     
     
        return j;
    }
     
     
    void affichage(int *pvec,int j)
    {
        int i;
        i=0;
        for (i=0;i<j;i++)
        {
            printf(" %d",*pvec);
     
            pvec++;
        }
    }
     
     
     
    void paterner (int *pvec, int j )
    {
        int ipere,ifils,i,temp;
     
     
        i=j/2;
        ipere=j/2;
        ifils=ipere*2;
        temp=*pvec;
     
        while(ifils<=j)
        {
            if(ifils <j && *(pvec+ifils+1) >*(pvec+ifils))
            {
                ifils=ifils+1;
            }
     
            if(**(pvec+ifils)>temp)
            {
                *(pvec+ipere)=*(pvec+ifils);
                ipere=ifils;
                ifils=ipere*2;
            }
            else
            {
                ifils=j;
            }
        }
        *(pvec+ipere)=temp;
     
    }
     
     
    void triepi(int *pvec,int j)
    {
        int i;
        i=j/2;
     
        while(i>=0)
        {
            paterner(&pvec,j);
            i--;
        }
        i=j;
        while(i>=1)
        {
            *pvec=*(pvec+i);
            paterner(&pvec,i-1);
            i--;
        }
    }
    Dernière modification par Invité ; 09/02/2014 à 15h04. Motif: message erreur

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 838
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Celtes Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    #include <stdio.h>
    #include <stdlib.h>
    
    #define LIM 50
    
    int encod(int *);
    void affichage(int *,int );
    
    void paterner ( int **, int  );
    void triepi(int * ,int );
    
    int main()
    {
       int vec[LIM],j,n;
    
       do
       {
    
           do
           {
    
    
            printf ("\n|***********************************************************************|\n");
            printf ("|   saisir 1 pour encoder:                                              |\n");
            printf ("|   saisir 2 pour afficher                                              |\n");
            printf ("|   saisir 3 pour trier                                                 |\n");
            printf ("|   saisir 4 pour arreter le programme                                  |\n");
            printf ("|***********************************************************************|\n");
                fflush(stdin);            // On ne fflushe pas stdin (comportement au mieux inhibé et au pire indéterminé) - Tu dois savoir en permanence ce qu'il y a dans ton clavier et le purger après une saisie (en ayant supprimé tout ce qui dépasse) et non avant...
                scanf("%d",&n);
    
           }while (n<1&&n>=4);
    
           switch(n)
           {
           case 1:
              j=encod(&vec[0]);
            break;
           case 2:
    
               affichage(&vec[0], j);
            break;
           case 3:
    
               triepi(&vec[0] /* Ou bien vec tout simplement */, j);
    
            break;
           case 4:
            break;
           }
    
       }while (n!=4);
    
        return 0;
    }
    
    
    
    
    int encod(int *pvec)
    {
        int j,i;
    
        do
        {
            printf("saisir le nbombre de case \n");
            fflush(stdin);             // Pareil
            scanf("%d",&j);
        }while(j<1&&j>=50) ;
    
    
        for (i=0;i<j;i++)
        {
            printf("saisir un nombre dans case %d \n",i);
            scanf("%3d",& *pvec);     // &*x == x
            pvec++;
            printf("\n");
        }
    
    
        return j;
    }
    
    
    void affichage(int *pvec,int j)
    {
        int i;
        i=0;
        for (i=0;i<j;i++)
        {
            printf(" %d",*pvec);
    
            pvec++;
        }
    }
    
    
    
    void paterner (int *pvec, int j )
    {
        int ipere,ifils,i,temp;
    
    
        i=j/2;
        ipere=j/2;
        ifils=ipere*2;
        temp=*pvec;
    
        while(ifils<=j)
        {
            if(ifils <j && *(pvec+ifils+1) >*(pvec+ifils))      // Utiliser *(pt+x) au lieu de pt[x] n'apporte aucune amélioration - L'optimisation se fait par un pointeur temporaire (comme tu l'as fait dans affichage)...
            {
                ifils=ifils+1;
            }
    
            if(**(pvec+ifils)>temp)   // Si pvec est un "int *", **pvec est indéterminé
            {
                *(pvec+ipere)=*(pvec+ifils);     // Pareil
                ipere=ifils;
                ifils=ipere*2;
            }
            else
            {
                ifils=j;
            }
        }
        *(pvec+ipere)=temp;    // Pareil
    
    }
    
    
    void triepi(int *pvec,int j)
    {
        int i;
        i=j/2;
    
        while(i>=0)
        {
            paterner(&pvec    /* Ce paramètre n'est pas du type attendu par la fonction */,j);
            i--;
        }
        i=j;
        while(i>=1)
        {
            *pvec=*(pvec+i);
            paterner(&pvec,i-1);
            i--;
        }
    }
    Bonjour

    Mes remarques en rouge dans ton code. Le souci ne vient certainement pas de ces erreurs mais çelles-ci ne lui font pas du bien...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Invité
    Invité(e)
    Par défaut
    pour les fflush , les passage des vecteur par indices , ça nous est demandè :/
    pour les deux autres remarques en effet , j'ai fait des erreurs ( flagrantes). j'ai refait un code et l'ai réussi , merci de ton aide

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 838
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Celtes Voir le message
    pour les fflush , les passage des vecteur par indices , ça nous est demandè :/
    Je me demande quel ignorant peut t'avoir demandé ça => http://c.developpez.com/faq/?page=cl...S_fflush_stdin...

    Enfin j'ai connu un prof qui était persuadé d'avoir toujours raison et qui sacquait les élèves qui lui prouvaient ses torts (un prof d'algo de l'ESAT à Rennes pour ceux qui connaissent) alors tu ne dis rien et tu obéis. Plus tard tu reviendras ici apprendre comment bien faire les choses...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Invité
    Invité(e)
    Par défaut
    Celui aui cote a toujours raisons ;-) enfin merci

Discussions similaires

  1. [WD16] Problème d'un btach avec 1 projet avec plusieurs biblio
    Par law56100 dans le forum WinDev
    Réponses: 3
    Dernier message: 11/01/2013, 21h11
  2. Problème avec les tableaux de pointeurs
    Par TheDoci dans le forum C
    Réponses: 2
    Dernier message: 07/01/2007, 13h04
  3. Réponses: 4
    Dernier message: 15/10/2006, 18h05
  4. Problème à l'exécution avec wxWindows (compilé avec BCC55)
    Par ShootDX dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 14/11/2003, 18h04
  5. problème de capture son avec Directshow
    Par albator83 dans le forum DirectX
    Réponses: 2
    Dernier message: 06/11/2003, 17h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo