Problème de recherche dichotomique

Fermé
man r. Messages postés 11 Date d'inscription samedi 30 mars 2013 Statut Membre Dernière intervention 1 juin 2013 - 9 avril 2013 à 23:58
bor3iIsGood Messages postés 75 Date d'inscription lundi 9 novembre 2009 Statut Membre Dernière intervention 6 décembre 2014 - 10 avril 2013 à 22:54
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 lundi 9 novembre 2009 Statut Membre Dernière intervention 6 décembre 2014 15
10 avril 2013 à 22:54
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 lundi 9 novembre 2009 Statut Membre Dernière intervention 6 décembre 2014 15
Modifié par bor3iIsGood le 10/04/2013 à 00:49
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 samedi 30 mars 2013 Statut Membre Dernière intervention 1 juin 2013
10 avril 2013 à 18:41
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