pépereF
Messages postés36Date d'inscriptiondimanche 11 décembre 2005StatutMembreDernière intervention25 janvier 2008
-
16 janv. 2008 à 11:34
bouba -
4 janv. 2010 à 15:10
Bonjour,
voici un code de verification d'orthographe, il compil sans erreurs mais lors de l'execution il ne retouve pas le fichier dico.dat (daillleur il ne me demande même pas de le remplir), je travail sur visual studio 2005 ou sur devC++(sur devc++ je n'arrive même pas a avoir la console d'application).
pouvez-vous m'aider
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
#include<conio.h>
#define MAXMOTS 100
#define LONGMOT 20
char dico[MAXMOTS][LONGMOT];
char mot[LONGMOT];
char *pmot;
FILE*f;
//declaration des fonctions
short dichotomie(char dico[MAXMOTS][LONGMOT],char *mot,short nb_mot);
void sup_ponc(char *pmot);
void sup_maj(char *pmot);
void ajout(char dico[MAXMOTS][LONGMOT],char *mot,short nb_mot);
//Fonction principale
int main(int argc,char*argv[])
{
int i,res;
extern int strcmp();
short nb_mot=0;
char touche;
//ouverture du dictionnaire
//Test que le fichier dico s'ouvre bien
if ((f=fopen("dico.dat","r")) == NULL)
printf("\nImpossible d'ouvrir le fichier Dico, creation d'un nouveau Dico");
/*Puisqu'il est impossible d'ouvrir le fichier dico, la fin du programme permetra
d'en créé un nouveau avec fopen("dico.dat","w")*/
else
{
/*remplissage du tableau dico par les mots presents dans le fichier dico*/
while (fscanf(f,"%s",mot) !=EOF)
{
strcpy(dico[nb_mot],mot);
nb_mot += 1;
}
/*Fermeture du fichier Dico*/
fclose(f);
}
/*tri en mémoire du tableau Dico*/
qsort((char **)dico,nb_mot,LONGMOT,strcmp);
/*Ouverture du fichier a vérifier*/
/*Test que le fichier s'ouvre bien*/
if ((f=fopen("texte.dat","r")) == NULL)
printf("\nImpossible d'ouvrir le fichier texte");
/*Puisqu'il est impossible d'ouvrir le fichier, le if nous améne à la fin du
programme*/
else
{
pmot=mot;
while (fscanf(f,"%s",mot) != EOF)
{
//appel de la fonction permettant de suprimer la ponctuation
sup_ponc(pmot);
/*appel de la fonction permettant de remplacer les majuscules
par des minuscules*/
sup_maj(pmot);
//Appel de la fonction dichotomie
res=dichotomie(dico,mot,nb_mot);
/*invite suivant le resultat de la dichotomie à rajouter le mot
dans le dictionnaire*/
if (res == 0)
{
printf("\nVoulez-vous enregistrer le mot '%s' dans le dico (o)oui ou (n)non?\n",mot);
do
{
touche=getch();
}
while (touche!='o'&&touche!='n');
//choix suivant le resultat de l'operateur
if (touche=='o')
{
ajout(dico,mot,nb_mot);
nb_mot+=1;
}
}
}
//fermeture du fichier texte
fclose(f);
//Ouverture du fichier dico en mode écriture
f=fopen("dico.dat","w");
//enregisrement dans le dico du tableau
for (i=0;i<nb_mot;i++)
fprintf(f,"%s\n",dico[i]);
//Fermeture du fichier dico
fclose(f);
}//fin du if testant l'ouverture du fichier texte
return 0;
}
//FONCTION DICHOTOMIE
short dichotomie(char dico[MAXMOTS][LONGMOT],char *mot, short nb_mot)
{
//déclaration des variables
int i=0,j=nb_mot,k,res;
//Traitement
while ((j-i)>1 && res!=0)
{
k=(i+j)/2;
res=strcmp(dico[k],mot);
if (res>0)
j=k;
else
i=k;
/*ce if afin d'atteindre le mot du tableau dico[0]
puisque j-i ne peut qu'être strictement supérieur à 1*/
if (k==0 && res!=0)
res=strcmp(dico[0],mot);
}
//Affectation des valeurs retournées
if (res!=0)
res=0;
else
res=1;
return res;
}
//FONCTION SUPPRESSION DE LA PNCTUATION
void sup_ponc(char *pmot)
{
//Déclaration des variables locales
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;
}
//FONCTION SUPPRESSION DES MAJUSCULES
void sup_maj(char *pmot)
{
//Déclaration des variables locales
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 AJOUT
void ajout(char dico[MAXMOTS][LONGMOT],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);
}