Accueil > Forum > > > > Table de hachage avec patronyme
Table de hachage avec patronyme
mardi 4 décembre 2007 à 15:52:01 |
Table de hachage avec patronyme

guitoontruant
|
B onjour,
Désolé, j'avais d'abord poster dans les discussions libres.
Voilà je dois créer une table de
hashage de patronymes par le biais de N entrées, par exemple 20, de
pointeurs vers des chaines de caracteres. L'utilisateur est invité de
manière répétitive à choisir une commande parmi insérer, rechercher,
supprimer et fin. Les noms sont des suites de caractères minuscules
exclusivement.
La fonction de hashage calculera un indice dans
le tableau en formant la "somme" des caractères du noms sachant que "a"
vaut 1. Cette somme modulo N sera l'entrée utiliséee dans la table à
moins que celle-ci ne soit déjà occupé. Dans ce cas, on rehashe en
ajoutant 13 fois la valeur du premier caractère jusqu'à trouver une
entrée libre ou à abandonner au bout de 5 échecs.
Toutes les
opérations du programme sont imprimées au fur et à mesure de sorte que
l'on puisse par exemple apprendre que la 5e entrée est déjà occupée,
que le rehashage choisit ensuite la 3e qui est libre.
Souvenez-vous
que la suppression de noms du tableau a une incidence sur les conflits,
et donc les recherches des noms dans la tables entre autres.
J'ai
déjà écrit ceci mais mon compilation fon,ctionne mais dés que j'éxecute
aprész avoir insérer un nom j'ai comme message: "An unhandled win32
occured. Je travaille avec devcpp.
Que puis-je faire?
#include <stdlib.h> #include <string.h> #define N 20 char *T[N]; int i;
int inserer(char *s) { int compteur=0; int n=0; char temp; char s1; for(i=0;i<(strlen(s)-1);i++) { temp=s[i]; compteur=compteur +(temp-96); } while(n<5) { if(T[compteur%N]!=0) { temp=s[0]; compteur=compteur + 13*temp; n++; } else { s1=s[0]; *T[compteur%N]=s1; return 1; } } return 0; }
int rechercher(char *s) { for(i=0;i<N;i++) { if (*T[i]!=s[i]) return 0; else return 1; } }
int supprimer(char *s) { for(i=0;i<N;i++) { if(strcmp(T[i],s)!=0) return 0; else { T[i]=NULL; return 1; } } }
int main() { char *s,patro; int i; int choix; for(i=0; i<N; i++) /*initialisiation de T a 0*/ T[i]=0; for(i=0; i<N; i++) { printf("%s", T[i]); printf("\n"); } int bool=1; //booleen
while(bool) { printf("Entrez votre choix \n"); printf("1-Inserer \n"); printf("2-Rechercher \n"); printf("3-Supprimer \n"); printf("4-Fin du programme \n");
if(scanf("%d",&choix)==0) return EXIT_FAILURE;
switch(choix) { case 1: printf("Entrez un patronyme en minuscule\n"); if (scanf("%s",patro)==0) return EXIT_FAILURE; printf("Vous avez choisi la commande inserer \n"); *s=patro; if(inserer(s)==0) printf("Le patronyme n'a pu etre inserer \n"); else printf("Le patronyme a été inserer \n"); break;
case 2: printf("Entrez un patronyme en minuscule\n"); if (scanf("%s",patro)==0) return EXIT_FAILURE; *s=patro; printf("Vous avez choisi la commande rechercher \n"); if(rechercher(s)==0) printf("Le patronyme n'est pas présent dans le tableau \n"); else printf("Le patronyme est présent dans le tableau \n"); break;
case 3:
printf("Entrez un patronyme en minuscule\n"); if (scanf("%s",patro)==0) return EXIT_FAILURE; *s=patro; printf("Vous avez choisi la commande supprimer \n"); if(supprimer(s)==0) printf("Le patronyme ne fait pas partit du tableau et n'a donc pas pu etre supprimer \n"); else printf("Le patronyme a bien été supprimer avec succes \n"); break;
case 4:
printf("Vous avez choisi la commande fin \n"); bool=0; return EXIT_SUCCESS; break; default: printf("Vous n'avez pas choisi une commande valide \n"); printf("Veuillez refaire un choix \n"); printf("\n"); break;
} } return EXIT_SUCCESS; }
Je vous remercie d'avance.L'important, c'est les trois points...
|
|
mardi 4 décembre 2007 à 16:28:13 |
Re : Table de hachage avec patronyme

Pistol_Pete
|
Salut Il y a des erreurs de partout... -scanf attend l'adresse de la variable parto - char patro; ==> tu ne pourra stoker qu'un caractère dans ton patronime- *s=patro; faut faire un strcpy, mais je ne vois pas l'utilité de cette variable intermédiaire-Pour copier en générale deux chaines de caractère il faut que tu utilises strcpy. Sinon tu copies uniquement les pointeurs. Les deux chaine pointerons sur la meme zone et si tu fais une modif à l'une, les deux variables seront modifiées. Voila pour commencer, corrige toutes les erreurs et tient nous au courant si tu as besoin d'aide A+ Mon site internet : [ Lien ]
|
|
mardi 4 décembre 2007 à 16:51:04 |
Re : Table de hachage avec patronyme

