IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Mon programme de recherche dichotomique: suite de problemes..


Sujet :

C

  1. #1
    Membre confirmé Avatar de mouchT8
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Par défaut Mon programme de recherche dichotomique: suite de problemes..


    Pour commencer,
    Voici mon programme :

    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
    #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){
     
     
    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;
    }
     
     
     
    //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)
    for (i=0; i!= EOF; i++) {
    fputs(mot_texte,dico);
    }
     
    fclose(dico.dat);
     
    //tri en mémoire du tableau dico
    qsort((char**)dico,nb_mots,LONGMOT,strcmp);	
     
     
    //ouverture du fichier texte en lecture
    f=fopen ("argv","r");
     
     
    //TRAITEMENT POUR CHAQUE MOT DU TEXTE: suppression de majuscule et de ponctuation
    for (i=0; i<nb_mots;i++){
     
    void sup_ponc(char mot) {
    	for (mot_texte==getc(argv); mot_texte!=EOF) {
    putc(isalpha(mot_texte),argv);}
    }
     
    void sup_maj (char mot) {
    	for (mot_texte==getc(argv); mot_texte!=EOF) {
    putc(tolower(mot_texte),argv);}
    }
     
    }
     
    //recherche du mot dans le tableau dico à l'aide de la fonction dichotomie
    dichotomie(dico, mot, nb_mots);
     
    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') {
    fputs(mot,dico);		//Ajout du mot dans le dico
    qsort ((char**) dico, nb_mots,LONGMOT, strcmp);		// Tri en mémoire, une nouvelle fois, du tableau dico
    }
    }
     
    fclose("argv");
     
    f=fopen("dico.dat","w");
     
    for (i=0; i!= EOF; i++) {
    fputs(mot_texte,dico.dat);
    }
     
    fclose(dico.dat);
     
    }

    Pour ceux qui m'ont aidé à ma derniere discussion, c'est la suite.

    Le programme au complet.. et donc comme prévu j'ai des problemes....

    Lesquels...?

    13 erreurs en tout !!
    yOUHOU !!


    Bon celle qui me pose probleme pour le moment je dirait que c'est celle ci::

    1>.\1.cpp(75) : warning C4996: 'fopen' a été déclaré désapprouvé
    1> C:\Program Files\Microsoft Visual Studio 8\VC\include\stdio.h(234)*: voir la déclaration de 'fopen'
    1> Message*: 'This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'

  2. #2
    Membre confirmé Avatar de mouchT8
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Par défaut
    oups j'ai bugué avec mes fclose la...

    Modifié : !!

    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
    #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){
     
     
    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;
    }
     
     
     
    //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)
    for (i=0; i!= EOF; i++) {
    fputs(mot_texte,dico);
    }
     
    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");
     
     
    //TRAITEMENT POUR CHAQUE MOT DU TEXTE: suppression de majuscule et de ponctuation
    for (i=0; i<nb_mots;i++){
     
    void sup_ponc(char mot) {
    	for (mot_texte==getc(argv); mot_texte!=EOF) {
    putc(isalpha(mot_texte),argv);}
    }
     
    void sup_maj (char mot) {
    	for (mot_texte==getc(argv); mot_texte!=EOF) {
    putc(tolower(mot_texte),argv);}
    }
     
    }
     
    //recherche du mot dans le tableau dico à l'aide de la fonction dichotomie
    dichotomie(dico, mot, nb_mots);
     
    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') {
    fputs(mot,dico);		//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","w");
     
    for (i=0; i!= EOF; i++) {
    fputs(mot_texte,dico.dat);
    }
     
    fclose(f);
     
    }

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Quand je compile avec gcc, je n'ai pas l'erreur qui te pose problème, en revanche j'en ai une tripotée d'autre...

    En ce qui concerne cette erreur,
    1>.\1.cpp(75) : warning C4996: 'fopen' a été déclaré désapprouvé
    1> C:\Program Files\Microsoft Visual Studio 8\VC\include\stdio.h(234)*: voir la déclaration de 'fopen'
    1> Message*: 'This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'
    Tu as deux solutions,
    soit utiliser la fonction proposée par le compilo : fopen_s,
    soit activer l'option _CRT_SECURE_NO_DEPRECATE. Elle doit se trouver dans les options de compilations de ton projet.

    A mon avis, la seconde solution est mieux si tu veux rester proche du c standard.

    PS : Avec gcc, sans options, j'obtiens plus que 13 erreurs...

  4. #4
    Membre confirmé Avatar de mouchT8
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Par défaut
    Si je met "fopen_s" comme me le dit VS ,
    il me met ensuite une erreur qui me dit que fopen ne prend pas 2 arguments

    Par contre je ne sais pas du tout comment faire pour activer l'option _CRT_SECURE_NO_DEPRECATE

    (depuis le poste de cette discussion je n'est plus que 10 erreurs
    Ca avance... j'essaye de résoudre les autres toute seule !!
    Mais celle la j'avoue...


  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    fopen_s est de la forme : (d'après MSDN)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    errno_t fopen_s( 
       FILE** pFile,
       const char *filename,
       const char *mode 
    );
     
    /* if faut donc remplacer */
     
    f=fopen("dico.dat","w");
     
    /* par */
     
    err = fopen_s(&f, "dico.dat", "w");
    au lieu d'avoir le pointeur sur fichier en sortie, il est passé en paramètres (Attention FILE **, pas FILE *). La valeur retournée est un code d'erreur.

    Pour activer _CRT_SECURE_NO_DEPRECATE, il faut trifouiller dans les options... n'ayant pas visual, je ne peux pas en dire plus....

    Bon courage.

  6. #6
    Membre confirmé Avatar de mouchT8
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Par défaut
    Citation Envoyé par mabu Voir le message
    Pour activer _CRT_SECURE_NO_DEPRECATE, il faut trifouiller dans les options... n'ayant pas visual, je ne peux pas en dire plus....

    Bon courage.
    HUmmmmm.....
    Quelqu'un saurait comment faire??


    /* if faut donc remplacer */

    f=fopen("dico.dat","w");

    /* par */

    err = fopen_s(&f, "dico.dat", "w");
    Ben ca me rajoute plus d'erreurs (10) que ça n'en enlève

  7. #7
    Membre confirmé Avatar de mouchT8
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Par défaut
    Le texte à vérifier ainsi que la liste des mots composant la base du dictionnaire pourront être saisis sous un éditeur de texte, par exemple celui de Turbo C...
    Okay monsieur l'énoncé...


  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 391
    Par défaut
    Citation Envoyé par mabu Voir le message
    Pour activer _CRT_SECURE_NO_DEPRECATE, il faut trifouiller dans les options... n'ayant pas visual, je ne peux pas en dire plus...
    Quand on ne connait pas assez Visual, il y a une façon plus simple et moins prise de tête de contourner cette honteuse opération de déstandardisation de Micro$oft:
    Rajoute simplement cette ligne avant tes includes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define _CRT_SECURE_NO_DEPRECATE
    PS: Si tu veux le rajouter dans les options du projet à la place, c'est dans Project Properties -> Configuration Properties -> C/C++ -> Preprocessor -> ligne "preprocessor definitions". Normalement, il y a déjà plusieurs symboles définis (dont _DEBUG ou NDEBUG), et tu dois rajouter _CRT_SECURE_NO_DEPRECATE à la liste.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Membre confirmé Avatar de mouchT8
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    PS: Si tu veux le rajouter dans les options du projet à la place, c'est dans Project Properties -> Configuration Properties -> C/C++ -> Preprocessor -> ligne "preprocessor definitions". Normalement, il y a déjà plusieurs symboles définis (dont _DEBUG ou NDEBUG), et tu dois rajouter _CRT_SECURE_NO_DEPRECATE à la liste.

    Yeeeeeaaaaaah !!
    Ca marche!!
    Merci beaucoup, je n'y serais jamais arrivé seule !!







    Plus que 7 erreurs a resoudre

    Je vais essayer de me débrouiller un peu !

    MERCI ENCORE!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/01/2010, 04h12
  2. Réponses: 49
    Dernier message: 19/06/2008, 11h30
  3. probleme dans mon programme
    Par phpaide dans le forum Langage
    Réponses: 8
    Dernier message: 05/06/2006, 12h57
  4. [TP] Problème avec mon programme de conversion
    Par Panzer95 dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 28/05/2006, 18h36
  5. Pas de suite à mon programme
    Par gillou4 dans le forum C
    Réponses: 7
    Dernier message: 10/10/2005, 16h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo