FX-602P

Frimez avec vos dernières acquisisions (évitez les liens IB, LBC, ... sauf si vous avez gagné :-)

Modérateur : Politburo

Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: FX-602P

Message par C.Ret »

La version du manuel est spectaculaire, mais, il n'y a pas de limite au nombre d'essais que l'on peut faire.

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
Dans cette version, le compteur de tentatives est initialisé à partir de la taille minimale de l'arbre binaire de recherche augmenté de 1 coup. La difficulté du jeu peut donc être ajustée en modifiant le 2 du pas 041.

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 ... 
Mais comme cela crée parfois des entrées erronées et qu'il a fallu déjà presser sur EXE pour entrer les bornes Min et Max, j'ai laissé un HLT dans un souci d'homogénéité et fiabilité des saisies.

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é !
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
Danny
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1248
Enregistré le : 28 déc. 2013 16:34

Re: FX-602P

Message par Danny »

Nice ! 8)
C.Ret a écrit : 01 nov. 2021 09:19Il 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.
Ça me rappelle ce que je fais pour programmer ce même jeu sur des HP classiques, sans pouvoir afficher de message alphabétique: le signe moins indique que c’est plus petit, et je mets le nombre de coups dans X et le dernier nombre essayé dans l’exposant.
? Apple, Atari, Canon, Casio, ????????????, HP, Psion, Sharp, Tandy... même TI.
Répondre

Retourner vers « Frimer - brag - dernières acquisitions »