Recherche dichotomique

Fermé
pépereF Messages postés 36 Date d'inscription dimanche 11 décembre 2005 Statut Membre Dernière intervention 25 janvier 2008 - 10 juin 2007 à 10:47
mamiemando Messages postés 33363 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 novembre 2024 - 12 juin 2007 à 00:40
bonjour,
voici un programme que j'ai developpé sur visual studio 2005 en C
il sagit d'une recherche dichotomique seulement il ne fonctionne pas comme je voudrai.
si par exemple je saisi 3 mots:
chien
chat
cheval
si j'envoie la recherche sur le mot chat
resultat: le mot chat à été trouvé
si j'envoie la recherche sur le mot chien
resultat: le mot chien est introuvable
si j'envoie la recherche sur le mot cheval
resultat : le mot cheval est introuvable
ce que je voudrai c'est que mon programme me retrouve tous les mots
voici mon programme:

Description:
Recherche dichotomique d"un mot dans le dctionnaire*/

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define MAXMOTS 100
#define LONGMOT 20
short dichotomie(char**dico,char*mot,short nb_mots);
int main()
{
/****déclaration et initialisation des variables****/
short nb_mots=0;
char*mot;
char**dico;
int termine;
short motrouve;
termine=0;
/*allocation dynamique de la mémoire*/
mot=(char(*))malloc(LONGMOT *sizeof(char));
dico=(char(**))malloc(MAXMOTS *sizeof(char*));
/*****Saisi des mots du dictionnaire****/
while((termine!=1)&&(nb_mots<MAXMOTS))
{

printf("Entrez un mot (fin pour terminer): ");
scanf("%s",mot);

if (strcmp(mot,"fin")==0)
{
termine=1;
}
else
{

*(dico+nb_mots)=(char(*))malloc(strlen(mot)+1);
strcpy(*(dico+nb_mots),mot);
nb_mots++;
}
}
motrouve=dichotomie(dico,mot,nb_mots);
if (motrouve==1)
{

printf("Le mot %s a ete trouve.\n",mot);
}
else
{

printf("Le mot %s est introuvable.\n",mot);
}
/*libération d'espace mémoire*/
free(mot);
free(dico);
}
short dichotomie(char**dico,char*mot,short nb_mots)
{
/*initialisation des variables*/
int i,j,k,trouve,inter;
i=0;
j=nb_mots;
k=(nb_mots/2);
/*Affichage et saisi du mot à trouver*/
printf("Entrez le mot a trouver: ");
scanf("%s",mot);
/*recherche du mot saisi dans le dictionnaire*/
do/*faire*/
{
inter=i-j;
k=(j+i)/2;
trouve=strcmp(*(dico+k),mot);
if (trouve>0) j=k;
if (trouve<0) i=k;
if (trouve==0) inter=1;
}
while(inter>1);

if (trouve==0)
{
return 1;
}
else
{
return 0;
}
}
pourriez-vous m'aider SVP

Merci d'avance pour vos reponse.
A voir également:

3 réponses

mamiemando Messages postés 33363 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 novembre 2024 7 801
10 juin 2007 à 21:17
Pourquoi ne pas simplement utiliser un qsort ou encore mieux du C++ ?
A noter qu'en C++ la recherche se fait avec des arbres rouges noirs donc c'est optimisé (recherche en O(log(n)).
#include <string>
#include <set>
#include <iostream>

bool cherche_medor(const std::set<std::string> & mots,const std::string & mot){
    if(mots.find("plop")!=mots.end()){
        std::cout << "le mot " << mot << " a été trouvé" << std::endl;
        return true;
    }
    std::cout << "le mot " << mot << " n'a pas été trouvé" << std::endl;
    return false;
}

int main(){
    std::set<std::string> mots;
    mots.insert("tapir");
    mots.insert("plop");
    mots.insert("mamie");
    mots.insert("mando");
    cherche_medor(mots,"mando");
    cherche_medor(mots,"meme");
    return 0;
}

Bonne chance
0
pépereF Messages postés 36 Date d'inscription dimanche 11 décembre 2005 Statut Membre Dernière intervention 25 janvier 2008 2
11 juin 2007 à 06:46
merci pour ton aide.
mais je doit faire ce programme en langage c car il s'agit d'un devoir.
pourrai tu m'expliquer comment dois-je modifier mon programme pour utiliser qsort.
merci encore
0
mamiemando Messages postés 33363 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 novembre 2024 7 801
12 juin 2007 à 00:40
http://www.liafa.jussieu.fr/~zielonka/Enseignement/DevC/HTML/exemples.html
cours 10

Bonne chance
0