Misez p'tit Optimisez n°98 : La saison des nombres et fractions périodiques

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
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3419
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez p'tit Optimisez n°98 : La saison des nombres et fractions périodiques

Message par C.Ret »

Schraf a écrit : 10 janv. 2021 21:21[...] ça aurait pu être un outil utilisable en classe à l'époque...[...]
Elle l'a été, c'était ma calculatrice de 'secours' pour les contrôles et partiels depuis la seconde jusqu'à la maitrise. Elle remplaçait souvent mon SHARP PC-1211 pour les épreuves où "Les Calculatrices Alphanumériques" n'étaient pas autorisées.

Je suis content , depuis que j'ai nettoyé les bulbes, recollé le film et glissé une feuille transparente HP sous ses touches, elle est bien plus facile à utiliser; plus de rebonds.

Ce qui m'a fait le plus râlé pour ce MPO ,c'est qu'il ne manque que trois ou quatre pas pour que l'algorithme original puisse être implanté; il s'agit du même algorithme que celui que j'ai mis sur les machines que je ne plus trop toucher de peur de les user. Je ne demande à l'utilisateur normalement que le nombre fractionnaire et le nombre de décimales périodiques présentent à la fin de sa saisie.

Au niveau du LBL 1, le contenu de R1 est entier. A l'aide de ALOG il est facile de transformer le nombre de chiffres périodiques en un sous-multiple de 10 qui permet par division et extraction de la partie entière de soustraire l'invariant de R1 et , après avoir mis 1 dans R0, par multiplication de corriger le dénominateur dans R2. C'est très exactement le même principe qui est utilisé dans mes codes BASIC (et RPL) !

Tiens cela me fait penser que je n'est pas fait l'exercice sur mes RPN. Leurs touches biseautées ne me manquent pas trop en se moment :)

gégé a peut-être raison ? Je passe peut-être trop de temps sur certain pocket BASIC qui ont le charme des claviers bien agréables et entièrement programmables en mode USER et USER1, des touches préfixes jaunes ou bleues, ...
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
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: Misez p'tit Optimisez n°98 : La saison des nombres et fractions périodiques

Message par Schraf »

Voici un petit voyage dans la GALAXY...

https://uabox.univ-angers.fr/index.php/ ... dvAw26w9qU

C'est amusant de voir les instructions défiler :D. J'ai une autre Ti-62 moins taguée mais je ne remets plus la main dessus...
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3419
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez p'tit Optimisez n°98 : La saison des nombres et fractions périodiques

Message par C.Ret »

Schraf a écrit : 10 janv. 2021 21:53C'est amusant de voir les instructions défiler :D. J'ai une autre Ti-62 moins taguée mais je ne remets plus la main dessus...
Oui, enfin à titre pédagogique, au début, à force c'est peut-être un peu pénible non ?

Au début, j'ai cru que tu avais laissé actif le Mode Trace. mais il semble que non, c'est comme cela tout le temps ?
On voit aussi les valeurs numériques, on peut pas faire tourner un jeu type "nombre secret" alors ?
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
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7147
Enregistré le : 31 janv. 2008 14:24
Localisation : Banlieue Paârisienne
Contact :

Re: Misez p'tit Optimisez n°98 : La saison des nombres et fractions périodiques

Message par gege »

Bonjour,
Je crois que la TI62 Galaxy est la machine la plus lente que j'aie utilisée sur la dernière décennie…
Ah sauf peut-être la MK-61.
Et… ok bon ;-)

Dommage elle est si jolie avec son bel afficheur alphanumérique et ses couleurs bien choisies...
G.E.
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: Misez p'tit Optimisez n°98 : La saison des nombres et fractions périodiques

Message par Schraf »

Bonjour,

Je suis d'accord avec Gege, la TI-62 GALAXY est plutôt belle et agréable à programmer avec son affichage 16 segments mais côté vitesse on a plus vite fait de prendre un papier et un crayon :lol:

L'histoire de me remettre dans le bain du langage APL (cf ma rubrique Misez p'tit Optimisez en version APL), voici ma proposition pour ce MPO n°98 (A tester en ligne sur TryAPL)

Code : Tout sélectionner

f←{(n÷d), n d ÷(d←a×c)∨n←⍵+(a←¯1+10*⍴⍕⍵)×⍺×c←10*(⍴⍕1|⍺)+¯2+⍺=⌊⍺}
Exemples : on met partie décimale fixe à gauche et la période à droite avec la fonction f au milieu.

Code : Tout sélectionner

      2. f 428571
┌───────────┬──┬─┐
│2.428571429│17│7│
└───────────┴──┴─┘
      2.42 f 8571
