Voici une version pour TI 95 en 105 pas, quelques difficultés :
En FIX n la machine arrondi l'affichage ainsi 999 999 qui devient 999.999 par le biais des /1000
s'affiche non pas 999 mais 1000, d'où la nécessité de faire un INT en FIX 0.
Sinon j'ai divisé par 1000 jusque n soit <1000 avec la levée des flags 0(K) et 1(M).
J'utilise LOG pour calculer le FIX .
000 FIX 9 CFG STO A 0 STO B 1000
012 LBL 00 IF> A GTL 01 SF IND B INC B ST/ A GTL 00
030 LBL 01 TF 00 GTL 02 0 GTL AF
042 LBL 02 2- RCL A INT LOG INT =
053 LBL AF STO C FIX IND C 0 IF< C GTL Af RCL A INT STO A
072 LBL Af CE COL 04 MRG A 0 IF= C SBL SP OLD COL 05 TF 00 'K' COL 05 TF 01 'M' HLT
098 LBL SP OLD COL 04 DEL RTN
106
Bonjour,
Nouvelle version dans laquelle j'ai remplacé 1000 par 3 INV LOG
(1 pas de gagné), j'ai oté un INT inutile et j'ai économisé un LBL en inversant un test
et enfin remplacé un SBL par un SBR( 1 lbl de gagné).
Résultat : 95 pas soit 10 pas de gagné.
000 FIX 9 CFG STO A 0 STO B 3 INV LOG
011 LBL 00 IF> A GTL 01 SF IND B INC B ST/ A GTL 00
029 LBL 01 CLR INV TF 00 GTL AF
039 2- RCL A LOG INT =
046 LBL AF STO C FIX IND C 0 IF< C GTL Af RCL A INT STO A
065 LBL Af CE COL 04 MRG A 0 IF= C SBR 0091 OLD COL 05 TF 00 'K' COL 05 TF 01 'M' HLT
091 OLD COL 04 DEL RTN
096
les 35 pas supplémentaires servent à afficher le zéro de droite.
Lorsqu'on rentrait comme nombre 1204, mon précédent code affichait 1.2k
Celui-ci affiche 1.20k en conformité avec l'énoncé.
Ce zéro coûte donc 35 pas supplémentaires.
Antoine
Modifié en dernier par antoine le 04 oct. 2022 20:07, modifié 2 fois.
FLISZT a écrit : ↑01 oct. 2022 20:44Schraf n'est pas encore intervenu, C.Ret à peine… ils nous mijotent des trucs, c'est sûr !
Oui, pour Schraf, je ne sais pas, mais C.Ret, il a surtout passé un bon Weekend en grande partie à l'usine. Mais c'est sûr cela ne les empêchera pas de nous préparer un mauvais coup... lol
zpalm a écrit : ↑02 oct. 2022 15:43Sur 48SX et 48GX on obtient "5ABC".
Sur 28S on a un message d’erreur: Bad Argument Type.
Je suis en train d'hésiter entre trois versions, la première est multi-lignes /2: 1.20/ /1: 'K'/, la seconde textuelle "1.20 K" et la dernière très RPL { 1.20 K }. Cette dernière utilise un raccourci du genre 1.20 { K } +
Sinon, j'étudie avec attention ta version HP Prime, je me suis rendu compte que je ne savais pas comment modifier les modes d'affichage et de calcul depuis un programme HPL.
FLISZT a écrit : ↑02 oct. 2022 16:44
Sur hp-28, l'utilisation des unités se fait sur deux lignes.
Ex. : 1.05
'k'
… mais au moins, on n'a peut-être pas le problème précité avec les zéros. Je n'ai pas essayé.
Tu devrai essayer avec deux lignes c'est quatre fois plus de plaisir...
tyann a écrit : ↑02 oct. 2022 18:11
Voici une version pour TI 95 en 105 pas, quelques difficultés :
En FIX n la machine arrondi l'affichage ainsi 999 999 qui devient 999.999 par le biais des /1000
s'affiche non pas 999 mais 1000, d'où la nécessité de faire un INT en FIX 0.
Sinon j'ai divisé par 1000 jusque n soit <1000 avec la levée des flags 0(K) et 1(M).
J'utilise LOG pour calculer le FIX .
J'aime bien ta version. Je suis toujours surpris par la Ti-95 et ses tests direct avec les registres. Ma version pour Ti-58c est donc très différente, mais tu me donne une idée avec ton utilisation astucieuse des drapeaux 0 et 1. On doit pouvoir se passer du compteur indirect B. héhé
Concernant les 'quelques difficultés' ces histoires d'arrondis sont comme les points des formats, ça casse les pieds.
Je sens que je vais me limiter aux exemple du premier post et pas m'en soucier. C'est comme le point décimal; je crois que je vais faire semblent de ne pas le voir.
dprtl a écrit : ↑03 oct. 2022 13:17
Si j'avais reçu ma calculette Pyra neuve et déjà rétro, j'aurais pu taper une ligne de commande shell du style :
La sortie est bricolée à grands coups de 'sed' pour coller précisément à l'énoncé
J'y comprends rien, j'ai moi aussi fait un petit programme qui affiche la série des nombres pour tester, on gagne du temps.
Non, je ne programme pas en donnant des coups à Sebastien.
FLISZT a écrit : ↑03 oct. 2022 18:42« SED c'est bien ! »
C'est pas SED, c'est SEB (Société d'Emboutissage de Bourgogne); un auto-cuiseur c'est l'idéal pour concocter rapidement un MPO bien cuit et qui garde toutes ses vitamines, c'est le bon moyen pour avoir le meilleurs TELESCORE:
J'aime bien ta version. Je suis toujours surpris par la Ti-95 et ses tests direct avec les registres. Ma version pour Ti-58c est donc très différente, mais tu me donne une idée avec ton utilisation astucieuse des drapeaux 0 et 1. On doit pouvoir se passer du compteur indirect B. héhé
J'aime bien cette TI 95 et les tests directs et indirects aussi d'ailleurs avec les registres y sont pour beaucoup.
Je me souviens que lors de la sortie de la Hp 41 cx, en lisant le banc d'essai de l'O.P j'ai cru qu'on y avait droit et
beaucoup (vraiment beaucoup) d'années plus tard lorsque j'ai eu enfin ma cx et que j'ai vu qu'en fait on avait le droit
qu'à un test entre X et le registre pointé par Y j'ai été un peu déçu.
Pour la TI 95 je regrette que l'on ne puisse pas testé x avec t comme sur les 58,59 de façon directe, on peut en utilisant l'accés au
registres internes mais ça consomme plus de pas.
Pendant que j'y suis je propose une nouvelle version dans laquelle je n'efface plus le . spécifiquement, mais je décale l'affichage
selon que l'on est en FIX 0 ou pas et j'efface soit le . soit rien puis j'affiche l'éventuelle Unité, résultat :
89 pas.
000 FIX 9 CFG STO A 0 STO B 3 INV LOG
011 LBL 00 IF> A GTL 01 SF IND B INC B ST/ A GTL 00
029 LBL 01 CLR INV TF 00 GTL AF
039 2- RCL A LOG INT =
046 LBL AF STO C FIX IND C 0 IF< C GTL Af RCL A INT STO A
065 LBL Af COL 04 0 IF= C COL 05 OLD MRG A COL 05 DEL TF 00 'K' COL 05 TF 01 'M' HLT
090
Petite précision pour ceux qui ne connaisse pas cette machine, COL xx permet de positionner le curseur dans le registre ALPHA
mais lorsque l'on Merge (MRG) ensuite un nombre c'est le dernier chiffre ou le point pour un entier qui est placé à cette position.
Nouvelle version de mon programme : J'ai mis le test pour passer en FIX 0
après le calcul avec le LOG comme il n'y a qu'un CLR à faire et économise
ainsi un GTL, j'ai ensuite remplacé les GTL par des GTO pour économiser les LBL
et viré le FIX 9 en début de programme.
Résultat : 72 pas
000 CFG STO A 0 STO B 3 INV LOG
009 IF> A GTO 0024 SF IND B INC B ST/ A GTO 009
024 2- RCL A LOG INT = INV TF 00 CLR
035 STO C FIX IND C 0 IF< C GTO 0051 RCL A INT STO A
051 COL 04 0 IF= C COL 05 OLD MRG A COL 05 DEL TF 00 'K' COL 05 TF 01 'M' HLT
073
J'ai eu beaucoup de mal à descendre en-dessous de 100 octets pour SHARP PC-1211:
MPO113 - SHARP PC-1211 (95 octets - 3 registres).gif (2.39 Kio) Vu 3067 fois
Notez que ce code fonctionne pour tout entier entre 0 et 999'999'999 inclus ce qui me coûte 3 octets pour éviter une erreur en calculant LOG N lorsque N=0. Il n'y a pas de point décimal à la fin des valeurs entières. Les zéro terminaux des parties décimales sont affichés.
Pour imprimer sur une CE-122, il faut penser à remplacer la virgule de la troisième ligne par un point-virgule afin d'avoir le nombre et l'unité sur la même ligne.
MPO113 - SHARP PC-1211 (affichages).gif (5.22 Kio) Vu 3067 fois
Par contre, si l'on entre une valeur au-delà de 999'999'999 alors l'affichage est erroné car il n'indique pas l'unité. On peut corriger cela en ajoutant D$=" KM" à la première ligne du code et 1'234'567'890 sera affiché 1.23 KM
EDIT: j'ai changé le B de mon post initial par quelque chose de bête à cause de l'ambiguïté lié aux usages francophone et anglo-saxon du 'Billion'.
antoine a écrit : ↑04 oct. 2022 11:04J'étoffe la version que je vous avais précédemment proposée à 124 pas de calcul :
[...]
Ce zéro coûte donc 35 pas supplémentaires.
Tiens, coïncidence, 35 octets c'est justmeent la taille de mon code pour HP-41C (original, sans module ou extension de quelque nature).
001 ENTER^ 010 * 019 CF 29
002 X≠0? 011 10^X 020 R^
003 LOG 012 / 021 x=0?
004 3 013 ENTER^ 022 ST* 04
005 / 014 X≠0? 023 FIX IND 04
006 INT 015 LOG 024 CLA
007 STO Z 016 x=0? 025 ARCL Z
008 3 017 DSE 04 026 ARCL IND X
009 STO 04 018 ST- 04 027 AVIEW
Bon, pour que cela marche, il faut initialiser les registres R00 R01 R02 et éventuellement R03 avec les chaines alpha respectives "" " K" " M" et éventuellement " KM".
Pour cela, je suggère la séquence suivante :
PS.: Vous noterez que j'ai fait l'effort de mettre un CF 29 dans le code pour être sûr que 123K ou 123 M s'affichent sans point (ou virgule) décimal(e).
On peut aussi supprimer la ligne 019 CF 29 et gagner deux octets. Les pointilleux de ce forum n'auront alors qu'à ajouter CF 29 à la séquence d'intialisation.
La bonne blague est que j'avais posté ce MPO et... complètement oublié que je l'avais fait !! 🫣
Je découvre donc avec un "léger" retard toutes vos réponses, il va falloir que j'en teste quelques unes en particulier celle en BASIC puisque je viens de recevoir un SHARP PC-1212 tout beau qui n'attend que ça
En tous cas bravo à vous 🫡
@C.Ret : Je suis passé de 10.8K le 29 sept à 11.1K aujourd'hui, oui oui ça grimpe petit à petit et tu as bien compris d'où était venue l'idée de ce petit MPO