guitoontruant
Messages postés315Date d'inscriptiondimanche 7 janvier 2007StatutMembreDernière intervention26 août 2011
-
4 déc. 2007 à 15:52
guitoontruant
Messages postés315Date d'inscriptiondimanche 7 janvier 2007StatutMembreDernière intervention26 août 2011
-
5 déc. 2007 à 11:17
Bonjour,
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 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
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;
Pistol_Pete
Messages postés1053Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 5 déc. 2007 à 09:57
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;
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");
Pistol_Pete
Messages postés1053Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 4 déc. 2007 à 16:28
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