┌───────────┬──────┬──────┐
│2.428571857│809443│333300│
└───────────┴──────┴──────┘
      2.5 f 0
┌───┬─┬─┐
│2.5│5│2│
└───┴─┴─┘
      20. f 9
┌──┬──┬─┐
│21│21│1│
└──┴──┴─┘
      200. f 0
┌───┬───┬─┐
│200│200│1│
└───┴───┴─┘
      
Est-ce la peine d'expliquer le code, il est limpide non ? 8O

Code : Tout sélectionner

⍺=⌊⍺ : 1 si le paramètre ⍺ (càd celui de gauche) est un entier sinon 0. 
¯2+⍺=⌊⍺ : vaut donc -1 ou -2
⍴⍕1|⍺ : nombre de caractères de la partie fractionnaire de ⍺ (le 1|⍺ signifie ⍺ modulo 1)
10* : 10 puissance
c : C'est l'entier associé à ⍺ (2.52 -> 252)
¯1+10*⍴⍕⍵ : Même raisonnement pour obtenir les 99..99 suivant la taille de ⍵ (celui de droite)
⍵+ : on ajoute ⍵ à tout ce qui a été calculé avant et on mémorise dans la variable "a"
∨ : notation APL pour le PGCD
d : c'est le dénominateur 
n d ÷ : On divise ce vecteur (liste de nombres) par le PGCD
En version APL "classique" :
APL
APL
APL.jpg (71.68 Kio) Vu 4479 fois

Code : Tout sélectionner

      FRAC 3.56 9
3.57  357  100 
      FRAC 2 1
2.111111111  19  9 
      FRAC 2 0
2  2  1
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: Misez p'tit Optimisez n°98 : La saison des nombres et fractions périodiques

Message par Schraf »

Bonjour,

Je n'ai une HP Prime que depuis quelques jours donc si vous pouvez m'indiquer les types d'améliorations que l'on peut faire pour le MPO n°98 sur cette machine. En particulier, je vois que l'on peut appliquer une fonction à une liste :
liste
liste
liste.jpg (8.68 Kio) Vu 4468 fois
Mais ça ne fonctionne pas avec STRING.

Code : Tout sélectionner

EXPORT FR(N;P)
BEGIN
ALOG(length(STRING(P)))-1▶B;
ALOG(length(STRING(FP(N)))-2+(N==IP(N)))▶A;
A*B▶C;
P+N*C▶E;
gcd(C;E)▶F;
[E/C;E/F;C/F]
END;
Tests
Tests
TestFR.jpg (22.24 Kio) Vu 4468 fois
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3419
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez p'tit Optimisez n°98 : La saison des nombres et fractions périodiques

Message par C.Ret »

Bien ça le 20.9999999999999.... qui fait 21 ! Bravo !

J'ai modifié mon code pour afficher les résultats dans le même ordre que toi: l'algorithme est exactement celui que j'ai utilisé sur la TI-57 LCD.
je me suis inspiré de ton code pour calculer 'b', initialement mon code utilisait une boucle multipliant a et b par dix.
MPO98 - HP Prime (samples).png
MPO98 - HP Prime (samples).png (12.29 Kio) Vu 4453 fois

