Recherche dichotomique
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.
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:
- Recherche dichotomique récursive c
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Rechercher ou entrer l'adresse mm - recherche google - Guide
- Recherche image - Guide
- Je recherche une chanson - Guide
- Problème recherche de chaine tv thomson - Forum Téléviseurs
3 réponses
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)).
Bonne chance
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