Bonjour,

me revoila avec mon programme mortellement agaçant !

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>
 
 
#define MAXMOTS 100	//nombre maximum de mots dans le dictionnaire
#define LONGMOT 20 	//longueur en carcatere d'un mot
 
 
//initialisation de la fonction de recherche dichotomique
short dichotomie(char **dico,char *mot,short nb_mots){  //PB ICI !!!!!!!!!!!
 
 
int i,j,k,trouve,indice;		//i->debut, j->fin
int strcmp (const char *s1, const char *s2);
 
 
i=0;
j=nb_mots;
trouve=0;
 
while(i<=j && trouve == 0) {				
 
int moy;		//moyenne de(i,j)
moy=(i+j)/2;
k=moy;
 
 
if(strcmp(dico[k],mot)==0) {
	trouve=1;
}
if(strcmp(dico[k],mot)>0) {
	j=k-1;}
else{
	i=k+1;
}
}
 
 
 
if(trouve==0){indice=0;}	//si mot n'a pas été trouvé
if(trouve==1){indice=1;}	//si mot a été trouvé
 
return indice;
}
 
//initialisation des fonction de supression des majuscules et de la ponctuation
void sup_ponc(char *pmot){
 
int i=0,j=0;
char c;
 
//Traitement
while (pmot[i]!=NULL){
c=pmot[i];
if (isalpha(c)){
pmot[j]=c;
j++;
}
i++;
}
pmot[j]=0;
}
 
 
void sup_maj(char *pmot){
 
int i=0;
char c;
 
//Traitement
while (pmot[i]!=NULL){
c=pmot[i];
if (isupper(c))
c=tolower(c);
pmot[i]=c;
i++;
}
pmot[i]=0;
}
 
 
 
 
 
//FONCTION PRINCIPALE main()
 
 
 
int main (int argc, char **argv) {
 
FILE * f;
 
char mot_texte[LONGMOT];	//mot lu dans le fichier texte
char dico[MAXMOTS][LONGMOT];
char *pmot;
char *fichier_texte; //nom du fichier à ouvrir et traiter
 
void qsort (void *base, size_t nmemb, size_t size,int (*compare)(const char *, const char*));
int strcmp (const char *s1, const char *s2);
 
int i,j,k;
char mot[100];
short nb_mots;
 
 
 
printf("Veuillez entrer le nom du fichier texte a traiter pour la recherche dichotomique svp: ");
fgets (fichier_texte, sizeof fichier_texte, stdin); 
 
f=fopen("dico.dat","r");
 
 
//lecture mot par mot de tout le fichier et stockage dans un tableau en mémoire (dico)
i=0;
while(fgetc(f)!=EOF)
{
	fgets(dico[i],19,f);
	i++;
}
 
 
 
fclose(f);
 
//tri en mémoire du tableau dico
qsort((char**)dico,nb_mots,LONGMOT,strcmp);	
 
 
//ouverture du fichier texte en lecture
f=fopen ("argv","r");
 
pmot=mot;
 
//TRAITEMENT POUR CHAQUE MOT DU TEXTE: suppression de majuscule et de ponctuation
for (i=0; i<nb_mots;i++){
sup_ponc(pmot);
sup_maj(pmot);
 
}
 
//recherche du mot dans le tableau dico à l'aide de la fonction dichotomie
dichotomie(dico,mot,nb_mots);  // erreur 1
 
if (dichotomie==0){
char rep;	//variable pourla réponse de l'utilisateur
fprintf (f,"Le mot n'existe pas. Voulez vous l'ajouter au dictionnaire? \n");
fscanf(f,"%s",&rep);
 
if (rep=='oui') {
strcpy_s(dico[i],mot);		//Ajout du mot dans le dico
qsort ((char**) dico, nb_mots,LONGMOT, strcmp);		// Tri en mémoire, une nouvelle fois, du tableau dico
}
}
 
fclose(f);
 
f=fopen("dico.dat","a");
 
for (i=0; i<MAXMOTS; i++) {
fputs(dico[i],f);
}
 
fclose(f);
 
}
Avec ce code je me retrouve avec une seule erreur que voici:

Erreur 1 error C2664: 'dichotomie'*: impossible de convertir le paramètre 1 de 'char [100][20]' en 'char **' 144

J'ai donc remplacé ma déclaration de dichotomie par:

short dichotomie(char dico[MAXMOTS][LONGMOT],char *mot,short nb_mots){

mais cathastrophe je me retrouve avec 3 erreurs et 5 avertissements.

Ais-je fais mauvaise modification? Le probleme vient-il d'ailleurs?
Mon énoncé m'indique pourtant bien que ma déclaration de dichotomie doit se faire avec "**dico" ...

Voici les erreurs et avertissements gagnés avec cette modification:

ERREURS:

Erreur 6 error LNK2019: symbole externe non résolu "void __cdecl qsort(void *,unsigned int,unsigned int,int (__cdecl*)(char const *,char const *))" (?qsort@@YAXPAXIIP6AHPBD1@Z@Z) référencé dans la fonction _main dv8.obj

Erreur 7 error LNK2019: symbole externe non résolu _WinMain@16 référencé dans la fonction ___tmainCRTStartup MSVCRTD.lib

Erreur 8 fatal error LNK1120: 2 externes non résolus C:\Documents and Settings\LaMoucheTouteCrad\Mes documents\Visual Studio 2005\Projects\devoir 8\Debug\devoir 8.exe


Avertissement 1 warning C4101: 'mot_texte'*: variable locale non référencée c:\documents and settings\lamouchetoutecrad\mes documents\visual studio 2005\projects\devoir 8\devoir 8\dv8.cpp 95

Avertissement 2 warning C4101: 'k'*: variable locale non référencée c:\documents and settings\lamouchetoutecrad\mes documents\visual studio 2005\projects\devoir 8\devoir 8\dv8.cpp 103

Avertissement 3 warning C4101: 'j'*: variable locale non référencée c:\documents and settings\lamouchetoutecrad\mes documents\visual studio 2005\projects\devoir 8\devoir 8\dv8.cpp 103

Avertissement 4 warning C4700: variable locale 'fichier_texte' non initialisée utilisée c:\documents and settings\lamouchetoutecrad\mes documents\visual studio 2005\projects\devoir 8\devoir 8\dv8.cpp 110

Avertissement 5 warning C4700: variable locale 'nb_mots' non initialisée utilisée c:\documents and settings\lamouchetoutecrad\mes documents\visual studio 2005\projects\devoir 8\devoir 8\dv8.cpp 128


Si cela peut aider quelqu'un a comprendre..

Quelqu'un peut il m'aider??

merci.