Concernant les amélioration :
- Tu peux faire des captures complètes à partir du HP Connectivity Kit
- Tu peux ajouter des commentaires dans le code (ils ne ralentissent pas l'engin car ce que l'on voit n'est que le block d'édition, le code est exécuté à partir de p-codes dans une partie invisible pour l'utilisateur - tout ça est rapide efficace mais consomme du kio )
- Tu peux utiliser des variables locales qui n'existent que dans les fonctions/procédures où elles sont définies.
- Tu peux aussi, comme tu l'as fait, utiliser les variables globales typées (leur noms indiquent leur format réels, complexes, vecteur, matrice ou listes) l'avantage est de les partager entre plusieurs fonctions/procédure mais aussi de pouvoir directement vérifer leur contenu après l'exécution.
- Tu peux ajouter le mot clef DEBUG; où tu veux dans le code, cela arrête l'exécution et ouvre un environnement bien sympa pour débugger, on peux y consulte le contenu des variables locales et globales, exécuter pas à pas, etc.
- Il est possible de faire des fonction spécifiques au mode CAS, on profite alors de choses fort amusantes (et parfois pénibles)
MPO98 - HP prime (code HOME).gif
MPO98 - HP prime (code HOME).gif (5.61 Kio) Vu 4453 fois
Comme tu peux le voir, j'ai ajouté un paramètre à l'instruction STRING afin d'imposer le format, le résultat de ma fonction ne dépend plus des choix fait par l'utilisateur (des espaces ou autres symbole peuvent être insérés si l'utilisateur a choisi un format d'affichage numérique spécifique).
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
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: Misez p'tit Optimisez n°98 : La saison des nombres et fractions périodiques

Message par Schraf »

Merci C.Ret pour ces précisions !

Il faut que je vois pourquoi en mode CAS les lettres sont en minuscules en faisant ALPHA+X alors qu'en mode programme elles sont en majuscules. Bizarre aussi que sur ta copie d'écran tu arrives à avoir des virgules, moi quand j'appuie sur cette touche en mode programmation, c'est un point virgule qui apparait (mais ça n'engendre pas d'erreur). Et pour la copie de l'écran je vois bien la fenêtre sur mon MAC mais pas d'export et le copier-coller ne fonctionne pas. Bref, des détails...

Code : Tout sélectionner

EXPORT MPO98(N;P)
BEGIN
LOCAL A;B;
(10^DIM(""+P)-1)
*10^(DIM(""+FP(N))-2+(N==IP(N)))▶B;
P+N*B▶A;
{A/B;exact(A/B)}
END;
Exemple
Exemple
MPO98 Exemple.png (30.66 Kio) Vu 4418 fois
Pour moi il reste un problème avec ce MPO98, c'est comment entrer des nombres du type 1,(09) car MPO98(1.0,90) = 1,9090... = 21/11 et MPO98(1,09)=1,9999... = 2. Il faudrait un truc genre MPO98(1,"09") mais EVAL n'a l'air de fonctionner qu'avec des apostrophes...
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3419
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez p'tit Optimisez n°98 : La saison des nombres et fractions périodiques

Message par C.Ret »

Schraf a écrit : 13 janv. 2021 08:34 Il faut que je vois pourquoi en mode CAS les lettres sont en minuscules en faisant ALPHA+X alors qu'en mode programme elles sont en majuscules.
Ca c'est normal, l'environnement CAS est en liaison avec le mode global (HOME), toutes les variables CAS sont en minuscules pour les différencier des variables globales. Dans le CAS les variables en majuscule sont celles du mode normal. Si une variable CAS n'est pas définie explicitement, elle s'évalue elle-même (x donne x), sinon comme en RPL, elle renvoi l'expression qui la définie .

Dans le mode normal (Touche HOME), avec les premières versions, on ne pouvait pas utiliser d'autres variables que les variables globales prédéfinies. Depuis une des versions de l'année dernière, on peut maintenant créer des variables comme on veut, il suffit de valider l'écran de confirmation.
MPO98 - HP Prime New Variable Validation (new feature).png
MPO98 - HP Prime New Variable Validation (new feature).png (8.94 Kio) Vu 4418 fois
Bizarre aussi que sur ta copie d'écran tu arrives à avoir des virgules, moi quand j'appuie sur cette touche en mode programmation, c'est un point virgule qui apparait (mais ça n'engendre pas d'erreur).
C'est simplement dû au fait que tu utilises une virgule comme séparateur décimal (Menu Setting sous la touche HOME). Pour avoir le même aspect que moi il faut utiliser le point décimal (comme les américains - j'ai d'ailleurs tout laissé en amerloque, je trouve les traductions inappropriées (par ex. Mode livre ? Queckeçait ?? Textbook me parle mieux)).
Et pour la copie de l'écran je vois bien la fenêtre sur mon MAC mais pas d'export et le copier-coller ne fonctionne pas. Bref, des détails...


Evidemment si tu utilises du matériel écossai, faut pas s'attendre à se retrouver un jour en slip... il y a comme ça quelques surprises ...

Sur les Windaubes, on fait bouton droit de la souri (il y deux boutons sur les souris IBM :) ) sur le nom de la calculette dans la fenêtre 'Calculators' et on choisi 'Get Screen Capture' une fenêtre est crée dans l'espace de travail central et il y a des boutons pour Rafraichir, Sauvegarder ou Copier dans le 'Clipboard'.
MPO98 - HP prime (screen capture windows).gif
MPO98 - HP prime (screen capture windows).gif (26.21 Kio) Vu 4416 fois
Pour moi il reste un problème avec ce MPO98, c'est comment entrer des nombres du type 1,(09) car MPO98(1.0,90) = 1,9090... = 21/11 et MPO98(1,09)=1,9999... = 2.
C'est pour cela que j'ai choisi d'entrer le nombre paramètre p comme étant le nombre de chiffres périodiques figurant à la fin du nombre saisi x. Il y a cependant un problème avec une séquence de chiffres périodiques se terminant par un zéro. Il faut alors répéter la période ou décaler pour que le zéro terminal soit pris en compte, ce n'est pas toujours facile surtout si la période est longue. Mais dans la grande majorité des cas, il y a une solution.
MPO98 - HP Prime Zero ending periodic pattern entries.png
MPO98 - HP Prime Zero ending periodic pattern entries.png (10.69 Kio) Vu 4418 fois
Sur les pockets BASIC gérant convenablement les chaines de caractères, j'utilise une entrée alphanumérique (il n'y a pas besoin de saisir les double-quotes).
L'utilisateur ne saisi pas le paramètre p, celui-ci est déduit de la position des parenthèses (en fait de la dernière parenthèse ouvrante):

