Probleme dans la recherche dichotomique

Fermé
yedez Messages postés 69 Date d'inscription dimanche 3 novembre 2013 Statut Membre Dernière intervention 28 avril 2015 - Modifié par yedez le 5/11/2013 à 23:49
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 8 nov. 2013 à 22:28
Bonjour, 





je dois faire une recherche dichotomique dans un tableau pour chercher la valeur x et renvoyer son occurence le probleme C'est que ma foncyion compile seulement si la taille de tableau ne depasse pas 4 !!!! Son 2 eme probleme C'est que l'occurence de la 1ere valeur de tableau est toujours 0!!!!
voila mon code
int seek_valeurs(int t[],int n,int v)
{
int deb,fin,m,k;
k=0;
deb=0;
fin=n;
m=(deb+fin)/2;

while (deb<fin)
{

if (t[m]>v)
{
fin=m-1;
m=(deb+fin)/2;

}
else if (t[m]<v)
{
deb=m+1;
m=(deb+fin)/2;
}
else
{k=k+1;
m=m+1;
}
}
return (k);
}
je serais reconnaissante si vous pouvez m'aider :))
            
                

2 réponses

yedez Messages postés 69 Date d'inscription dimanche 3 novembre 2013 Statut Membre Dernière intervention 28 avril 2015 2
6 nov. 2013 à 18:04
quelqu'un peut m'aider?
                
0
yedez Messages postés 69 Date d'inscription dimanche 3 novembre 2013 Statut Membre Dernière intervention 28 avril 2015 2
6 nov. 2013 à 23:30
SLt je suis parvenue a savoir ma faute et j ai change mon code mai toujours pas de compilation :(

pouvez vous m'aider
int deb,fin,m,k,test,p;

k=1;
p=0;
deb=0;
fin=n-1;
test=0;
m=(deb+fin) / 2;

while ((deb<=fin)&&(test=0))

{

if (t[m]>v)
{
fin=m-1;
m=(deb+fin) /2;
test=0;
}
else if (t[m]<v)
{
deb=m+1;
m=(deb+fin)/2;
test=0;
}
else
{
test=1;
p=m;
}
}
deb=1;
fin=n-1;
while ((test=1)&&(deb<fin))
{
if (t[p]==t[p+deb])
{
k=k+1;
deb=deb+1;
}

}


return (k);
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
7 nov. 2013 à 21:10
Bonjour,

while ((deb<=fin)&&(test=0))
En C, l'opérateur de comparaison est == et pas =.
De plus, ton code est illisible. Pourrais-tu mettre les balises "code" autour de ton code.
0
salut,

quand tu fais:
m=(deb+fin) / 2; 
tu n'as pas toujours un nombre entières, par exemple deb = 0 (ça c'est ok) et fin = n - 1 et aller prenons n = 10, tu as donc m = 4,5!!!

alors là je ne sais pas si m = 4 ou 5 voir même 0!!!
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
8 nov. 2013 à 09:40
m est un indice. Donc, il faut qu'il soit entier...
0
oui m défini comme un entier, mais ma question était :
 int m
m= 4.5
alors m est égal à quoi? 4, 5, 0 ? rien?

pour savoir s'il doit ou pas prendre en compte la parité?
0
yedez Messages postés 69 Date d'inscription dimanche 3 novembre 2013 Statut Membre Dernière intervention 28 avril 2015 2
Modifié par yedez le 8/11/2013 à 22:26
non mai je crois qu en C la division / donne la partie entier nn? 

    
0