Probleme dans la recherche dichotomique

yedez Messages postés 80 Statut Membre -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
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. yedez Messages postés 80 Statut Membre 2
     
    quelqu'un peut m'aider?
    0
  2. yedez Messages postés 80 Statut Membre 2
     
    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. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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. evilfalcon
       
      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. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      m est un indice. Donc, il faut qu'il soit entier...
      0
    4. evilfalcon
       
      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. yedez Messages postés 80 Statut Membre 2
       
      non mai je crois qu en C la division / donne la partie entier nn? 
      
          
      0