|
|
|
|
Bonjour,
Voila je suis sur un projet de recherche dichotomique!
J'ai 3 erreurs à corriger dans mon programme!
Par exemple celle ci:
Avertissement 1 warning C4101: 'mot_texte' : variable locale non référencée
QU'est ce que ca veut dire "variable locale non référencée" ?
C'est une question complement absurde je le sais mais je suis incapable de corriger ces erreurs :o(
Configuration: Windows XP Opera 9.50
Oui!
#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
char dico[LONGMOT][MAXMOTS];
char mot[LONGMOT];
char *pmot;
FILE*f;
//initialisation de la fonction de recherche dichotomique
short dichotomie(char dico[LONGMOT][MAXMOTS],char *mot,short nb_mots){
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]!= '/0'){
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]!='/0'){
c=pmot[i];
if (isupper(c))
c=tolower(c);
pmot[i]=c;
i++;
}
pmot[i]=0;
}
//fonction ajout
void ajout(char dico[LONGMOT][MAXMOTS],char *mot,short nb_mot)
{
//Copie du nouveau mot dans le tableau
strcpy(dico[nb_mot],mot);
//Tri en mémoire du tableau dico
qsort((char**)dico,nb_mot,LONGMOT,strcmp);
}
//FONCTION PRINCIPALE
int main (int argc, char **argv[]) {
char mot_texte[LONGMOT]; //mot lu dans le fichier text
short nb_mots=0;
int i,j,k;
char *fichier_texte; //nom du fichier à ouvrir et à traiter
fichier_texte="fichierdevoir";
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");
//Test que le fichier dico s'ouvre bien
if ((f=fopen("dico.dat","r")) == NULL)
printf("Impossible d'ouvrir le fichier Dico\n");
//**
printf("lecture mot par mot de tout le fichier et stockage dans un tableau en mémoire ....\n");
i=0;
while(fgetc(f)!=EOF)
{
fgets(dico[i],19,f);
i++;
}
fclose(f);
nb_mots=100;
//**
printf("Tri en mémoire du tableau dico....\n");
qsort((char**)dico,nb_mots,LONGMOT,strcmp);
f=fopen("fichierdevoir","r");
//Test que le fichier s'ouvre bien
if ((f=fopen("fichierdevoir.dat","r")) == NULL)
printf("Impossible d'ouvrir le fichier texte");
pmot=mot;
//**
printf("Traitement pour chaque mot: supression des majuscules et de la ponctuation....");
while (fscanf(f,"%s",mot) != EOF){
sup_ponc(pmot);
sup_maj(pmot);
printf("Recherche du mot dans le tableau dico .....");
dichotomie(dico, mot, nb_mots);
if (dichotomie==0){
char rep[5]; //variable pour la réponse de l'utilisateur
fprintf (f,"Le mot n'existe pas. Voulez vous l'ajouter au dictionnaire? \n");
fscanf(f,"%s",&rep);
if (strcmp(rep,"oui")==0) {
ajout(dico,mot,nb_mots);
}
}
}
fclose(f);
f=fopen("dico.dat","a");
for (i=0; i<nb_mots; i++) {
fprintf(f,"%s\n",dico[i]);
}
fclose(f);
} |
PETit changement de derniere minute pour mon code à 2 endroits...
#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
char dico[LONGMOT][MAXMOTS];
char mot[LONGMOT];
char *pmot;
int i=0;
FILE*f;
//initialisation de la fonction de recherche dichotomique
short dichotomie(char dico[LONGMOT][MAXMOTS],char *mot,short nb_mots){
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]!= '/0'){
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]!='/0'){
c=pmot[i];
if (isupper(c))
c=tolower(c);
pmot[i]=c;
i++;
}
pmot[i]=0;
}
//fonction ajout
void ajout(char dico[LONGMOT][MAXMOTS],char *mot,short nb_mot)
{
//Copie du nouveau mot dans le tableau
strcpy(dico[nb_mot],mot);
//Tri en mémoire du tableau dico
qsort((char**)dico,nb_mot,LONGMOT,strcmp);
}
//FONCTION PRINCIPALE
int main (int argc, char **argv[]) {
char mot_texte[LONGMOT]; //mot lu dans le fichier text
short nb_mots=0;
char *fichier_texte; //nom du fichier à ouvrir et à traiter
fichier_texte="fichierdevoir";
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");
//Test que le fichier dico s'ouvre bien
if ((f=fopen("dico.dat","r")) == NULL)
printf("Impossible d'ouvrir le fichier Dico\n");
//**
printf("lecture mot par mot de tout le fichier et stockage dans un tableau en mémoire ....\n");
while(fgetc(f)!=EOF)
{
int i;
i =0;
fgets(dico[i],19,f);
i++;
}
fclose(f);
nb_mots=100;
//**
printf("Tri en mémoire du tableau dico....\n");
qsort((char**)dico,nb_mots,LONGMOT,strcmp);
f=fopen("fichierdevoir","r");
//Test que le fichier s'ouvre bien
if ((f=fopen("fichierdevoir.dat","r")) == NULL)
printf("Impossible d'ouvrir le fichier texte");
pmot=mot;
//**
printf("Traitement pour chaque mot: supression des majuscules et de la ponctuation....");
while (fscanf(f,"%s",mot) != EOF){
sup_ponc(pmot);
sup_maj(pmot);
printf("Recherche du mot dans le tableau dico .....");
dichotomie(dico, mot, nb_mots);
if (dichotomie==0){
char rep[5]; //variable pour la réponse de l'utilisateur
fprintf (f,"Le mot n'existe pas. Voulez vous l'ajouter au dictionnaire? \n");
fscanf(f,"%s",&rep);
if (strcmp(rep,"oui")==0) {
ajout(dico,mot,nb_mots);
}
}
}
fclose(f);
f=fopen("dico.dat","a");
for (i=0; i<nb_mots; i++) {
fprintf(f,"%s\n",dico[i]);
}
fclose(f);
}
VS m'indique donc que mot_texte est déclaré non référencé à sa déclaration dans le main ! ;o) |