template int Search_logic_tab(TT2 x_recherche,TT2 *x_depart, int bornemax) { if(bornemax<=0) return -4; //euh ben la j'ai pas le droit... static int count=0; //ce qu'on retourne et par defaut 0... le premier est le bon. static int tmp1; tmp1=x_recherche-*x_depart;//allez voir la o on a le plus de chance de le trouver a priori. if(tmp1<0) return -3; //n'est pas dans le tableau donne(avant meme) if(tmp1<=1) //et donc aussi >=0 { if(tmp1==0) return count; //on a fini!!! //else tmp1==1... c'est le suivant ou alors niet if(x_recherche==*(x_depart+1)) return ++count; else return -2; //n'est pas dans le tableau mais aurait pu } static int tmp2=0; if(tmp1+tmp2==0) //c'est le cas de bouclage n2 { --tmp1; //autant gagner du temps } //rechercher vraiment : //1) mettre en place les outils static TT2 *ite; //juste une case d'iterateur et static, pas besoin de la redefinir a chaque fois; ite=x_depart; //2) limiter a la zone de recherche (en positif) //if(tmp1>bornemax); //euh depuis qd 1>2 ??? if(bornemax-tmp1<0) tmp1=bornemax; //3)y aller ite+=tmp1; //allez voir la o on a le plus de chance de le trouver a priori. //recommencer les tests (mais si on change de sens (on a ete trop loin), c'est pas pareil tmp2=x_recherche-*ite; //<0 if(tmp2>0) return -1; //hors champ (apres ou dedans meme) if(tmp2==0) //return count; //on a fini! return count+=tmp1; //on a fini! et ne pas oublier de rendre le compteur a jour if(tmp1