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 :

les tableaux dynamiques


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 les tableaux dynamiques
    bonjour à tous,
    J'ai une question à proppos des tableaux dynamiques:
    J'ai crée une tableau de hachage où j'ai stockes des paires de mots à partir d'un fichier texte lu, et là on me conseille de faire des tableau dynamiques pour cette table de hachage ou je vais stocker des pointeurs de structures de mots.
    Là franchement je vois pas pourkoi des tableau et pourquoi pas un seul tableau dynamiques .
    merci

  2. #2
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 26
    Par défaut
    Si je comprends bien, c'est le problème de conflits de hachage: la fonctionne de hachage peut retourner le même résultat pour deux mots différents. Donc dans ton tableau pour chacun 'hash' tu stockes plusieurs paires de mots et quand on cherche la valeur pour une clé, il faut que tu vérifie tous les pairs stockées pour son 'hash'.

  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 tableau de structure dynamique
    Re,
    Là j'ai creé un tableau dynamique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct tableauDynamique_struct
    {
    	int *tab;
    	size_t taille;
    	size_t capacite;
    };
    où je vais stocker la listes de structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct  Dsequence
    {
    MotCompact *p2seq;
    MotCompact *pMotGauche;
     MotCompact *pMotDroit;
    };
    je trouve un probleme dans l'operation du remplissage du tableau :
    en fait je parcours la table de hachage qui contient des paires de mots et là je dois remplir la structure par ces paire de mots
    voilà la fonction où je bloque qui ajoute un element au tableau dynamique
    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
    int TableauDynamique_struct_ajouter(struct tableauDynamique_int *pThis,char *seq,char *pMotGauche,char *pMotDroit))
    {
    	assert(pThis->taille <= pThis->capacite);
     
    	/* Agrandir le tableau si besoin est. */
    	if(pThis->taille == pThis->capacite)
    	{
    		size_t nouvelleCapacite = (pThis->capacite < 4 ? 4 : (size_t)(pThis->capacite*1.5));
    		if(realloc_int(&pThis->tab, nouvelleCapacite) >= 0)
    		{
    			pThis->capacite = nouvelleCapacite;
    		}
    		else
    			return -1;
     
    	}
     
    	/* ajouter */
    	pThis->tab[ pThis->taille++ ] = nouvelleValeur;
    	return 0;
    }
    pour ajouter je vois pas quoi faire?
    des idées svp?
    merci

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 074
    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 074
    Billets dans le blog
    145
    Par défaut
    Bonjour,

    Pour le fonction d'ajout, il y a deux manières de voir la chose.

    Une que je dirai de dangereuse, qui serai de remplir une structure avec directement les pointeurs qui sont passer à la fonction:
    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
     
    int TableauDynamique_struct_ajouter(struct tableauDynamique_int *pThis,char *seq,char *pMotGauche,char *pMotDroit))
    {
         // ...
     
         /* ajouter */
         {
              Dsequence ds;
              ds.p2seq = seq;
              ds.pMotGauche = pMotGauche;
              ds.pMotDroit = pMotDroit;
     
             pThis->tab[ pThis->taille++ ] = ds;
         }
    }
    Sinon, avec une gestion de la mémoire moins risqué, mais qui prend un peu de temps, et qui faut faire aussi très attention à la libération:

    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
     
    int TableauDynamique_struct_ajouter(struct tableauDynamique_int *pThis,char *seq,char *pMotGauche,char *pMotDroit))
    {
         // ...
     
         /* ajouter */
         {
              Dsequence ds;
              ds.p2seq = malloc ( strlen(seq) * sizeof(char) );
              if ( ds.p2seq == NULL )
             {
                      return -1;
             }
             strcmp(ds.p2seq, p2seq);
     
              ds.pMotGauche = malloc ( strlen(pMotGauche) * sizeof(char) );
              if ( ds.pMotGauche == NULL )
             {
                      return -1;
             }
             strcmp(ds.pMotGauche, pMotGauche);
     
              ds.pMotDroit = malloc ( strlen(pMotDroit) * sizeof(char) );
              if ( ds.pMotDroit == NULL )
             {
                      return -1;
             }
             strcmp(ds.pMotDroit, pMotDroit);
     
             pThis->tab[ pThis->taille++ ] = ds;
         }
    }
    Sinon, AndreiS a soulevé un bon point, qu'il ne faut pas oublier dans les table de hachage. Lorsque l'on tombe sur deux mêmes clés, il faut garder les deux valeurs pour cette clé ( utilisation d'une liste chainée de préférence ).
    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 é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
    Re,
    Là on ma dit qu'il faut plusieurs tableau dynamiques, parce que c'est sur ça que repose une table de hachage: Elle sert à répartir les données sur différents conteneurs de même type, pour accélérer la recherche.

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    attention étoile de mer, "tab" n'a pas le bon type ici.
    Il faut un pointeur de struct Dsequence, pas un pointeur de int...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. [Langage] Probleme avec les tableaux dynamiques
    Par wawa84 dans le forum Langage
    Réponses: 7
    Dernier message: 19/11/2008, 17h18
  2. Les types composites et les tableaux dynamiques
    Par pierre_luvier dans le forum SQL
    Réponses: 4
    Dernier message: 03/11/2007, 11h33
  3. Panique avec les Tableaux dynamiques
    Par Swiper dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 27/06/2007, 15h52
  4. Réponses: 12
    Dernier message: 17/12/2006, 11h46
  5. Article sur les tableaux dynamiques
    Par Eric Sigoillot dans le forum Langage
    Réponses: 2
    Dernier message: 16/04/2004, 22h00

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