Bonjour à tous,
Ça fait deux jours que je suis bloquée : J'ai une fonction qui lit le contenu d'un tableau rempli de structure de MotCompact(structure de donnée) et de les mettre dans une table de hachage de structure. En fait après remplissage de la table j'étais surprise qu'il manque deux éléments qui n'ont pas été dans la table de hachage. Je vois pas pourquoi franchement.c'est pour ça je m'adresse et à vos compétences .Merci d'avoir pri la peine de m'aider
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
void RemplirTableHachageMots(MotCompact const pcMots[], struct  TableHachage_BiSequence * THash,size_t nbMot)
{
 
    size_t iMot;
    size_t jMot;
    FILE *pfOut;
    pfOut = fopen("mot.txt", "w");
    if (pfOut!=NULL)
    {
        // parcourir le tableau MotCompact pour faire toute les association possible
        // Parcours quadratique
        for (iMot=0 ; iMot < nbMot ; iMot++)
        {
            for ( jMot = 0 ; jMot < nbMot ; jMot++ )
            {
                fprintf(pfOut,"%s\n",GetMotCompact(pcMots+iMot));
                TableHachage_BiSequence_ajouter_mots(THash, pcMots+iMot, pcMots+jMot);
            }
        }
    }
    fclose(pfOut);
}
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
int TableHachage_BiSequence_ajouter_mots(struct TableHachage_BiSequence *pThis, const MotCompact* pNouveauMotG, const MotCompact* pNouveauMotD)
{
    const char* motG = GetMotCompact(pNouveauMotG);
    const char* motD = GetMotCompact(pNouveauMotD);
    char* seqSim = NULL;
    size_t nbLettersEnsemble = strlen(motG) + strlen(motD) + 2;	// + 2 car il nous faut un espace et un '\0'
    unsigned int cle = 0;
 
    seqSim = malloc(nbLettersEnsemble * sizeof(char));
    if ( seqSim == NULL )
    {
        printf("Problème allocation mémoire dans TableHachage_BiSequence_ajouter_mots\n");
        return -1;
    }
 
    // Reconstruction de la séquence à partir de deux mots
    strcpy(seqSim, motG);
    strcat(seqSim, " ");
    strcat(seqSim, motD);
    cle = hash_chaine(seqSim);
 
    // Grace à la clé nous avons la BiSequence correspondante, donc nous remplissons la structure avec les mots
    // Comme nous avons une tablea de hachage qui contient des tableaux dynamique, le premier élément n'est peut être pas le bon
    // Nous parcourons le tableau pour savoir
 
    struct BiSequence * pSeq = RechercherMot(pThis->seaux[cle].tab, pThis->seaux[cle].taille, seqSim);
 
    if (pSeq!=NULL)
    {
 
        pSeq->MotGauche = pNouveauMotG;
        pSeq->MotDroit = pNouveauMotD;
        //  printf("La sequence n'a pas ete trouve\n");
 
    }
 
    free (seqSim);
 
    return 0;
}