guitoontruant
|
J'ai corigé en mettant char patro[20] et le scanf ("%s",&patro)
*s=patro, c'est pour que s pointe sur patro pour pouvoir utiliser les fonctions inserer, supprimer... aprés.
Apparemment j'aurai encore des problèmes avec les fonctions inserer supprimer et rechercher.
Si tu pouvais encore m'aider, ce serait super.
PS:Pete était le meilleur.
L'important, c'est les trois points...
|
|
mardi 4 décembre 2007 à 17:17:45 |
Re : Table de hachage avec patronyme

guitoontruant
|
J'ai trouvé l'erreur pour la fonction inserer.
Maintent sur rechercher je crois avoir un problème aussi:
int rechercher(char *s)
{
for(i=0;i<N;i++)
{
if (*T[i]!=s[i]) //il ne fait bien ce test
return 0;
else
return 1;
}
}
L'important, c'est les trois points...
|
|
mercredi 5 décembre 2007 à 09:57:25 |
Re : Table de hachage avec patronyme

Pistol_Pete
|
Réponse acceptée !
J'ai refait complètement la fonction inseré pour te montrer la manière de faire: Compare à ce que tu avais fait et essaye bien de comprendre comment ca marche. Une fois que tu auras compris le cheminement, tu n'auras aucun mal à faire les autres fonctions. #include <stdlib.h> #include <string.h> #include <stdio.h> #define N 20 char **T; int i;
int inserer(char *szNom) { char *P; int Hash=0,n=0;
P=szNom; //P pointe sur szNom while(*P != '\0') { Hash+= *P - 96; P++; } do { if(T[Hash%N]==0) //vide { T[Hash%N]=szNom; return 1; } else { Hash+=13*szNom[0]; n++; } } while(n<5); //5 tentatives return 0; }
int main() { char *s,patro[N]; int i; int choix;
T=(char**)malloc(sizeof(char*)*N);
for(i=0; i<N; i++) /*initialisiation de T a 0*/ T[i]=0; int Bool=1; //booleen
while(Bool) { for(i=0; i<N; i++) printf("%s\n", T[i]); printf("\n");
printf("Entrez votre choix \n"); printf("1-Inserer \n"); printf("2-Rechercher \n"); printf("3-Supprimer \n"); printf("4-Fin du programme \n");
if(scanf("%d",&choix)==0) return EXIT_FAILURE;
switch(choix) { case 1: printf("Entrez un patronyme en minuscule\n"); if (scanf("%s",&patro)==0) return EXIT_FAILURE; printf("Vous avez choisi la commande inserer \n"); s=(char*)malloc(sizeof(char*)*(strlen(patro)+1)); strcpy(s,patro);
if(inserer(s)==0) printf("Le patronyme n'a pu etre inserer \n"); else printf("Le patronyme a été inserer \n"); break; case 4:
printf("Vous avez choisi la commande fin \n"); Bool=0; return EXIT_SUCCESS; break;
default: printf("Vous n'avez pas choisi une commande valide \n"); printf("Veuillez refaire un choix \n"); printf("\n"); break;
} } return EXIT_SUCCESS; } Mon site internet : [ Lien ]
|
|
mercredi 5 décembre 2007 à 11:17:10 |
Re : Table de hachage avec patronyme

guitoontruant
|
Merci beaucoup, ça m'a débloqué.
Et encore merci...
L'important, c'est les trois points...
|
|
Cette discussion est classée dans : int, printf, return, if, patronyme
Répondre à ce message
Sujets en rapport avec ce message
un tit coup de pouce pour une pile ??? [ par noisette87 ]
voici le debut de mon programme :#include #include #include //---------------------------------------------------------------------------#pragma argsu
je ne comprends pas mon code n'affiche pas ma grille...de morpion [ par nicoworld ]
Voilà ben le .exe m'affiche pas ma grille cje ne comprends pas!!!!si quelqu'un peut me dire pourquoi????voilà le code://MORPION 10*10 :#include int ve
RFID skyetek developer kit [ par chibi59 ]
Salut à tous,J'ai un projet à mener pour mes études il sagit de déveloper une aplication en C++ capable de se connecter à un lecteur RFID de lire des
maths et autres [ par jeanphilippe37 ]
Slt, j'ai fais un prgm de maths pour savoir les nbrs premiers mais, quand je mets system("pause"), j'ai une erreur, pouvez vous me corriger ?
rien ne s'affiche a l'execution(les tubes ordinaires) [ par brekiano ]
bonsoir, svp chui débutant dans la programmation systeme sous unix.j'ai fait ce programme qui affiche normalement le résultats de ce pipes : ]$ ps
Return tableau? [ par zut69 ]
Bonjour,Je suis en train d'écrire un petit programme sur les matrices en C, mais vu que je veux faire quelque chose d'assez général, j'ai besoin que d
Problème compréhension du programme le compte est bon [ par echec ]
Bonjour,Je cherchai un programme c++ sur internet qui permettait de calculer la solution du jeu le compte est bon, j'en est finalement trouvé un, mais
Gestion de plusieurs ports RS232 [ par dissezfr ]
Bonjour à tous d'abordJ'ai récupéré un code sur le site permettant de géré un port série, j'aimerai piloter 8 (voir +) ports série avec un seul ordina
ce code ne marche pas?????????? [ par banak3181 ]
s'il vous plait les gars je veux que quelqu'un me disent pourquoi ce code ne marche sur dev C++:#include #include #include #include # include<myconio.
Simple Hook (DLL) qui plante GetMessage ! Je suis nul ou quoi ? [ par dam1dam1 ]
Bonjour. Je ne suis pas un pro du Hook et j’ai un peu oublié tout ca, mais vu toutes les bonnes sources et annotations qui trônent ici, je pensais po
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|