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 :

tableau de pointeurs qui pointe vers un tableau de structure


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 6
    Points : 3
    Points
    3
    Par défaut tableau de pointeurs qui pointe vers un tableau de structure
    Bonjour à toutes et à tous.

    Dans le cadre d'un exercice en C, je cherche à trier un tableau de structure:

    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
    typedef struct{
    char *numDossard;
    char *nom;
    char *prenom;
    int age;
    float note;
    }SKIEUR;
     
     
    SKIEUR ts[]={
    {"1515X","Zagoridis","Constantin",68,12.5},
    {"1984B","Dambakizi","Apolinaire",45,8.25},
    {"1789H", "Weisnerger","Aristide",18,11.75},
    {"1793Q","Bianchini","Dominique",78,7.5},
    {"1968R","Younsi","Abdelkader",14,8.25},
    {"1418K","Thalabarski","Igor",71,12.5},
    {"1111C","Dupont","Marcel",73,13},
    {"9969Z","Bianchini","Ange",81,7.5},
    {"2362H","Tomasini","Dominque",27,17.5}
    };
    En fonction d'un critere choisi (nom, age etc). La condition imposée est de ne pas trier le tableau de structure mais de trier un tableau de pointeurs qui pointent vers les lignes du tableau.
    J'ai donc créé un tableau de pointeurs du type de ma structure.
    SKIEUR *indice [9];
    Maintenant il faut que j'indique au tableau de pointeurs qu'il pointe vers mon tableau de skieurs... Et la c'est le drame... Je tourne en rond...
    Quelq'un aurait une petite idée?
    Je vous remercie.
    Pardonnez mes tournures de phrases... je débute en c et je ne suis pas du metier.
    Bonne journée,

  2. #2
    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
    Il faut remplir le tableau de pointeurs par l'adresse de chaque structure du tableau ts
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #define NBSKIEUR 9
    SKIEUR *indice [NBSKIEUR ];
     
    for(i =0; i< NBSKIEUR; i++) indice[i] = ts+i;
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2007
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 178
    Points : 451
    Points
    451
    Par défaut
    Bonjour
    Citation Envoyé par NVRO123 Voir le message
    Maintenant il faut que j'indique au tableau de pointeurs qu'il pointe vers mon tableau de skieurs... Et la c'est le drame... Je tourne en rond...
    Je suis pas tout à fait sûr d'avoir compris, mais le but c'est justement de ne pas pointer vers le tableau mais vers les valeurs de chacune des lignes, non?

    Après si tu débutes c'est peut être un problème de notation, au cas où :

    edit : ah, Diogene a été plus rapide (et sûrement plus efficace)

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci pour vos reponses rapides.
    J'espere pouvoir un jour contribuer moi aussi et aider les personnes qui comme moi se cassent le dents sur le C.
    effectivement il s'agissait d'une erreur de notation.
    Par contre je rencontre d'autres soucis à la manipulation:

    J'ai fait un tri que j'ai testé sur un tableau de int et qui marche.
    J'ai ensuite appliqué le tri sur mon tableau de pointeurs qui teste la valeur age

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for(i = 0; i < 8; i++){
     
    int im=i;
    for(j = i + 1; j < 9; j++){
    if((*indice[j]).age <(*indice[im]).age)
    {im=j;}
    }
    SKIEUR* tmp1 = indice[i];
    indice[i] = indice[im];
    indice[im] = tmp1;
     
     
    }
    J'ai pas d'erreur de compilation. Mais à l'édition par un scanf:
    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
        for(i = 0; i < 8; i++){
     
                    int im=i;
                    for(j = i + 1; j < 9; j++){
                                   if((*indice[j]).age <(*indice[im]).age)
                                   {im=j;}
                    }
                                                SKIEUR* tmp1 = indice[i];
                                                   indice[i] = indice[im];
                                                   indice[im] = tmp1;
     
     
                }
    for (i=0;i<9;i++)
       {
     
     
       printf("num dossard: %s\n nom skieur:%s %s\n  age:%d\n note:%f\n " ,(*indice[i]).numDossard,(*indice[i]).nom,(*indice[i]).prenom,(*indice)[i].age,(*indice[i]).note);
     
     
       }
    le tableau sort mal. Je dois faire une erreur de manipulation de variables.
    Je vous remercie.
    Bonne journée,

  5. #5
    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
    Il y a une erreur ici :
    printf("num dossard: %s\n nom skieur:%s %s\n age:%d\n note:%f\n " ,(*indice[i]).numDossard,(*indice[i]).nom,(*indice[i]).prenom,(*indice)[i].age,(*indice[i]).note);
    Pourquoi parles-tu de scanf() ? il n'y en a pas dans le code montré.

    Fais un effort dans la présentation du code : c'est pénible cette indentation aléatoire et ces lignes vides inutiles qui désarticule le code.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci diogene
    Il s'agissait encore d'une erreur de saisie.... Certaines choses ne me choquent pas encore meme apres avoir pris un peu de recul. Manque de maitrise...
    Pour le scanf:Mon esprit égaré c'est trompé je pensait à un printf...
    Effectivement j'ai des gros reflexes à prendre en matiere de presentation de code.

    La marche des vertueux est semée d’obstacles qui sont les entreprises égoïstes que fait sans fin, surgir l’œuvre du malin...
    Bonne soirée,

Discussions similaires

  1. Ancre qui redirige vers un tableau
    Par X260SH dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 14/01/2013, 11h47
  2. Champ d'un tableau qui pointe vers une structure
    Par Almenor dans le forum Débuter
    Réponses: 3
    Dernier message: 23/05/2012, 09h04
  3. Tableau de pointeurs qui change
    Par phantomlibre dans le forum Débuter
    Réponses: 11
    Dernier message: 03/12/2011, 19h25
  4. bouton qui pointe vers une page jsp
    Par redabadache3 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 29/10/2007, 14h33
  5. [j3d] afficher une ligne qui point vers un objet
    Par guitalca dans le forum 3D
    Réponses: 1
    Dernier message: 06/03/2006, 21h44

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