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 :

Problème de retour de valeur dans ma fonction de recherche dichotomique


Sujet :

C

Vue hybride

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Par défaut Problème de retour de valeur dans ma fonction de recherche dichotomique
    Voici mon code:

    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
    #include<stdio.h>
    #include<string.h>
     
     
    //INITIALISATION
    //initialisation de la fonction dichotomie
    short dichotomie(char **dico,char *mot,short nb_mots){
     
    int i,j,k;
     
    i=0;
    j= nb_mots;
     
    for(i=0; i<=nb_mots -1; i++) {		//execution de la boucle tant que (i,j) supérieur à 1
    									//puisque j=nb_mots, alors (i,j) sera supérieur à 1 pour
    									//i< nb_mots -1
     
    int moy;		//moyenne de(i,j)
    moy=(i+j)/2;
    k=moy;
    }
     
    if(dico[k] > mot) {
    j=k;
    }
    else {
    i = k;
    }
     
     
    //comparaison de mot avec le i ème et le j ème élément du dico
    if (mot==dico[i]){return 0;}
    if(mot==dico[j]){return 0;}
    else{return 1;}
     
    }
     
     
    //EXECUTION
    //PROGRAMME PRINCIPAL
     
    int main(void){
     
    char *mot;
    short nb_mots;
    //exemple d'initialisation de dico pour notre exemple
    char *dico[5]={"arbre","voiture","cheval","malade","besoin"};
    nb_mots=5;	//initialisation par exemple
     
     
    //saisie par l'utilisateur du mot à rechercher
    printf("Veuillez saisir un mot pour la recherche dichotomique: \n ");
    scanf_s("%c",&mot);
     
    //recherche dichotomique
    dichotomie(dico, mot, nb_mots);
     
    if(dichotomie(dico, mot, nb_mots)==0 ){
    	printf("Le mot saisie est bien dans le dictionnaire!\n");
    }
    else {
    	printf("Le mot saisie n'est pas dans le dictionnaire!\n");
    }
     
    return 0;
    }

    Mon probleme, c'est que quand, à l'exectution, je note par exemple "arbre",
    il me dit que le mot n'appartient pas au dictionnaire...alors que si !!
    Je pense qu'il y a un probleme au niveau de mes retours dr valeurs mais je ne vois pas ou ..

    Quelqu'un peut m'aider??

  2. #2
    Expert confirmé

    Avatar de snake264
    Homme Profil pro
    Datascientist chez Leboncoin
    Inscrit en
    Novembre 2006
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Datascientist chez Leboncoin
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 914
    Par défaut
    Au lieu de faire de cette manière pourquoi ne créée-tu pas un fichier .txt qui te sert de dictionnaire c'est beaucoup plus facile à faire

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Fai,

    Tu n'aurais pas oublié une condition pour l'algorithme de recherche par dichotomie ?

    Je te laisse chercher, c'est tellement élémentaire.

  4. #4
    Membre éprouvé Avatar de yakamoneye
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Par défaut
    bien vu droggo !

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Par défaut
    Citation Envoyé par droggo Voir le message
    Fai,

    Tu n'aurais pas oublié une condition pour l'algorithme de recherche par dichotomie ?

    Je te laisse chercher, c'est tellement élémentaire.
    Euuuuuuuh .... oui !

    Je vais me creuser la tete, mais je ne vois pas ce que ça peut etre puisque j'ai suivit a la lettre (du moins je pense) l'énoncé de l'exercice !

    Le voici, au cas ou:

    La fonction aura la déclaration suivante:
    short dichotomie (dico, mot, nb_mots)
    char**dico;
    char *mot;
    short nb_mots;

    Elle devra retourner la valeur 1 si mot est trouvé dans dico et 0 si non.
    L'algorithme est le suivant :

    -on utilise 3 variables i, j et k entières
    -i initialisé a 0
    -j initialis a nb_mots

    Executer une boucle tant que l'intervalle (i,j) est supèrieur à 1:
    -mettre dans k la moyenne de (i,j)
    -si le k eme élément de dico est supèrieur à mot, mettre k dans j sinon mettre k dans i
    -fin de la boucle
    -comparer mot avec le ième et j ème élément de dico


    Por tester la fonction, on pourra écrire un petit programme permettant ... blablabla

    Effectivement je vois qu'il y a deux ou trois trucs que je n'ai pas respecté..
    je m'en vais les changer mais je ne pense pas que ce soit ça qui ne fonctionne pas?

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    en plus, une grossière erreur :

    les chaînes de caractères ne se compare pas avec == mais avec strcmp ...


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

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    en plus, une grossière erreur :

    les chaînes de caractères ne se compare pas avec == mais avec strcmp ...

    OH MY GOD !
    OooooPS !!!!

    Correction =>

    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
    #include<stdio.h>
    #include<string.h>
     
     
    //INITIALISATION
    //initialisation de la fonction dichotomie
    short dichotomie(char **dico,char *mot,short nb_mots){
     
    int i,j,k;
    int strcmp (const char *s1, const char *s2);
     
    i=0;
    j= nb_mots;
     
    for(i=0; i<=nb_mots -1; i++) {		//execution de la boucle tant que (i,j) supérieur à 1
    									//puisque j=nb_mots, alors (i,j) sera supérieur à 1 pour
    									//i< nb_mots -1
     
    int moy;		//moyenne de(i,j)
    moy=(i+j)/2;
    k=moy;
     
     
    if(strcmp(dico[k],mot)>0) {
    j=k;
    }
    else {
    i = k;
    }
    }
     
     
    //comparaison de 'mot' avec le i ème et le j ème élément du dico
     
    if(strcmp(mot,dico[i])==0){return 1;}
    if(strcmp(mot,dico[j])==0){return 1;}
    else{return 0;}
     
     
    }
     
    //EXECUTION
    //PROGRAMME PRINCIPAL
     
    int main(void){
     
    char *mot;
    short nb_mots;
     
    //exemple d'initialisation de dico pour notre exemple
    char *dico[5]={"arbre","voiture","cheval","malade","besoin"};
    nb_mots=5;	//initialisation par exemple
     
     
    //saisie par l'utilisateur du mot à rechercher
    printf("Veuillez saisir un mot pour la recherche dichotomique: \n ");
    scanf_s("%c",&mot);
     
    //recherche dichotomique
    dichotomie(dico, mot, nb_mots);
     
    if(dichotomie(dico, mot, nb_mots)== 1 ){
    	printf("Le mot saisie est bien dans le dictionnaire!\n");
    }
    if (dichotomie(dico,mot,nb_mots)== 0) {
    	printf("Le mot saisie n'est pas dans le dictionnaire!\n");
    }
     
    return 0;
    }
    Mais toujours le meme probleme...
    Si je saisie "arbre" par exemple, il me dit qu'il n'est pas dans le dico..

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 141
    Par défaut
    Citation Envoyé par snake264 Voir le message
    Au lieu de faire de cette manière pourquoi ne créée-tu pas un fichier .txt qui te sert de dictionnaire c'est beaucoup plus facile à faire
    Parce que l'énoncé de mon exercice me dit de faire comme ça


  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par mouchT8 Voir le message
    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include<stdio.h>
    #include<string.h>
     
     
    //INITIALISATION
    //initialisation de la fonction dichotomie
    short dichotomie(char **dico,char *mot,short nb_mots){
    <...>
    Il faut cesser de réinventer la roue...

    1 - mettre les données dans un tableau
    2 - trier le tableau avec qsort())
    3 - rechercher avec bsearch().

  10. #10
    Expert confirmé

    Avatar de snake264
    Homme Profil pro
    Datascientist chez Leboncoin
    Inscrit en
    Novembre 2006
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Datascientist chez Leboncoin
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 914
    Par défaut
    C'est vrai mais en même temps il n'avait pas vraiment le choix car cela lui étais imposé

  11. #11
    Membre éprouvé Avatar de yakamoneye
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Par défaut
    en même temps faire une recherche dichotomique sur un tableau non trié, ...
    y'en a qu'on essayé ...
    J'suis pas certain qu'ils aient réussi

  12. #12
    Expert confirmé

    Avatar de snake264
    Homme Profil pro
    Datascientist chez Leboncoin
    Inscrit en
    Novembre 2006
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Datascientist chez Leboncoin
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 914
    Par défaut
    On sait jamais avec une chance énorme ça peut éventuellement marché

  13. #13
    Membre éprouvé Avatar de yakamoneye
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Par défaut
    Sur ce coup là je préfère misé sur le trie que sur la chance

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

Discussions similaires

  1. [MySQL] Problème: Mauvais retour de valeur dans mysql
    Par Krabbos dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/05/2011, 15h09
  2. problème de passage de valeur dans une fonction
    Par jeremie74 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 21/09/2007, 18h30
  3. problème pour récupérer une valeur dans ma bd (débutante)
    Par auryn111 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 26/08/2005, 17h49
  4. Réponses: 9
    Dernier message: 13/05/2005, 03h13
  5. fonction récupérant des valeurs dans une fonction popup...
    Par petitsims dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/01/2005, 14h51

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