Problème de recherche dichotomique

man r. Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   -  
bor3iIsGood Messages postés 75 Date d'inscription   Statut Membre Dernière intervention   -
Salut, alors, le code est le suivant :
#include<stdio.h>
main()
{
      int tb[55],n,i,val,pos=-1,max,min,moy;
      printf("Entrer la dimension du tableau");
      scanf("%d",&n);
      for(i=0;i<n;i++)
      {
      printf("tb[%d]",i);
      scanf("%d",&tb[i]);
      }
      printf("Saisir une valeur a rechercher");
      scanf("%d",&val);
      max=n;
      min=0;
      while((max>=min)&&(pos==-1))
      {
                               moy=(max+min)/2;
                               if(val<tb[moy])
                               {
                                              max=moy-1;
                               }
                               else if(val>tb[moy])
                               {
                                    min=moy+1;
                                    }
                                    else
                                    pos=moy;
                                    }
                                    if(pos==-1)
                                    printf("la valeur se trouve pas sur le tableau");
                                    else
                                    printf("%d se trouve dans %d",val,pos);
                                    getchar();
                                    getchar();
                                    return 0;
                                    }

Ma question est la suivante, quand je change pos=-1 en une autre valeur que -1, ça marche pas comme il faut, j'aimerai bel et bien que quelqu'un m'éclaircisse la chose, merci d'avance :) !

3 réponses

bor3iIsGood Messages postés 75 Date d'inscription   Statut Membre Dernière intervention   15
 
euh bien tout simplement tab[-1] n'existe pas mais on ne connais pas la taille réelle du tabeleau et puis pos signifie la case la ou la valeur existe ca revient à dire qu'on cherche à la base tab[pos] ! et si pos > 0 donc tab[pos] existe du coup on aura tjr la mm réponce "la valeur existe ds le tabelau" !

1
bor3iIsGood Messages postés 75 Date d'inscription   Statut Membre Dernière intervention   15
 
si j'ai bien saisit il faut déjà que le tableau soit dans l'ordre croissant donc déjà il faut que ajouter un test lors du remplissage du tableau et tu aura

do {
printf("tb[%d]",i);
scanf("%d",&tb[i]);
} while ( tb[i] < tb[i - 1])

en plus le concernant le pos ne peut pas positive puisque on ne sait pas la longueur du tableau et ca peut créer un conflit avec une des valeurs du tableau.

dernièrement la variable my est de type entier donc fallait utiliser moy = (max + min ) div 2;

j'èspere que je t'ai aider un peux
0
man r. Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
Merci beaucoup de votre réponse, mais je ne comprends toujours pas comment une valeur positive de pos pourrait créer un conflit avec une des valeurs du tableau.
0