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 :

Probleme tri a bulles avec pointeurs


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    etudiant
    Inscrit en
    Novembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Probleme tri a bulles avec pointeurs
    Salut à tous le monde,
    j'ai fait des algos de tri ( bulles , insertion , selection , qsort , shell )
    mais avec des indices etc... sans pointeur , mais maintenant je veux bien faire tous ces tris avec les pointeurs ,
    j'ai fait ce code la , certes il compile mais il ne fait pas son travail :/
    je sais pas ou j'ai fait l'erreur :/
    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
    #include <stdio.h>
    #include <stdlib.h>
     
     
    void remp (int tab[] , int n)
    {
     
        int *p;
        for(p=tab;p-tab<n;p++)
        {
            printf("T[%d] = ",p-tab);
            scanf("%d",p);
        }
     
     
    }
     
     
    int main()
    {
    int n,temp;
     
    int tab ;
     
    int *p;
     
    int *pt;
     
    *p==NULL;
    *pt==NULL;
    p=tab;
    pt=tab;
    printf("enter taille du tab : ");
    scanf("%d",&n);
     
    tab=(int*)malloc(n*sizeof(int));
     
        remp(tab,n);
     
     
     
     
     
    for (p=n-1;p-tab>0;p--)
    {
        for(pt=0;pt-tab<p;pt++)
        if (*pt<*(pt+1))
        {
            temp=*pt;
            *pt=*(pt+1);
            *(pt+1)=temp;
        }
    }
     
     
     
    printf("le tableau apres tri : ");
    for (p=tab;p-tab<n;p++)
    printf("%d",*p);
     
     
    free(tab);
     
    return 0;
    }

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 296
    Points : 4 949
    Points
    4 949
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    Dans la fonction main(); tu initialises p=tab; puis tu alloues de la mémoire dans tab avec malloc();. Par la suite tu utilises p dans tes boucles. Malheureusement p ne pointe plus sur tab puisque tab à changé son adresse grâce, ou à cause selon, à malloc();.

    Je ne vois pas trop l'intérêt de déclarer p. Utilises simplement tab tout le long de la fonction main().

  3. #3
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Dans main()
    - p et pt ne sont pas initialisés et contiennent n'importe quoi. *p et *pt peuvent potentiellement accéder à une zone illégale.
    - De toute façon, on compare n'importe quoi avec NULL (== est un opérateur de comparaison) et on ne fait rien du résultat de la comparaison.
    - De plus, on compare *p et *pt qui sont des int avec NULL qui est un pointeur void* ce qui n'a de toute façon pas de sens
    - A supprimer
    - n'a pas de sens : p et pt sont des pointeurs (adresses) et tab est un int
    - A supprimer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab=(int*)malloc(n*sizeof(int));
    - Inutile en C de caster le retour de malloc() : la conversion d'un void* en un pointeur d'un autre type est implicite (au contraire du C++)
    - tab n'est pas un pointeur mais un int et cette ligne n'a pas de sens. On doit avoir int * tab=malloc(n*sizeof(int));.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (p=n-1;p-tab>0;p--)...
    - p est un pointeur et n un entier. A quoi rime p=n-1 ?

    etc.

Discussions similaires

  1. Réponses: 6
    Dernier message: 26/05/2007, 00h33
  2. Réponses: 2
    Dernier message: 11/04/2007, 22h34
  3. probleme avec pointeur et iterateur
    Par tcharles dans le forum C++
    Réponses: 11
    Dernier message: 26/11/2006, 23h59
  4. probleme sur une info bulle avec onMouseOver
    Par pouss dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 08/02/2006, 09h40
  5. probleme avec pointeurs de structures
    Par remi77 dans le forum C
    Réponses: 2
    Dernier message: 20/10/2003, 13h19

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