Je l'ai modifiée afin de faire un mixte entre la version dynamique du manuel et la version de Danny dont le challenge est de trouver en un nombre limité de tentatives.
Comme la version du manuel, les bornes sont affichées par la machine au fur et à mesure des saisies de l'utilisateur. Mais le l'affichage "< X >" est remplacé par le compte-à-rebours du nombre de tentative autorisée.
Du point de vue technique, j'utilise un adressage indirecte pour affecter les bornes au bon registre sans faire de test, ce qui économise encore quelque label et pas.
Code : Tout sélectionner
PO
LBL0 AC "Min=" HLT Min01 010 // Saisie borne minimale → M01
+ ( "Max=" HLT Min03 020 // saisie borne maximale → M03
- MR01 ) Min02 × RAN# = INT Min04 - MR03 = x≥0 Goto0 034 // Nombresecret → M04 & Test Min < Max ?
MR02 ln ÷ 2 ln + 2 = INT Min00 044 // Initialise compteur → M00
LBL1 " ar01 < ar00 > ar03 " HLT 054 // SAISIE ESSAI → MF
MinF - MR04 = x=0 Goto2 059 // si F=M04 : Gagné !
÷ ABS + 2 = x↔MF IND MinF 067 // Adressage indirect F → M01 ou F → M03
DSZ Goto1 069 // BOUCLE COMPTEUR
"Too late" 080 // Perdu, trop de tentatives
LBL2 x=0 "HIT" ";: ar04 " 091 // Gagné et affiche nombre secret
Code : Tout sélectionner
M00: Compteur à rebours M01:Borne min M02: max-Min M03:Borne Max M04:Nombre secret MF: Tentative
L'adressage indirect est calculé à l'aide de l'écart relatif Δ entre la valeur de l'essai (MF) et le nombre secret (M04) calculé au pas 057.
Il n'y a pas de fonction SIGN sur la fx-602p, mais le rapport normalisé Δ÷|Δ| est facilement calculé (au pas 062) et ne peut prendre que trois valeurs (-1),(0) ou (+1) indiquant respectivement un essai (inférieur), (égal) ou (supérieur) au nombre secret. En ajoutant 2 (pas 064) j'obtiens directement l'adresse du registre destinataire. Ensuite, c'est un petit échange avec l'adresse calculée (contenue dans x) et la saisie (contenue dans MF) afin d'effectuer indirectement l'affectation dans M01 ou M03.
Il est possible de modifier le debut de la boucle LBL1 afin d'avoir une saisie des essais sans pression sur la touche EXE comme dans le code du manuel:
Code : Tout sélectionner
LBL1 MinF " ar01 < ar00 > ar03 " PAUSE x=F Goto1
MinF ...
Code : Tout sélectionner
Keystrokes Display Comments
---------- ----------- --------
PO Min= Saisir borne inférieure
1 EXE Max= Saisir borne supérieure
100 EXE 1<8>100 Nombre secret entre 1 et 100, reste 8 coups
50 EXE 50<7>100
75 EXE 75<6>100
87 EXE 75<5>87
81 EXE 81<4>87
84 EXE 81<3>84
82 EXE 82<2>84 (J'ai jamais de chance; pile ou face je perds à chaque fois :)
83 EXE HIT:83 Gagné !