Misez p'tit Optimisez n°87 : solution entière à une équation diophantienne

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

Avatar du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2918
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: Misez p'tit Optimisez n°87 : solution entière à une équation diophantienne

Message par zpalm »

C.Ret a écrit : 15 déc. 2018 10:19
dprtl a écrit : 14 déc. 2018 22:59 […] Difficile de faire mieux non ?
Oui, difficile, mais pas impossible :
Une version en 23 pas pour 41C:

Code : Tout sélectionner

01 LBL "MPO87"
02 LBL 01 2 RCL Y y^x 60912 - SQRT FRC x=0? XEQ 02 SIGN - GTO 01
15 LBL 02 CLA "X=" ARCL Y |-" Y=" ARCL L AVIEW STOP RTN
Entrer la valeur max de X (optionnellement FIX 0) et lancer le programme.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3404
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez p'tit Optimisez n°87 : solution entière à une équation diophantienne

Message par C.Ret »

Oui bien joué, j'ai devant moi l'impression d'un programme pour HP-41C presque identique:
mpo 87 HP-41C paper print.gif
mpo 87 HP-41C paper print.gif (31.29 Kio) Vu 3810 fois

Les différences proviennent du fait que j'ai "fusionné" le sous-programme d'affichage avec la boucle principale. Mais sinon, c'est bien le même code et le même usage.

On saisit la limite supérieur et on lance le programme qui décrémente X à la recherche des solutions entières pour Y.

Comme sur la version CASIO, il est possible d'éviter l'arrêt du programme sur une erreur à l'aide d'une instruction ABS judicieusement placée (cf. instruction 10)

Sans cette instruction, le programme est moins facile d'utilisation car le résultat est effacé par un DATA ERROR et il faut effacer l'erreor et afficher le registre Alpha pour lire à nouveau le résultat.
Sauf bien sûr à utiliser une imprimante, dans ce cas, le AVIEW imprime le résultat. On peut alors utiliser un code un peu plus court sans l'ABS ce qui arrêtera le programme.
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
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2918
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: Misez p'tit Optimisez n°87 : solution entière à une équation diophantienne

Message par zpalm »

C.Ret a écrit : 15 déc. 2018 14:23 Les différences proviennent du fait que j'ai "fusionné" le sous-programme d'affichage avec la boucle principale.
Bien vu ! Tu n'as pas besoin de ABS si tu remplaces AVIEW par PROMPT.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3404
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez p'tit Optimisez n°87 : solution entière à une équation diophantienne

Message par C.Ret »

Excellente suggestion. Le PROMPT permet à l'utilisateur d'avancer à son rythme et donc de ne pas perdre un seul résultat même sans imprimante.

Par ailleurs, j'ai trouvé un moyen de séparer les deux valeurs sans utiliser les ":".

J'utilise le séparateur décimal qui peut être forcé avec le flag SF 29. Les nombres même entiers (FIX 0) sont alors ajoutés dans le registre Alpha avec leur point (CF 28) ou leur virgule (SF 28) décimal

Code : Tout sélectionner

01►LBL "MPO87"
02   CLA  ARCL X  2  RCL Y  Y^X  60912  -  SQRT  ARCL X  
11   FRC  X=0?  PROMPT  RDN  DSE X  GTO "MPO87"
17 END
Je maitrise aussi de mieux en mieux la CASIO fx602p que l'on m'a confiée. Je n'ai plus besoin du sous-programme :

Code : Tout sélectionner

P4 LBL0  2 x^y MR00 - 60912 = ABS √ Min01 FRAC x=0? “ AR00 , AR01 ” DSZ GOTO0	  24 steps

L'astuce est que toutes les commandes Alpha comprises entre les deux guillemets sont considérée par le test x=0? comme une seule et unique instruction qui est "skippée" lorsque Y n'est pas entier :)
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.
Répondre

Retourner vers « Tous les Pockets »