Code : Tout sélectionner

Display_________________	Keystrokes____________
>                       	RUN 		[ENTER]    
x=_                     	5.5(3210	[ENTER]

x=5.5(3210
5.5(3210)               
              36877/6666
            5  3547/6666
5.53210 3210 3210 3210 ~	  		[ENTER] 
x=_
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
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: Misez p'tit Optimisez n°98 : La saison des nombres et fractions périodiques

Message par Schraf »

Bonjour,
Est-ce que quelqu'un comprend comment utiliser TYPE avec la HP Prime ? Je voulais remplacer le N==IP(N) dans mon programme qui teste si N est entier par TYPE(N). A priori TYPE est censé renvoyer 0 si c'est un nombre décimal et 1 si c'est un entier, mais quand je teste TYPE(2) la machine me donne 0 au lieu de 1. 8O
Merci
Avatar du membre
dprtl
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 463
Enregistré le : 27 janv. 2013 00:26
Localisation : Strasbourg
Contact :

Re: Misez p'tit Optimisez n°98 : La saison des nombres et fractions périodiques

Message par dprtl »

Schraf a écrit : 13 janv. 2021 21:31 Est-ce que quelqu'un comprend comment utiliser TYPE avec la HP Prime ? Je voulais remplacer le N==IP(N) dans mon programme qui teste si N est entier par TYPE(N). A priori TYPE est censé renvoyer 0 si c'est un nombre décimal et 1 si c'est un entier, mais quand je teste TYPE(2) la machine me donne 0 au lieu de 1. 8O
Je pense que cette fonction ne correspond pas à ce que tu souhaites faire. Extrait du manuel HP :

Syntaxe : TYPE(objet)
Renvoie le type de l'objet.
0 : Réel
1 : Entier
2 : Chaîne
3 : Complexe
4 : Matrice
5 : Erreur
6 : Liste
8 : Fonction
9 : Unité
14.? : objet du CAS. La partie fractionnaire est le type de CAS

Si on teste :

TYPE(2) ou TYPE(2.0) donnent 0
TYPE("2") donne 2
TYPE(#2) donne 1
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3419
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez p'tit Optimisez n°98 : La saison des nombres et fractions périodiques

Message par C.Ret »

Attention: la réponse de TYPE dépend du mode CAS ou non.

Ainsi, en mode CAS uniquement (et avec l'instruction 'type' en minuscule):
type(2) renvoi DOM_INT (entier long) et type(2.) DOM_FLOAT (réels 12 chiffres max)
type(2) et type(2.) renvoient tous les deux 0 en mode approché systématique.

En mode normal (HOME), l'instruction CAS (celle en minuscule) est systématiquement remplacée par TYPE en majuscule et tout est approché:
TYPE(2) et TYPE(2.) renvoient toujours 0 quelque soit le mode.

C'est le souci n°1 avec l'HP Prime, elle est très gravement schizophrène.
Cela vient du fait qu'elle est nait de la fusion entre l'environnement d'une HP-39G et le XCas implémenté et adapté par un passionné d'astronomie.
Avec de tels gènes, elle ne peut s'en sortir sans séquelles.


En mode normal, TYPE(#0:33h) donne 1 (entier binaire).
Modifié en dernier par C.Ret le 14 janv. 2021 12:11, modifié 1 fois.
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
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 499
Enregistré le : 05 mars 2020 20:45
Contact :

Re: Misez p'tit Optimisez n°98 : La saison des nombres et fractions périodiques

Message par Schraf »

Merci dprtl et C.Ret !

Je n'avais pas compris que la notion d'entier sur la Prime est celle "d'entier spécifié dans une base" comme #2021d ou #FFh, du moins quand on utilise TYPE en majuscules et dans le bon mode ;-).
Sinon, j'avais bien repéré que le type en minuscules renvoie du texte INT, FLOAT... comme le type du XCas de Bernard Parisse (integer, real...)
Bref, ce serait une usine à gaz que de remplacer mon N==IP(N) par cette fonction...
Répondre

Retourner vers « Tous les Pockets »