Oui, la 16C est imparable pour ce genre d'exercice !

Modérateur : Politburo
J'avais regarde a tout hasard si le TIprogrammeur LED avait cette fonction, mais non.
Et sur l'excellent Pockemul aussi.bernouilli92 a écrit : ↑27 sept. 2020 21:29Des simulateurs de voyager sont dispo ici :
https://stendec.io/ctb/
Je suis 100% d'accord avec toi, ce son des machines très agréable à utiliser et le manque de tests n'est qu'un défaut mineur et non blocquant car il y a toujours moyen de passer outre avec un jeu plus ou moins enchevêtré de GOTO et LBL.Gilles59 a écrit : ↑27 sept. 2020 19:06Quel dommage qu'il n'y ait pas de x<>0 , x<0 etc. On s'en sort toujours parfois en jonglant comme ici le double test x=0 x>=F pour éviter les doubles GOTO... A part ce défaut je trouve que c'est une série de calculatrices (surtout les 602-603) hyper agréable à utiliser!
dprtl a écrit : ↑27 sept. 2020 20:00Attention, la somme des bits d'un nombre codé en BCD, ça ne donne pas le même résultat ! Pour 182130867283365, je trouve 24 avec le programme ci-dessous en Basic 1000D :
Ah! Oui zut, je suis allé trop vite et j'ai pas pas vu le problème. Autant cela marche avec les bases multiples, hexadécimal, octal , etc du bianire, autant ça ne va pas avec la base décimale.
Bon, j'édite mon précèdent emessage pour indiquer mon erreur.
Faut que j'analyse cela plus en détail, il doit y avoir de quoi faire de même sur d'autres systèmes qui ont de quoi modifier le contenu des chaines.dprtl a écrit : ↑27 sept. 2020 20:00Code : Tout sélectionner
input n s$=bin$(n) t$=change$(s$,"0","","11","1+1","11","1+1") print val(t$)
Modifications acceptées, c'est comme à l'usine, mieux vaut ajouter quelques équipements pour la sécurité et éviter qu'un des gars soit broyer, écraser ou couper en deux ...cgh a écrit : ↑27 sept. 2020 20:14Code : Tout sélectionner
001*LBL "MPO96" 002 ∑REG 11 003 CL∑ 004* LBL 00 005 RCL X 2 ST/ Z MOD ∑+ X<>Y INT X>0? GTO 00 013 RCL 12 014*END
Ah! Oui, c'est presque ce que j'ai sur mon SHARP PC-1211:cgh a écrit : ↑27 sept. 2020 21:04Code : Tout sélectionner
10 "A"AREAD A:C=0 20 IF A LET A=A/2:C=C+(A<>INT A):A=INT A:GOTO 20 30 PRINT C
Code : Tout sélectionner
1:" "AREAD N:B=0
2:IF NLET N=INT N/2,B=B+(N>INT N:GOTO 2
3:PRINT B
Bon ben voilà cet MPO est terminé, c'est réglé, coupé et emballé...
Code : Tout sélectionner
002 0 X<>Y :: : 0 N 1 1
004* LBL 00 :: : ∑b nn 1
005 2 / ENTER↑ FRC : ∑b nn/2 .n 1 1 1 1
009 ST+ Z ST+ Z - : : ∑b+b nn 2 2 1
012 x>0? GTO 00 : : ∑b+b nn 1 2
014 RDN 0 : : ∑b" 1
16 octets
Code : Tout sélectionner
002 0 X<>Y :: : 0 N 1 1
004* LBL 00 :: : ∑b nn 1
005 STO Z 2 ST/ T nn/2 ∑b nn 2 2 1 2
008 MOD + R↑ nn/2 nn/2 ∑b+b nn/2 1 1 1
011 INT x>0? GTO 00 : : ∑b+b n 1 1 2
014 RDN 0 : : ∑b" 1
16 octets
Ah oui. Excellent. Jolie la boucle avec le X>0?. Je ne me souvenais plus de l'existence de ce testC.Ret a écrit : ↑28 sept. 2020 11:36Code : Tout sélectionner
002 0 X<>Y :: : 0 N 1 1 004* LBL 00 :: : ∑b nn 1 005 2 / ENTER↑ FRC : ∑b nn/2 .n 1 1 1 1 009 ST+ Z ST+ Z - : : ∑b+b nn 2 2 1 012 x>0? GTO 00 : : ∑b+b nn 1 2 014 RDN 0 : : ∑b" 1 16 octets
Moins de 22 octets , c'est facile, mes décomptes sont peut-être faux, merci de me le signaler .Code : Tout sélectionner
002 0 X<>Y :: : 0 N 1 1 004* LBL 00 :: : ∑b nn 1 005 STO Z 2 ST/ T nn/2 ∑b nn 2 2 1 2 008 MOD + R↑ nn/2 nn/2 ∑b+b nn/2 1 1 1 011 INT x>0? GTO 00 : : ∑b+b n 1 1 2 014 RDN 0 : : ∑b" 1 16 octets
Code : Tout sélectionner
« 2 MOD LAST / IP DUP « MPO96 » IFT + » 'MPO96' STO
Code : Tout sélectionner
« 2 / FP LAST IP DUP « MPO96 » IFT DUP + + » 'MPO96' STO
Code : Tout sélectionner
« DUP #1b AND SWAP SR B→R DUP « R→B bMPO96 » IFT + » 'bMPO96' STO
Bonne idée, qui m'a bien inspirée ET que j'ai un peu "comprimée" ce qui donne un bout de code plus court: Mais, je me suis dit, c'est bien pour les BASIC qui ont des instruction HEX$() , DEC(), etc.dprtl a écrit : ↑27 sept. 2020 14:51Ce programme fonctionne sur PB-1000 pour des valeurs de N jusqu'à 2^32-1 (avec 8 itérations) :Code : Tout sélectionner
10 INPUT N:N1=INT(N/65536):N2=N-65536*N1:N=0 20 N$=HEX$(N1):GOSUB 50 30 N$=HEX$(N2):GOSUB 50 40 PRINT N:GOTO 10 50 FOR I=1 TO 4:C$=MID$(N$,I,1) 60 IF C$="0" THEN 110 70 IF C$="F" THEN N=N+4:GOTO 110 80 IF C$="1" OR C$="2" OR C$="4" OR C$="8" THEN N=N+1:GOTO 110 90 IF C$="7" OR C$="B" OR C$="D" OR C$="E" THEN N=N+3:GOTO 110 100 N=N+2 110 NEXT: RETURN
Il me semble que ça ne marche pas dans ce sens là...bernouilli92 a écrit : ↑27 sept. 2020 12:02@Gilles59 pourquoi pas un while au lieu d’un do? Cela permet d’éviter le not.