Misez p'tit, Optimisez - N°39 (Nombres de Keith)
Modérateur : Politburo
- Paul Tergeist
- Fonctionne à 9600 bauds
- Messages : 2417
- Enregistré le : 15 oct. 2007 15:50
- Localisation : 3ème planète après le soleil
Re: Misez p'tit, Optimisez - N°39 (Nombres de Keith)
C'est incroyable ça. J'ai jamais pensé à faire ça et je ne savais pas qu'on pouvait.
Je vais essayer tout de suite. Merci C.Ret
Je vais essayer tout de suite. Merci C.Ret
Re: Misez p'tit, Optimisez - N°39 (Nombres de Keith)
Extraire une racine, ça me fait penser que la semaine prochaine
je vais chez le dentiste Brrrr!!!!
je vais chez le dentiste Brrrr!!!!
Ti(s) 60, 62 Galaxy, 66, 67 Galaxy, 68, 74 Basical 80, 81, 82, 83+, 83 CE, 84+SE, 85, 86, 89, 89 titanium, 92, 95 Procalc, v200, nSpire cx
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
- Hobiecat
- Fonctionne à 9600 bauds
- Messages : 3644
- Enregistré le : 06 sept. 2011 14:57
- Localisation : Normandie
Re: Misez p'tit, Optimisez - N°39 (Nombres de Keith)
Joli ! Peut-être une idée du futur de nos calculatrices ?C.Ret a écrit :J'ai trouvé mieux pour expliquer comment extraire une racine carrée sans calculette : après les slow computing, le paper and pencil computing !
- Paul Tergeist
- Fonctionne à 9600 bauds
- Messages : 2417
- Enregistré le : 15 oct. 2007 15:50
- Localisation : 3ème planète après le soleil
Re: Misez p'tit, Optimisez - N°39 (Nombres de Keith)
Ca fait plusieurs fois que j'essaye et ça marche pas. Je pense que c'est un tour de magie.
- Hobiecat
- Fonctionne à 9600 bauds
- Messages : 3644
- Enregistré le : 06 sept. 2011 14:57
- Localisation : Normandie
Re: Misez p'tit, Optimisez - N°39 (Nombres de Keith)
J'ai essayé aussi et j'ai indiqué en haut en m'appliquant bien : "TI-88"... ça n'a pas fonctionné non plus !Paul Tergeist a écrit :Ca fait plusieurs fois que j'essaye et ça marche pas. Je pense que c'est un tour de magie.
- badaze
- Fonctionne à 14400 bauds
- Messages : 8410
- Enregistré le : 12 févr. 2007 18:36
- Localisation : Pas très loin de Lyon
- Contact :
Re: Misez p'tit, Optimisez - N°39 (Nombres de Keith)
Il y a plusieurs années, j'avais fait un rêve dans lequel je tenais une feuille de papier et sur cette feuille il y avait des smileys animés.Hobiecat a écrit :Joli ! Peut-être une idée du futur de nos calculatrices ?C.Ret a écrit :J'ai trouvé mieux pour expliquer comment extraire une racine carrée sans calculette : après les slow computing, le paper and pencil computing !
Tout est bon dans le pocket.
Moi j'aime tout.... Casio, HP, Sharp, TI et les autres sauf que les TI semblent ne pas m'aimer
http://www.emmella.fr
Mes Casio - HP - Sharp - TI
Homme invisible.
Moi j'aime tout.... Casio, HP, Sharp, TI et les autres sauf que les TI semblent ne pas m'aimer
http://www.emmella.fr
Mes Casio - HP - Sharp - TI
Homme invisible.
Re: Misez p'tit, Optimisez - N°39 (Nombres de Keith)
Vraiment très rapide !!tyann a écrit :Bonjour à tous
Pour élargir un peu l'horizon je vous propose une version Lua pour nspire toujours !Voilà comme vous pouvez le voir y a des airs de famille avec le Basic.Code : Tout sélectionner
var.monitor("n") r,nt=0,0 function sum(l) local s,d=0,0 for i,d in ipairs(l) do s=s+d end return s end function keith(n) while 1 do local s,l,i,li li={} s=tostring(n) l=string.len(s) for i=1,l do li[i]=tonumber(string.sub(s,i,i)) end while li[l]<n do li[l+1]=sum(li) table.remove(li,1) end if li[l]==n then return li[l] else n=n+1 end end end function on.varChange(n) nt=var.recall("n") r=keith(nt) platform.window:invalidate() end function on.paint(gc) gc:drawString("R="..r,10,20) end
Pour l'utilisation, une page de classeur est divisée en 2,une partie calcul et l'autre script Lua
On demande au script de surveiller les changements de la variable n
Il suffit donc de rentrer une valeur dans n <> de la précèdente dans la partie calcul pour déclencher le script et afficher le résultat dans la partie Lua.
Ha j'allais oublier: temps d'exécution pour n=70000 = 31 s 30 pas mal pour un langage interprété non ?
Une version plus courte pour 39gII mais beaucoup plus lente ! Peut etre le MAKEMAT ??
Code : Tout sélectionner
EXPORT Keith(n)
BEGIN
REPEAT
S:=FLOOR(LOG(n)+1);
M1:=MAKEMAT(INT(10*FRAC(n/10^I)),1,S);
REPEAT
T:=ROWNORM(M1); DELCOL(M1,S) ; ADDCOL(M1,[0],1);M1(1,1):=T;
IF T==n THEN BREAK(2); END;
UNTIL T>n END;
n:=n+1;
UNTIL 0 END;
T;
END;
De même ADDCOL(M1,[T],1) ne fonctionne pas ... ADDCOL(M1,[0],1);M1(1,1):=T;
et ADDCOL(M1,T,1) n'est pas permis d'après la doc.
Pas trouvé de commande pour supprimer des éléments dans une liste c'est pour cela que j'utilise une matrice
Casio FX-502P /602P / 603P / FX180P+ / FX4000P / TI57 / TI66 / TI74 Basicalc / TI95 Procalc / HP12C / HP15C LE / DM41L / HP 30B / HP39GII / HP 48SX USA / 49G / 49g+ / 50G / 50G NewRPL / HP Prime / Oric 1 / Amstrad CPC 6128+ CM14 et MM12 / Alice 32
Re: Misez p'tit, Optimisez - N°39 (Nombres de Keith)
Merci Gilles59 pour cette version hp39gii
Et les fonctions left, mid et right , ne fonctionnent pas sur les listes, contrairement au Ti BasicPas trouvé de commande pour supprimer des éléments dans une liste c'est pour cela que j'utilise une matrice
Ti(s) 60, 62 Galaxy, 66, 67 Galaxy, 68, 74 Basical 80, 81, 82, 83+, 83 CE, 84+SE, 85, 86, 89, 89 titanium, 92, 95 Procalc, v200, nSpire cx
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
Re: Misez p'tit, Optimisez - N°39 (Nombres de Keith)
Pour extraitre un sous-objet d'un objet (matrice, liste, graphique), la commande est SUB.
Mais ca déconne avec les liste => prochaine ROM
Nouvelle version, plus rapide :
Mais çà reste plus lent que LUA, Temps = 175 sec
Le même algo sur LUA (qui évite de 'bidouiller' les listes) devrait améliorer la vitesse.
Mais ca déconne avec les liste => prochaine ROM
Nouvelle version, plus rapide :
Code : Tout sélectionner
EXPORT Keith(n)
BEGIN
LOCAL s;
REPEAT
s:=string(n); N:=SIZE(s); M:=0;
L1:=MAKELIST(expr(mid(s,I,1)),I,1,N);
REPEAT
T:=ΣLIST(L1);
M:=M+1; IF M>N THEN M:=1; END;
L1(M):=T;
IF T==n THEN BREAK(2); END
UNTIL T>n END;
n:=n+1;
UNTIL 0 END;
T;
END;
Le même algo sur LUA (qui évite de 'bidouiller' les listes) devrait améliorer la vitesse.
Casio FX-502P /602P / 603P / FX180P+ / FX4000P / TI57 / TI66 / TI74 Basicalc / TI95 Procalc / HP12C / HP15C LE / DM41L / HP 30B / HP39GII / HP 48SX USA / 49G / 49g+ / 50G / 50G NewRPL / HP Prime / Oric 1 / Amstrad CPC 6128+ CM14 et MM12 / Alice 32
- C.Ret
- Fonctionne à 9600 bauds
- Messages : 3422
- Enregistré le : 31 mai 2008 23:43
- Localisation : N 49°22 E 6°10
Re: Misez p'tit, Optimisez - N°39 (Nombres de Keith)
Gilles59 a écrit :[...]Nouvelle version, plus rapide :[...]
Oui, cette dernière version correspond grosso-modo au brouillon de ce que j'étais en train d'échafauder pour cette machine. En fait surtout l'utilisation de ΣLIST.
Par contre, je ne connaissais pas MAKELIST ou MAKEMAT et donc je construisais à l'aide d'une boucle FOR/NEXT.
Par contre, j'évite (autant que possible) de sortir d'une boucle WHILE/UNTIL avec ce qui correspond à EXIT(ici si j'ai bien compris c'est BREAK) et le RETURN ne fonctionne pas. C'est peut-être lié à la ROM, mais peut-être aussi à la logique interne: comment sortir de la procèdure ou fonction alors que l'on est encore dans une (ou plusieurs) niveau de boucle ? Situation pas facile à gérer si l'on veut que son language permette la récurrence.
Code : Tout sélectionner
EXPORT NKEITH(n)
BEGIN
LOCAL d,s,k;
REPEAT
d:=SIZE(string(n)); k:=d;
L1:=MAKELIST(FLOOR(n/10^(I-1)) MOD 10,I,1,d);
REPEAT
s:=ΣLIST(L1); k:=(k MOD d)+1; L1(k):=s;
UNTIL s>=n END;
n:=n+1;
UNTIL n=1+s END;
RETURN s;
END;
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.
Re: Misez p'tit, Optimisez - N°39 (Nombres de Keith)
Hello C.ret , sur la 39GII logiquement :
RETURN permet de sortir d'une fonction depuis n'importe où, dans une boucle ou pas.
On peut préciser RETURN NomVariable (ou valeur)
BREAK permet de quitter une boucle (quelle qu'elle soit, FOR, REPEAT ou WHILE) en cours
BREAK(n) permet de sortir de 'n' boucles imbriquées (par exemple BREAK(3) )
CONTINUE est ausi bien pratique : permet d'aller au début de la boucle ( Apres le FOR avec la valeur suivante par exemple)
Un truc sympa aussi (ou presque)
asc("abs")
renvoie [ 97 98 99 ]
par contre curieux que çà rencoie une matrice au lieu d'une liste ...
sinon asc(123)-49 aurait renvoyé {1,2,3}
Je pense que c'est une erreur de conception, une liste en retour serait bien plus logique
RETURN permet de sortir d'une fonction depuis n'importe où, dans une boucle ou pas.
On peut préciser RETURN NomVariable (ou valeur)
BREAK permet de quitter une boucle (quelle qu'elle soit, FOR, REPEAT ou WHILE) en cours
BREAK(n) permet de sortir de 'n' boucles imbriquées (par exemple BREAK(3) )
Code : Tout sélectionner
FOR
FOR
FOR
... blabla...
IF .... THEN BREAK(3); END; // va en (a)
END
END
END
(a)
Un truc sympa aussi (ou presque)
asc("abs")
renvoie [ 97 98 99 ]
par contre curieux que çà rencoie une matrice au lieu d'une liste ...
sinon asc(123)-49 aurait renvoyé {1,2,3}
Je pense que c'est une erreur de conception, une liste en retour serait bien plus logique
Casio FX-502P /602P / 603P / FX180P+ / FX4000P / TI57 / TI66 / TI74 Basicalc / TI95 Procalc / HP12C / HP15C LE / DM41L / HP 30B / HP39GII / HP 48SX USA / 49G / 49g+ / 50G / 50G NewRPL / HP Prime / Oric 1 / Amstrad CPC 6128+ CM14 et MM12 / Alice 32
Re: Misez p'tit, Optimisez - N°39 (Nombres de Keith)
Bonsoir à tous
Je consulte à l'instant, j'ai rien vérifié, rien testé
mais je vois que Gilles59 passe par une conversion en chaine de caractères pour extraire
chaque chiffre au lieu des divisions par 10
Par contre je croyais que SIZE s'appliquait aux listes et que pour les chaines c'était dim(?
175 secondes , donc la nSpire grace à au Lua n'a pas dit son dernier mot, je répète ce que je dis
depuis longtemps si Ti nous offrait un Basic digne de ce nom, elle brillerai bien plus qu'actuellement
Ha oui sur Ti Basic CONT se dit Cycle.
Je consulte à l'instant, j'ai rien vérifié, rien testé
mais je vois que Gilles59 passe par une conversion en chaine de caractères pour extraire
chaque chiffre au lieu des divisions par 10
Par contre je croyais que SIZE s'appliquait aux listes et que pour les chaines c'était dim(?
175 secondes , donc la nSpire grace à au Lua n'a pas dit son dernier mot, je répète ce que je dis
depuis longtemps si Ti nous offrait un Basic digne de ce nom, elle brillerai bien plus qu'actuellement
Ha oui sur Ti Basic CONT se dit Cycle.
Ti(s) 60, 62 Galaxy, 66, 67 Galaxy, 68, 74 Basical 80, 81, 82, 83+, 83 CE, 84+SE, 85, 86, 89, 89 titanium, 92, 95 Procalc, v200, nSpire cx
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
- Paul Tergeist
- Fonctionne à 9600 bauds
- Messages : 2417
- Enregistré le : 15 oct. 2007 15:50
- Localisation : 3ème planète après le soleil
Re: Misez p'tit, Optimisez - N°39 (Nombres de Keith)
Zut ça m'arrange pas ça, je voulais me faire la main sur un simulateur HP41 en rentrantGilles59 a écrit :Pour extraitre un sous-objet d'un objet (matrice, liste, graphique), la commande est SUB.
Mais ca déconne avec les liste => prochaine ROM
les instructions dans une liste. Ex : {"LBL ESSAI" , "LBL 00" , "1" , "+" , "R/S" , "GTO 00" }
Et donc là d'après ce que tu me dis je dois attendre la prochaine ROM... snif...
Re: Misez p'tit, Optimisez - N°39 (Nombres de Keith)
Je vais essayé ça demain, une somme circulaire, pas mal Gilles59, c'était pas mal du tout , "merci Mr le président"Le même algo sur LUA (qui évite de 'bidouiller' les listes) devrait améliorer la vitesse.
Bon je m"égare là, désolé mais je sors d'une petite fête
Ti(s) 60, 62 Galaxy, 66, 67 Galaxy, 68, 74 Basical 80, 81, 82, 83+, 83 CE, 84+SE, 85, 86, 89, 89 titanium, 92, 95 Procalc, v200, nSpire cx
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
- C.Ret
- Fonctionne à 9600 bauds
- Messages : 3422
- Enregistré le : 31 mai 2008 23:43
- Localisation : N 49°22 E 6°10
Re: Misez p'tit, Optimisez - N°39 (Nombres de Keith)
Ou coder différemment le simulateur.Paul Tergeist a écrit :[...]
Et donc là d'après ce que tu me dis je dois attendre la prochaine ROM... snif...
Par exemple en utilisant une matrice ou un vecteur. Les programmes de l'HP-41c ne sont-il pas codés byte par byte dans sa mémoire ? Utiliser les codes token fera que ton simulateur s'approche un peu plus d'un émulateur et en plus prêt à permettre la Programmation Synthétique!!
Par exemple, GTO "TEST" se code dans la mémoire des HP-41 par les codes hexa 1D, F4, 54, 45, 53, 54.
Où :
1D est le Token pour GTO
F4 est le préfixe pour 4 caractères alpha
54 45 et 53 sont donc ici les codes caractères respectifs des T E S
Pourquoi ne pas utiliser un simulateur conforme qui mémorise cette séquence dans un vecteur [ 29 244 84 69 83 84 ]
Code : Tout sélectionner
LBL "ESSAI CF F5 45 53 53 41 49 [ 207 245 69 83 83 65 73
LBL 00 01 1
1 11 17
+ 40 64
STOP 84 132
GTO 00 B1 C6° 177 198° ° ou zero si encore jamais exécuté
.END. C? ?? ?? ? ? ? ? ]
Source: http://www.hpmuseum.org/prog/synth41.htm#ins
Modifié en dernier par C.Ret le 26 févr. 2013 23:35, 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.