J'ai voulu faire un petit code de dichotomie, dont le code est celui-ci:
► Afficher le texte
Code : Tout sélectionner
#include <array.au3>
Global $aBase[9]=["0","2","3","5","7","9","15","20","23"]
Do
$ToSearch=InputBox("","a trouver?: ")
Until $ToSearch<>""
_Dichotomie($ToSearch,$aBase)
Func _Dichotomie($ToSearch,$aBase)
if $aBase[floor(((UBound($aBase))+0)/(2))]<>$ToSearch Then ; prend la valeur de la moitié du tableau et regarde si elle vaut notre nombre
_ArrayDisplay($aBase)
If $aBase[floor(((UBound($aBase))+0)/(2))]<$ToSearch Then ;si la valeur de la moitié du tableau<nombre a chercher
MsgBox(0,"",$aBase[floor(((UBound($aBase))+0)/(2))]&"<"&$ToSearch)
for $i=0 To floor(((UBound($aBase))+0)/(2));je supprime toutes les lignes présentes avant dans le tableau
_ArrayDelete($aBase,0)
Next
_Dichotomie($ToSearch,$aBase)
Else;sinon je supprime toutes les lignes présentes après dans le tableau
MsgBox(0,"",$aBase[floor(((UBound($aBase))+0)/(2))]&">"&$ToSearch)
For $i=floor(((UBound($aBase))+0)/(2)) to UBound($aBase)-1
_ArrayDelete($aBase,floor(((UBound($aBase))+0)/(2)))
Next
_Dichotomie($ToSearch,$aBase)
EndIf
Else
Return $ToSearch
EndIf
EndFunc
Petit soucis: quand je veux savoir si la valeur présente à la moitié du tableau est inférieur ou supérieur au nombre cherché, le programme passe toujours et uniquement par le SI concernant la suppression de la partie inférieur du tableau.
Pour bien visualiser le problème, j'ai mis un msgbox dans les 2 boucles pour me tenir compte de où passait le programme.
Au début, en entrant 9 comme nombre de départ, j'ai bien 7<9 pour le premier passage, mais ensuite je me retrouve avec des 20<9 et des 23<9...
Merci d'avance!