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 :

créer un tableau à partir d'une table de hachage


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Par défaut créer un tableau à partir d'une table de hachage
    bonjour à tous,
    j'ai un mot de type Chainon mot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    typedef struct st_chainonMot ChainonMot;
     
    typedef struct st_liste
    {
    	ChainonMot *pPremier;
    } ListeMot;
     
    typedef ListeMot TableHachageMot[TAILLEHASH];
    ce mot contient une liste des coordonnées (numeros le lignes où il apparait)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct st_chainonCoord ChainonCoord;
     
    typedef struct st_listeCoord
    {
    	ChainonCoord *pPremiere;
    } ListeCoord;
    Mon probleme c'est que j'aime créer un tableau de MotCompact à partir d'une table de hachage
    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
    int * CreerTableauLigne(ChainonMot const*pc,size_t taille)
    {
     
        ChainonCoord  const *pcCoord;
        int * tableauLigne=malloc(taille*sizeof(int));
        if(tableauLigne!=NULL)
        {
            size_t i=0;
     
                int annex=-1;
                for(pcCoord=coord_GetPremierC(GetPtrCoordC(pc));pcCoord!=NULL;pcCoord=ptr_GetNextC(pc))
                {
                    if(GetLigne(pc)!=annex)
                    {
                       tableauLigne[i]=GetLigne(pcCoord);
                        annex=GetLigne(pcCoord);
                        i++;
                    }
                }
     
        }
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    MotCompact* InitialiserMotCompact(ChainonMot* p,size_t  taille)
    {
        MotCompact* MC;
        MC->sczMot=GetMot(p);
        MC->pLignes=CreerTableauLigne(p,taille);
     
    }
    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
    MotCompact* CreerTableMotsCompacts(size_t n,TableHachageMot *DblTableHash1fr)
    {
        MotCompact  *pRet=malloc( TAILLEHASH * TAILLEHASH *sizeof(MotCompact));
        int i=0,j,k;
        if(pRet!=NULL)
        {
            for(j=0;j<TAILLEHASH;j++)
            {
                for(k=0;k<TAILLEHASH;k++)
                {
                    pRet[i]=InitialiserMotCompact(DblTableHash1fr[j][k],n);
                    i++;
                }
             }
        }
        return  pRet;
    }

    dans la ligne en gras ya 2erreurs:
    erreur: incompatible type for argument 1 of ‘InitialiserMotCompact’|
    erreur: incompatible types in assignment|
    des idées svp?
    merci

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 141
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    Il y a une petite incohérence dans le code:

    Nous avons:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TableHachageMot *DblTableHash1fr
    Qui est donc un pointeur sur TableHachageMot. On peut aussi pensé que c'est un tableau à une dimension (ça doit en être un ).

    Mais lors de l'appel à InitialiserMotCompact, nous essayons d'utiliser le DblTableHash1fr, comme si c'était un tableau à double dimension ( du coup le compilateur râle ).

    Comme InitialiserMotCompact accepte un pointeur sur un ChainonMot, il faudra plus ecrire quelque chose de ce genre ->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pRet[i]=InitialiserMotCompact(DblTableHash1fr[k].pPremier,n);
    Mais du coup, il y a un des deux for, qui pourrait s'avérer inutile.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre éclairé Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Par défaut
    Merci LittleWhite,
    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
    MotCompact* CreerTableMotsCompacts(size_t n,TableHachageMot *DblTableHash1fr)
    {
        MotCompact  *pRet=malloc( TAILLEHASH * TAILLEHASH *sizeof(MotCompact));
        int i=0,j,k;
        if(pRet!=NULL)
        {
            for(j=0;j<TAILLEHASH;j++)
            {
                for(k=0;k<TAILLEHASH;k++)
                {
                    pRet[i]=InitialiserMotCompact(DblTableHash1fr[j][k].pPremier,n);
                    i++;
                }
             }
        }
        return  pRet;
    }
    il m'affiche une seule erreur :
    erreur: incompatible types in assignment|

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 141
    Billets dans le blog
    150
    Par défaut
    L'erreur vient du fait, que InitialiserMotCompact retourne un MotCompact* alors que l'on essaie d'écrire dans un MotCompact.
    pRet[i] -> est un MotCompact
    pRet -> est un MotCompact* .

    Du coup, je propose en solution de déclaré pRet comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MotCompact **pRet=malloc( TAILLEHASH * TAILLEHASH *sizeof(MotCompact*));
    Ce qui donne un tableau de pointeur de MotCompact.

    Par contre, il faut aussi modifier le type de retour de CreerTableMotsCompacts()
    Et je ne sais toujours pas si ce que je dis est une solution correcte
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Il faut que tu modifies ta fonction aussi, tu déclares un pointeur sur MC mais tu n'alloues pas de mémoire. Et juste après tu tentes d'accéder à MC->XXX :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    MotCompact* InitialiserMotCompact(ChainonMot* p,size_t  taille)
    {
        MotCompact* MC;
        MC->sczMot=GetMot(p);
        MC->pLignes=CreerTableauLigne(p,taille);
     
    }

  6. #6
    Membre éclairé Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Par défaut
    Merci Pouet,
    voilà c'est fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    MotCompact* InitialiserMotCompact(ChainonMot* p,size_t  taille)
    {
        MotCompact* MC = malloc(sizeof(MotCompact));
        MC->sczMot=GetMot(p);
        MC->pLignes=CreerTableauLigne(p,taille);
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Créer un tableau à partir d'une base de données
    Par barakobama95 dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 30/09/2013, 16h58
  2. Créer un array à partir d'une table
    Par FanFan44 dans le forum Débutez
    Réponses: 4
    Dernier message: 14/06/2013, 17h50
  3. [MySQL] Créer un tableau à partir d'une requete SQL
    Par extream dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 02/06/2013, 20h11
  4. Réponses: 1
    Dernier message: 17/04/2013, 20h00
  5. [MySQL] créer un tableau à partir d'une base de donnée
    Par bastien dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 21/01/2009, 15h03

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