dichotomie.pdf
TRANSCRIPT
-
7/29/2019 dichotomie.pdf
1/4
Lalgorithme de dichotomieHenri ROLAND
Mai 2010
1) Le jeu du nombre cachAlbert a choisi un nombre compris entre 1 et 100, Bertrand doit le deviner.Bertrand fait des propositions et Albert rpond "trop grand", "trop petit" ou "gagn". Lejeu sarrte lorsque Bertrand a trouv le nombre.Faire fonctionner le jeu avec un camarade, archiver le droulement du jeu dans un tableau
sur papier.Que faut-il mmoriser ?Que faut-il archiver dans le tableau ?On dcide dappeler N le nombre cach
et R la rponse de Bertrand.Albert a choisi 63. On obtient le tableau suivant :
N R TestRponsedAlbert
63 40 RN Trop grand
60 RN Trop grand
62 RN alorsAfficher("Trop grand")
Sinon
si RN AlorsAfficher("Trop grand")
Sinon
si R
-
7/29/2019 dichotomie.pdf
2/4
On obtient lalgorithme suivant :
N Nombre alatoire compris entre 1 et 100.R0Tant que R=N Faire
Lire(R)Si R>N Alors
Afficher("Trop grand")Si RN:Then:Disp("TROP GRAND"):End:If RN:print Trop grand
if R
-
7/29/2019 dichotomie.pdf
3/4
RemarqueLes calculatrices programmables "non formelles" ne grent que les variables de typenumrique et pas les chanes de caractres. Il faut donc trouver un codage pour la rponsedAlbert.Pour simplifier, Albert tapera -1 pour "Trop petit" ou 1 pour "Trop grand" ou 0 pour"Gagn".
On obtient lalgorithme suivant :
Premire mthodeavec un entier alatoire
A1B100R2Tant que R=0 Faire
CEntier Alatoire entre A et BAfficher(C)Lire(R)Si R=1 Alors
BC-1Si R=-1 Alors
AC+1
Deuxime mthodepar dichotomie
A1B100R2Tant que R=0 Faire
CPartieEntire(A+B
2)
Afficher(C)
Lire(R)Si R=1 Alors
BC-1Si R=-1 Alors
AC+1
Programmation de la deuxime mthodeProgrammation sur TI 82 Programmation en Python 2.6
:1A:100B
:2R:While R=0:PartEnt((A+B)/2)C:Disp("PROPOSITION=",C):Input("REPONSE ?",R):If R=1:Then:C-1B:End:If R=-1
:Then
:C+1A:End:End
from math import *A=1
B=100R=2
while R !=0 :C=floor((A+B)/2.)print Proposition = ,CR=input(Rponse ? )if R==1:
B=C-1if R==-1:
A=C+1
3) Utilisation de la dichotomie pour rsoudre une
quationf est une fonction dfinie sur lintervalle [a; b] et strictement monotone sur [a; b] . Oncherche rsoudre numriquement lquation f(x) = 0. On peut liminer tout dabord les cas o f(a) = 0 ou f(b) = 0.
Lexistence dune racine
sur ]a
;b
[ est subordonne au fait quef
(a
) etf
(b
) sont designes contraires, ce qui quivaut f(a) f(b) < 0, et que f est continue sur [a ; b]. Si c est un rel de lintervalle ]a, b[, la position de par rapport c peut tre teste par
lintruction suivante :
3
-
7/29/2019 dichotomie.pdf
4/4
Si f(a)f(c) 0 alorsRechercher sur ]a;c]
SinonRechercher sur ]c;b[
Dans la pratique on prendra pour c le milieu de lintervalle [a; b].
On itrera le processus jusqu obtenir par exemple b a < pour donn.Algorithme
A, B, E et f sont donns.Si f(A)f(B)0 alors
Afficher(Pas de racine sur ]A;B[)Sinon
Tant que B-AE Faire
CA+B
2Si f(A)f(C)0 alors
BC
SinonAC
Afficher(A,B)
Ecriture du programme
Pour le programme sur TI 82 on suppose que la fonction (x x3 + x + 1) a tprlablement entre dans la variable Y1.
Programmation sur TI 82 Programmation en Python 2.6:Prompt A:Prompt B:Prompt E
:If Y1(A)*Y1(B)0:Then:Disp("PAS DE RACINE"):Else
:While B-AE:(A+B)/2C:If Y1(A)*Y1(C)0:Then:CB:Else:CA:End
:End:Disp("A=",A):Disp("B=",B)
def f(x):return x**3+x+1
A=input(A=)
B=input(B=)E=input(Prcision =)if f(A)*f(B)>=0 :
print(pas de racine entre ,A, et ,B)
else:while B-A>=E :
C=(A+B)/2.if f(A)*f(C)0 :
B=Celse :
A=Cprint(Une racine entre ,A, et ,B)
NotePour une tude plus gnrale de problmes lis la dichotomie vous pouvez consulter lesdocuments suivants disponibles sur le site de lIREM dAix-Marseille :http://www.irem.univ-mrs.fr/
Une mthode pour laborer des algorithmes itratifs. Auteur : F.Didier. Algorithmes et logique au lyce. Auteurs : P.Bouttier, A.Crumire, F.Didier, J-M.Fillia,M.Quatrini, H.Roland.
4