J'ai ici un algo de recherche dichotomique que je voulais implementer en C++.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
 PROCEDURE dicho (IN t:table, IN cle_cherchee : cles,
                              OUT reussi : logique, OUT milieu indices) Est
      VAR gauche, droite : indices;
      DEBUT
              gauche := Bas(t);
              droite := haut(t);
              reussi := Faux;
              TANTQUE NON reussi ET gauche < droite  BOUCLE
                   milieu := indices#Val((Ord(gauche)+Ord(droite)) Div 2);
                   SI cle_cherchee > cle(t[milieu])
                        ALORS gauche := Succ(milieu);
                   OUSI cle_cherchee <> cle(t[milieu])
                         ALORS droite := Pred(milieu)
                    SINON reussi := vrai
                    FIN SI
               FIN BOUCLE
FIN dicho;
J'ai une solution à proposer

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
void main(){
int t[8] = {1,4,8,12,15,22,25,30}; // tableau de 8 entiers
int gauche = 0; // une variable que j'initialise au bas du tableau
int droite = 7;  // une variable que j'initialise au haut du tableau
int milieu;
int cle_cherchee = 22 // l'element cherche est 22
( reussi := Faux) // je vois pas comment implementer cette instruction en C++
     While ((NON reussi) && (gauche < droite))  // Comment implementer aussi (NON reussi)????
       milieu = (gauche + droite) DIV 2;
       if (cle_cherchee > t[milieu])
           {
              gauche = milieu+1;
               else
                    if (cle_cherchee != t[milieu])
                        droite = milieu - 1;
                        else reussi = (t[milieu]==cle_cherchee)
            } // FIN SI
}  // FIN DU PROG
Vos corrections sont les biens venues. Merci.