Probleme dans la recherche dichotomique

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

  1. quelqu'un peut m'aider?
    0
    1. 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
      1. Contributeur
        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
      2. 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
      3. Contributeur
        m est un indice. Donc, il faut qu'il soit entier...
        0
      4. 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
      5. non mai je crois qu en C la division / donne la partie entier nn?
        0