3345 résultats trouvés

par C.Ret
06 avr. 2013 23:53
Forum : Tous les Pockets
Sujet : Misez P'tit Optimisez N°42 - Décomposition HH,MMSS
Réponses : 71
Vues : 30186

Re: Peut-être matière à un petit MPO ?

babaorhum a écrit :Sauf pour le "BASICRET" sur PC-1211, auquel on ne comprend rien !!!!! :lol:
C'est que les boucle FOR To/NEXT sur PC-1211 c'est pas rapide et ça consomment des octets.
Donc, je retire la boucle (qui est pourtant une bonne idée) et j'affecte directement les trois variables.
Ensuite j'essaie de tirer partie de la spécificité du PC-1211, à savoir la multiplication implicite.
Pour économiser les octet, j'utilise la variable E que j'initialise à 100 en utilisant 1Exp2 qui s'abrège en |E2.

Après, l'idée est de multplier par 100 autan de fois que nécesssaire pour extraire la partie entière.
Pour A c'est direct A=INT(H)
Pour B il faut extraire deux chiffres et donc multiplier par 100 d'où B=INT(100*H-100*INT(H)).
Mais on vient de calculer INT(H), on a donc B=INT(100*H-100*A).

Bon factoriser par 100 n'apporte rien car il faut écrire les parenthèses. On peut remplacer 100 par E (c'est plus court) et profiter de la multiplication implicite : B=INT (E*H-E*A) que je code B=INT (EH-EA sans fermer la parenthèse car fermer les parenthèses ou terminer les expression st facultatif sur le PC-1211, il termine et ferme les expressions pour vous.

Même raisonnement pour C, pour extraire 4 chiffre on multiplie par 10000 c'est à dire 100*100.
On utilise A et B pour ne pas avoir à recalculer les parties entière.
Et en fin de compte, on a pas besoin de INT, car le nombre H initial n'a que 4 décimales. Et s'il en avait plus de toute façon cela s'afficherait en tant que secondes fractionaires : C=EEH-EEA-EB
C=10000*22.3345 - 10000*22 - 100*33 = 223345 - 220000 - 3300 = 45

Premier avantage de mon code, il ne fais que 37 octets et ne nécessite que 3 variables:

Code : Tout sélectionner

10 INPUT C : A=INT C , B=INT (|E2C-|E2A , C=|E4C-|E4A-|E2B
Second avantage plus rapide (sur PC-1211) car pas de traitement FOR/TO/NEXT (très lent sur ce pocket)
Dernier avantage , 11.204375 h fait bien 11h12'15.75" ( 11.121575 en H.MMSSsss ) produit bien
A=11 (heures/degrés) B=12 (minutes) C=15.75 (secondes).

Je ne suis pas sûr que vos algorithmes soient capablent d'indiquer un nombre de seconde frationaires !?!

Bon, il se fait tard, je vais coucher mes Pockets et me ranger dans le tiroir du bureau pour la nuit !
par C.Ret
06 avr. 2013 22:48
Forum : Tous les Pockets
Sujet : Misez P'tit Optimisez N°42 - Décomposition HH,MMSS
Réponses : 71
Vues : 30186

Re: Peut-être matière à un petit MPO ?

Nous voici donc avec trois versions pour Pocket SHARP :

PC-1350 :

Code : Tout sélectionner

10 INPUT N:FOR I = 1 TO 3:L=INT(N):N=(N-L)*100:A(I)=L:NEXT I
PC-1500:

Code : Tout sélectionner

10 INPUT N:FOR I = 1 TO 3:L=INT(N):N=(N-L)*100:@(I)=L:NEXT I
PC-1211:

Code : Tout sélectionner

10 INPUT N:E=|E2,A=INT N,B=INT (EN-EA,C=EEN-EEA-EB
(où "|E" est le EE de la touche [ Exp ])
par C.Ret
06 avr. 2013 15:27
Forum : Tous les Pockets
Sujet : Misez P'tit Optimisez N°42 - Décomposition HH,MMSS
Réponses : 71
Vues : 30186

Re: Peut-être matière à un petit MPO ?

Paul Tergeist a écrit : Ca c'est une question...
Qu'est-ce qui est le mieux pour un MPO ?
un double click ou programmer une double exécution dans le code ?
Effectivement, une excellente question; si on ne compte que le nombre d'octets, alors la version en 5 opérations gagne. Mais si on considère que utiliser deux fois cela revient à utiliser le double, c'est l'autre version qui gagne.

Du point de vue pratique, la première version est la plus pragmatique, elle permet aussi de traiter 11.35 en utilisant que deux niveaux de la pile, la version combinant les deux opérations utilise un niveau pour rien (pour zéro).

P.S.: l'astuce du XEQ/LBL ne fonctionne pas avec les FORTRAN et autres BASIC :

Code : Tout sélectionner

10 INPUT X
20 GOSUB 40
30 GOSUB 40
40 PRINT INT(X)
50 X=100*(X-INT(X))
60 RETURN
Fini sur un RETURN without GOSUB ERROR !!
par C.Ret
06 avr. 2013 12:32
Forum : Tous les Pockets
Sujet : Tour de (mini) forth
Réponses : 26
Vues : 7756

Re: Tour de (mini) forth

Paul Tergeist a écrit :mais c'était quoi au juste le but de cet interpréteur fuckbrain ?
quels est le concept ?
j'ai du mal à comprendre.
Paul pose ici les bonnes questions.

Je crois que le seul intérêt de ce language et de se creuser les méninges pour tenter de faire quelque chose avec ce type de programmation.

En même temps, c'est une bonne illustration de ce qu'est une "Machine de Turin" et comme ce type d'interpréteur est réputé "Turing Complete" on doit pouvoir programmer dessus toutes sortes de choses.

Par ailleurs le BrainF*ck est inspiré (une simplification) du FALSE qui lui est très très proche du FORTH


Links:
http://fr.wikipedia.org/wiki/Brainfuck
http://esolangs.org/wiki/brainfuck


Tiens, c'est une idée ça, faire un interpréteur FALSE !!
http://esolangs.org/wiki/False


CAPTURES : deux captures de l'écran de mon Commodore C128D pendant et à la fin de l'execution du programme >++>++++++++[<<++++++>+>-]<[-<.+>]
cretc128dcap002.png
cretc128dcap002.png (5.58 Kio) Vu 1200 fois
cretc128dcap001.png
cretc128dcap001.png (4.62 Kio) Vu 1200 fois
par C.Ret
06 avr. 2013 08:41
Forum : Tous les Pockets
Sujet : Tour de (mini) forth
Réponses : 26
Vues : 7756

Re: Tour de (mini) forth

Sympa, sympa, c'est vite dit.

Le soucis avec le BrainF*ck c'est que l'interpréteur est simple (il faut que je retrouve la version qui "trace" les opérations en affichant la position du pointeur et le contenu des mémoires, surtout que sur Commodore C128D ça va pas trop vite ; on a le temps de voir fonctionner la "machine de Turing")

Mais le la programmation est bien moins évidente (d'où le nom de ce language) !!

Quelques exemple de programmes :

"Hello Word"

Code : Tout sélectionner

>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.>>>++++++++[<++++>-]
<.>>>++++++++++[<+++++++++>-]<---.<<<<.+++.------.--------.>>+.
L'exemple que je préfère est celui-ci, il illustre bien le principe de fonctionnemetn de "la machine" :

"Copy Cell_0 into Cel_l2" Copy la valeur du registre 0 dans le registre 2

Code : Tout sélectionner

>>      Move the pointer to cell2
[-]     Set cell2 to 0 
<<      Move the pointer back to cell0
[       While cell0 is not 0
  -       Subtract 1 from cell0
  >>      Move the pointer to cell2
  +       Add 1 to cell2
  <<      Move the pointer back to cell0
]       End while
L'interpréteur ignore tous les caractères qui ne sont pas <>-+.,[], on peux donc "copier - coller" avec les commentaires (à condition de ne pas mettre de - + ou , dans le texte !).


"Cat" : affiche ce que l'on tape.

Code : Tout sélectionner

,[.,]
Notons que pour terminer le programme, il faut ajouter à mon interpréteur une ligne qui transforme l'appuie sur la touche curseur [LEFT] en code CHR$(0) qui est le code nécessaire pour sortir de la boucle:

Code : Tout sélectionner

835 IF k$="[LEFT]" THEN K$=CHR$(0)


Je recherche dans mes archives la version avec affichage de la pile de registre et de la position du pointeur dans le programme.
par C.Ret
05 avr. 2013 23:48
Forum : Tous les Pockets
Sujet : Misez P'tit Optimisez N°42 - Décomposition HH,MMSS
Réponses : 71
Vues : 30186

Re: Peut-être matière à un petit MPO ?

Bonsoir,

Très bonne idée pour un MPO.

Je propose un code bien plus court pour HP28/48/50. Petite anectote, il faut l'utiliser deux fois pour obtenir le résultat souhaité :

PROGRAMMATION : créer le programe M42

Code : Tout sélectionner

 « IP LAST FP 1E2 *         [ENTER]                    M42                         [STO]
┌───────────────────────┐  ┌───────────────────────┐  ┌───────────────────────┐  ┌───────────────────────┐
│2:                     │  │3:                     │  │3:                     │  │3:                     │
│1:                     │  │2:                     │  │2: « IP LAST FP 1E2 * »│  │2:                     │
│« IP LAST FP 1E2 *_    │  │1: « IP LAST FP 1E2 * »│  │1:                'M42'│  │1:                     │
│   :   :   :   :   :   │  │   :   :   :   :   :   │  │   :   :   :   :   :   │  │M42:   :   :   :   :   │
└───────────────────────┘  └───────────────────────┘  └───────────────────────┘  └───────────────────────┘
UTILISATION : Saisir l'heure sous forme H.MMSS et presser deux fois de suite sur la soft-key correspondant à M42 :

Code : Tout sélectionner

 22.3345                    [M42]                      [M42]  
┌───────────────────────┐  ┌───────────────────────┐  ┌───────────────────────┐ 
│2:                     │  │3:                     │  │3:                   22│ 
│1:                     │  │2:                   22│  │2:                   33│ 
│22.3345_               │  │1:                33.45│  │1:                   45│
│M42:   :   :   :   :   │  │M42:   :   :   :   :   │  │M42:   :   :   :   :   │
└───────────────────────┘  └───────────────────────┘  └───────────────────────┘
Et donc le programme correspondant pour RPN (type HP67/97):

Code : Tout sélectionner

001 LBL A
002 INT
003 lastX
004 FRC
005 2
006 ALOG
007 ×
008 RTN
Là aussi, il faudra deux pressions sur la touche A pour obtenir le résultat souhaité.

P.S.: Pour ceux qui souhaitent éviter les doubles-clicks , on peut facilemetn transformer ces dex codes:

Code : Tout sélectionner

« 1 2 START                  
     IP LAST FP 1E2 *
  NEXT »

001 LBL "M42
002 XEQ 00
003 LBL 00
004 INT
005 LASTX
006 FRC
007 1 E2
008 *
009 RTN
par C.Ret
05 avr. 2013 22:17
Forum : Tous les Pockets
Sujet : Tour de (mini) forth
Réponses : 26
Vues : 7756

Re: Tour de (mini) forth

gege a écrit : Hello,
Surtout n'hésitez pas à proposer des langages marrants à implémenter, exemple le Prolog (mais je ne connais pas).
Il y a quelques temps, j'avais réalisé en BASIC un interpréteur pour Brainf*ck :

Code : Tout sélectionner


               MICROSOFT BASIC 7.0 PROGRAM :'BRAINFUCK'

   10 P$=">++>++++++++[<<++++++>+>-]<[-<.+>]"
   20 :
   30 :
  100 DIM M%(9999)
  110 I$="<>+-.,[]"
  120 P%=1:C%=0:L%=LEN(P$)
  140 DO
  210 :  ON INSTR(I$,MID$(P$,P%,1)) GOSUB 300,400,500,600,700,800,900,1000
  220 :  P%=P%+1
  230 LOOP UNTIL P%>L%
  250 END
  300 REM =====   <
  320 C%=C%-1
  330 RETURN
  400 REM =====   >
  420 C%=C%+1 
  430 RETURN
  500 REM =====   +
  520 M%(C%)=M%(C%)+1
  530 RETURN
  600 REM =====   -
  620 M%(C%)=M%(C%)-1
  630 RETURN
  700 REM =====   .
  710 PRINT CHR$(M%(C%));
  730 RETURN
  800 REM =====   ,
  810 PRINT "[FLS]_[LFT][NFSH]";
  820 GETKEY K$
  830 IF K$=CHR$(13) THEN K$=CHR$(10)
  840 M%(C%)=ASC(K$)
  850 PRINT "[LOW]";K$;
  860 RETURN
  900 REM =====   [
  910 I%=0:IF M%(C%)<>0 THEN RETURN
  920 DO
  930 :  IF MID$(P$,P%,1)="[" THEN I%=I%+1
  940 :  P%=P%+1
  950 :  IF MID$(P$,P%,1)="]" THEN I%=I%-1:IF I%=0 THEN EXIT
  960 LOOP
  970 RETURN
 1000 REM =====   ]
 1010 I%=0:IF M%(C%)=0 THEN RETURN
 1020 DO
 1030 :  IF MID$(P$,P%,1)="]" THEN I%=I%+1
 1040 :  P%=P%-1
 1050 :  IF MID$(P$,P%,1)="[" THEN I%=I%-1:IF I%=0 THEN EXIT
 1060 LOOP
 1070 RETURN
par C.Ret
02 avr. 2013 13:30
Forum : Tous les Pockets
Sujet : MPO n°41 : Bizarreries chez Fibonacci
Réponses : 12
Vues : 9813

Re: MPO n°41 : Bizarreries chez Fibonacci

dprtl a écrit :[...]Pour aller plus loin, il faudrait maintenant ...
déjà que je comprenne comment et pourquoi vos codes fonctionnent !!!

Force est de constater que vos solution sont correctes. Mais est-ce les seules ?
Et surtout pourquoi les égalités S1/U(B)=S2/U(B+1) ou F(A)*F(B-1)=(F(A+1)-1)*F(B-2) désigne les bonnes solutions ?!?

Je dois l'avouer, je suis un peu perdu et je ne saisi pas le principe mis en ouevre.

Mais, ce doit être cela, car effectivement :

Code : Tout sélectionner

A= 3          B=  3         C=   2 
signifie qu'en divisant la somme de trois nombres de Fibonacci consécutifs par le dernier on obtient, quelque soit ces trois nombres, le même rapport, à savoir 2 !

Vérifions:

Code : Tout sélectionner

0                             +1                            +(1)                           = 2/()=2
1                             +1                            +(2)                           = 4/()=2
1                             +2                            +(3)                           = 6/()=2
2                             +3                            +(5)                           = 10/()=2
3                             +5                            +(8)                           = 16/()=2
5                             +8                            +(13)                          = 26/()=2
8                             +13                           +(21)                          = 42/()=2
13                            +21                           +(34)                          = 68/()=2
21                            +34                           +(55)                          = 110/()=2
34                            +55                           +(89)                          = 178/()=2
55                            +89                           +(144)                         = 288/()=2
89                            +144                          +(233)                         = 466/()=2
144                           +233                          +(377)                         = 754/()=2
233                           +377                          +(610)                         = 1220/()=2
377                           +610                          +(987)                         = 1974/()=2
610                           +987                          +(1597)                        = 3194/()=2
987                           +1597                         +(2584)                        = 5168/()=2
1597                          +2584                         +(4181)                        = 8362/()=2
2584                          +4181                         +(6765)                        = 13530/()=2
4181                          +6765                         +(10946)                       = 21892/()=2
6765                          +10946                        +(17711)                       = 35422/()=2
10946                         +17711                        +(28657)                       = 57314/()=2
...
Ah! Oui, C'est juste. Mince alors.

Exemple suivant :

Code : Tout sélectionner

A= 6 (somme de six nombres de Fibonacci consécutifs)      B=5 (divisée par l'avant dernier)        C=4 (donne à chaque fois)
0              +1             +1             +2             +(3)           +5              = 12/()=4
1              +1             +2             +3             +(5)           +8              = 20/()=4
1              +2             +3             +5             +(8)           +13             = 32/()=4
2              +3             +5             +8             +(13)          +21             = 52/()=4
3              +5             +8             +13            +(21)          +34             = 84/()=4
5              +8             +13            +21            +(34)          +55             = 136/()=4
8              +13            +21            +34            +(55)          +89             = 220/()=4
13             +21            +34            +55            +(89)          +144            = 356/()=4
21             +34            +55            +89            +(144)         +233            = 576/()=4
34             +55            +89            +144           +(233)         +377            = 932/()=4
55             +89            +144           +233           +(377)         +610            = 1508/()=4
89             +144           +233           +377           +(610)         +987            = 2440/()=4
144            +233           +377           +610           +(987)         +1597           = 3948/()=4
233            +377           +610           +987           +(1597)        +2584           = 6388/()=4
377            +610           +987           +1597          +(2584)        +4181           = 10336/()=4
610            +987           +1597          +2584          +(4181)        +6765           = 16724/()=4
987            +1597          +2584          +4181          +(6765)        +10946          = 27060/()=4
1597           +2584          +4181          +6765          +(10946)       +17711          = 43784/()=4
2584           +4181          +6765          +10946         +(17711)       +28657          = 70844/()=4
4181           +6765          +10946         +17711         +(28657)       +46368          = 114628/()=4
6765           +10946         +17711         +28657         +(46368)       +75025          = 185472/()=4
10946          +17711         +28657         +46368         +(75025)       +121393         = 300100/()=4
...
C'est pas une coïncidence alors.


Et l'exemple historique, proposé par gégé et fort habilement démontré par Bernouilli92 :

Code : Tout sélectionner

A=10            B=7           C=11 
0        +1       +1       +2       +3       +5       +(8)     +13      +21      +34       = 88/()=11
1        +1       +2       +3       +5       +8       +(13)    +21      +34      +55       = 143/()=11
1        +2       +3       +5       +8       +13      +(21)    +34      +55      +89       = 231/()=11
2        +3       +5       +8       +13      +21      +(34)    +55      +89      +144      = 374/()=11
3        +5       +8       +13      +21      +34      +(55)    +89      +144     +233      = 605/()=11
5        +8       +13      +21      +34      +55      +(89)    +144     +233     +377      = 979/()=11
8        +13      +21      +34      +55      +89      +(144)   +233     +377     +610      = 1584/()=11
13       +21      +34      +55      +89      +144     +(233)   +377     +610     +987      = 2563/()=11
21       +34      +55      +89      +144     +233     +(377)   +610     +987     +1597     = 4147/()=11
34       +55      +89      +144     +233     +377     +(610)   +987     +1597    +2584     = 6710/()=11
55       +89      +144     +233     +377     +610     +(987)   +1597    +2584    +4181     = 10857/()=11
89       +144     +233     +377     +610     +987     +(1597)  +2584    +4181    +6765     = 17567/()=11
144      +233     +377     +610     +987     +1597    +(2584)  +4181    +6765    +10946    = 28424/()=11
233      +377     +610     +987     +1597    +2584    +(4181)  +6765    +10946   +17711    = 45991/()=11
377      +610     +987     +1597    +2584    +4181    +(6765)  +10946   +17711   +28657    = 74415/()=11
610      +987     +1597    +2584    +4181    +6765    +(10946) +17711   +28657   +46368    = 120406/()=11
987      +1597    +2584    +4181    +6765    +10946   +(17711) +28657   +46368   +75025    = 194821/()=11
1597     +2584    +4181    +6765    +10946   +17711   +(28657) +46368   +75025   +121393   = 315227/()=11
2584     +4181    +6765    +10946   +17711   +28657   +(46368) +75025   +121393  +196418   = 510048/()=11
4181     +6765    +10946   +17711   +28657   +46368   +(75025) +121393  +196418  +317811   = 825275/()=11
6765     +10946   +17711   +28657   +46368   +75025   +(121393)+196418  +317811  +514229   = 1335323/()=11
10946    +17711   +28657   +46368   +75025   +121393  +(196418)+317811  +514229  +832040   = 2160598/()=11
Bon, mais pourquoi n'y en a-t-il pas avec l'avant avant-dernier ?
Pourquoi C est-il toujours un entier ?

Code : Tout sélectionner

A=14            B=9           C=29 
0     +1    +1    +2    +3    +5    +8    +13   +(21) +34   +55   +89   +144  +233   = 609/()=29
1     +1    +2    +3    +5    +8    +13   +21   +(34) +55   +89   +144  +233  +377   = 986/()=29
1     +2    +3    +5    +8    +13   +21   +34   +(55) +89   +144  +233  +377  +610   = 1595/()=29
2     +3    +5    +8    +13   +21   +34   +55   +(89) +144  +233  +377  +610  +987   = 2581/()=29
3     +5    +8    +13   +21   +34   +55   +89   +(144)+233  +377  +610  +987  +1597  = 4176/()=29
5     +8    +13   +21   +34   +55   +89   +144  +(233)+377  +610  +987  +1597 +2584  = 6757/()=29
8     +13   +21   +34   +55   +89   +144  +233  +(377)+610  +987  +1597 +2584 +4181  = 10933/()=29
13    +21   +34   +55   +89   +144  +233  +377  +(610)+987  +1597 +2584 +4181 +6765  = 17690/()=29
21    +34   +55   +89   +144  +233  +377  +610  +(987)+1597 +2584 +4181 +6765 +10946 = 28623/()=29
34    +55   +89   +144  +233  +377  +610  +987  +(1597)+2584 +4181 +6765 +10946+17711 = 46313/()=29
55    +89   +144  +233  +377  +610  +987  +1597 +(2584)+4181 +6765 +10946+17711+28657 = 74936/()=29
89    +144  +233  +377  +610  +987  +1597 +2584 +(4181)+6765 +10946+17711+28657+46368 = 121249/()=29
144   +233  +377  +610  +987  +1597 +2584 +4181 +(6765)+10946+17711+28657+46368+75025 = 196185/()=29
233   +377  +610  +987  +1597 +2584 +4181 +6765 +(10946)+17711+28657+46368+75025+121393 = 317434/()=29
377   +610  +987  +1597 +2584 +4181 +6765 +10946+(17711)+28657+46368+75025+121393+196418 = 513619/()=29
610   +987  +1597 +2584 +4181 +6765 +10946+17711+(28657)+46368+75025+121393+196418+317811 = 831053/()=29
987   +1597 +2584 +4181 +6765 +10946+17711+28657+(46368)+75025+121393+196418+317811+514229 = 1344672/()=29
1597  +2584 +4181 +6765 +10946+17711+28657+46368+(75025)+121393+196418+317811+514229+832040 = 2175725/()=29
2584  +4181 +6765 +10946+17711+28657+46368+75025+(121393)+196418+317811+514229+832040+1346269 = 3520397/()=29
4181  +6765 +10946+17711+28657+46368+75025+121393+(196418)+317811+514229+832040+1346269+2178309 = 5696122/()=29
6765  +10946+17711+28657+46368+75025+121393+196418+(317811)+514229+832040+1346269+2178309+3524578 = 9216519/()=29
10946 +17711+28657+46368+75025+121393+196418+317811+(514229)+832040+1346269+2178309+3524578+5702887 = 14912641/()=29
...
Et là aussi, c'est sûr qu'il n'y en a pas avec B=8 ?, quitte à avoir un C fractionel ?


Il y a aussi,
A=1 B=1 C=1 (on fait la somme d'un seul nombre et on le divise par lui-même !)

Code : Tout sélectionner


A=1            B=1            C=1
(0)                                     = 0/()= **ind**
(1)                                     = 1/()=1
(1)                                     = 1/()=1
(2)                                     = 2/()=1
(3)                                     = 3/()=1
(5)                                     = 5/()=1
(8)                                     = 8/()=1
(13)                                    = 13/()=1
(21)                                    = 21/()=1
(34)                                    = 34/()=1
(55)                                    = 55/()=1
(89)                                    = 89/()=1
(144)                                   = 144/()=1
(233)                                   = 233/()=1
(377)                                   = 377/()=1
(610)                                   = 610/()=1
...

A=2 B=3 C=1 (on fait la somme de deux nombes consécutifs et on trouve bien évidemment que c'est égal au nobre de Fibonacci suivant).

Code : Tout sélectionner

A=2            B=3            C=1
0                   +1                   = 1/(1)=1
1                   +1                   = 2/(2)=1
1                   +2                   = 3/(3)=1
2                   +3                   = 5/(5)=1
3                   +5                   = 8/(8)=1
5                   +8                   = 13/(13)=1
8                   +13                  = 21/(21)=1
13                  +21                  = 34/(34)=1
21                  +34                  = 55/(55)=1
34                  +55                  = 89/(89)=1
55                  +89                  = 144/(144)=1
89                  +144                 = 233/(233)=1
...
par C.Ret
26 mars 2013 17:23
Forum : Tous les Pockets
Sujet : [39gII] Tunnel game
Réponses : 63
Vues : 15603

Re: [39gII] Tunnel game

Merci Paul, le souci est que l'émulateur ne donne pas une idée réelle de la vitesse de fonctionnement.
Gilles en avait parlé, c'est pour cela qu'il utilise la fonction TICKS et pas le WAIT.

Pour la vidéo, c'est sûr que Mic a utilisé un programme de capture d'écran (et pas une caméra filmant l'écran d'une calculette) C'est pour cela que c'est fluide et rapide , comme sur mon émulateur.
par C.Ret
26 mars 2013 16:13
Forum : Tous les Pockets
Sujet : [39gII] Tunnel game
Réponses : 63
Vues : 15603

Re: [39gII] Tunnel game

Ah! Merci Paul pour cette aide précieuse.

Effectivement, c'est une erreur, le DIMGROB de mon programme doit être un DIMGROB_P !!!

Ce qui expliquerait le "plantage", car sans le suffixe _P, cela revient à demander de réserver une mémoire énorme énorme énorme (*) surtout si les xmin/xmax et ymin/ymax sont loin de la zone 0-255 et 0-111 !!!

Sur l'émuilateur, on ne s'en rend pas compte. Mais cela doit faire la différence sur une vraie HP-39gii.

Si c'est bien cela, le code suivant devrait foctionner, au moins aussi bien que le programme de Gilles59 !

Code : Tout sélectionner

EXPORT Tunnel()
BEGIN
LOCAL k,y1,y2,n;
DIMGROB_P(G1,255,111);

REPEAT 
 IF n<=0 THEN
 RANDOM(13,53)►y1;
 RANDOM(76,115)►y2;
 RANDOM(0,19)►n;
ELSE n-1►n END;

 LINE_P(G0,255, 0,255, y1,1);
 LINE_P(G0,255,y1,255,y2,2);
 LINE_P(G0,255,y2,255,126,3);

 SUBGROB_P(G0,1,8,256,119,G1);
 BLIT_P(G0,0,8,G1);
 WAIT(.025);
UNTIL GETKEY()<>-1;

FREEZE;
END;

(*) trois fois hélas.
par C.Ret
26 mars 2013 08:29
Forum : Tous les Pockets
Sujet : [39gII] Tunnel game
Réponses : 63
Vues : 15603

Re: [39gII] Tunnel game

Paul Tergeist a écrit : Quand j'essaye CAVE sur l’émulateur ça fonctionne
Je n'ai que l'émulateur pour essayer.
Paul Tergeist a écrit :mais quand je l'essaye sur ma HP39Gii réelle, ça reboote la machine et j'ai un message
"Mémoire pleine". C'est normal ?
Mes exemples de scrolling fonctionnent-ils sur une vraie HP-39gii ??

Paul le vrai beta-testeur ...
par C.Ret
25 mars 2013 17:18
Forum : Tous les Pockets
Sujet : [39gII] Tunnel game
Réponses : 63
Vues : 15603

Re: [39gII] Tunnel game

Mic a écrit :Uhm ya un truc qui m'échappe là. J'ai essayé de laisser une partie statique sur une bande de 15 pixels en haut.
Je commence alors le random de y1, le 1er pixon et le 1er line à 15 au lieu de 0.
Je descend la hauteur du DIMGROB à 112 au lieu de 127.
Enfin, je change le SUBGROB_P(G0,1,0,256,127,G1); en SUBGROB_P(G0,1,15,256,127,G1);

le scrolling me fait n'importe quoi (déviation en biais).
:?:
Il ne faut pas oublier de modifier aussi les coordonnées du BLIT, sinon il prend par défaut la position 'HOME' est donc l'écran est décallé.

Comme j'ai peur de ne pas être très clair, voici mon programme de 'Tunnel' qui laisse 8 pixel en heut et 8 pixels en bas immobiles.

Code : Tout sélectionner

EXPORT Tunnel()
BEGIN
LOCAL k,y1,y2,n;
DIMGROB(G1,255,111);

REPEAT 
 IF n<=0 THEN
 RANDOM(13,53)►y1;
 RANDOM(76,115)►y2;
 RANDOM(0,19)►n;
ELSE n-1►n END;

 PIXON_P(G0,255,0,0);
 LINE_P(G0,255, 0,255, y1,1);
 LINE_P(G0,255,y1,255,y2,2);
 LINE_P(G0,255,y2,255,126,3);
 PIXON_P(G0,255,126,0);

 SUBGROB_P(G0,1,8,256,119,G1);
 BLIT_P(G0,0,8,G1);
 WAIT(.025);
UNTIL GETKEY()<>-1;

FREEZE;
END;
L'efet de scrolling provient du fait que la co^pie est faite (par SUBGROP) à partir des coordonnées (1,8) et que le BLIT ré-affiche à partir de la postiont (0,8). C'est à dire même hauteur, mais un pixel à gauche !

En fait, on peut scroller dans tous les sens et même en diagonale !!
crethp39giishorttunel.png
crethp39giishorttunel.png (8.51 Kio) Vu 1386 fois
par C.Ret
24 mars 2013 18:08
Forum : Tous les Pockets
Sujet : [39gII] Tunnel game
Réponses : 63
Vues : 15603

Re: [39gII] Tunnel game

Oui, des idées :
- Pour mémoriser le scrolling : dans mon post précèdent, le tnuel est mémorisé aléatoirement. Unesolution peut être de créer un tableau (ou un vecteur) qui donne la 'forme' du tunel.

Une autre solution est d'utiliser GETPIX() pour 'lire' en direct s'il le vaisseau ne pertuce pas quelque obstacle.

- Pour une zone fixe, c'est facile, il faut diminuer la zone que l'on scrolle. Par exemple, on laisse le haut et le bas fixe pour l'affichage du score, du nbre de vies et l'éventuel bouclier.
par C.Ret
24 mars 2013 00:17
Forum : Tous les Pockets
Sujet : Palindromes numériques
Réponses : 29
Vues : 9546

Re: Palindromes numériques

C'est peut-être cela qui motive la vidéo; même un palindrome de 351 chiffres produit une diffèrence minimale de 11 !

Mais, cette diffèrence est "peu naturelle", il faut pour s'en rendre compte vraiment considérer des palindromes "en fin de ligne".
Mais, bon, c'est bien là toute "la magie des mathèmatiques".
par C.Ret
23 mars 2013 11:04
Forum : Tous les Pockets
Sujet : WP34s : l'émulateur pour iOS est disponible
Réponses : 12
Vues : 8242

Re: WP34s : l'émulateur pour iOS est disponible

Ce test où on utilise un ENTER^ de trop permet de distinguer les logique "RPN" et "RPL".
Mais, la distinction est subtile, il n'y a pas que les HP-28/48/49/50 qui ont une logique "RPL", il y a aussi les HP-33 et HP-35S.

En fait la diffèrence provient de la méthod de saisie des expression. Sur les calculettes les plus ancienne, la saiie se fait directemetn dans le registre x: (qui sert de registre d'entrée).

Alors que sur les calculette et pockette plus récent, il peut y avoir (ou non) un tampon d'entrée. Ce qui fait que la touche [ENTER] n'est plus un séparateur de saisie, mais plutôt une validation de la saisie qui lance son interprétation. C'est le même [ENTER] que celui d'une ligne de commande DOS.

Ce qui se passe est alors bien mis en évidence si l'on compare pas à pas ce qui se passe sur une calculette RPN (à gauche) et une calculette ou un pocket RPL (à droite) :

Code : Tout sélectionner


       * R * P * N *              * R * P * L *
t:                         ┌───────────────────────┐
z:                         │4:                     │
y:                         │3:                     │
  ┌───────────────────────┐│2:                     │
x:│ 0.0000                ││1:                     │
  └───────────────────────┘└───────────────────────┘

 [ 2 ]                      [ 2 ]
t:                         ┌───────────────────────┐
z:                         │3:                     │
y:                         │2:                     │
  ┌───────────────────────┐│1:                     │
x:│ 2_                    ││2_                     │
  └───────────────────────┘└───────────────────────┘

[ENTER^]                    [ENTER]
t:                         ┌───────────────────────┐
z:                         │4:                     │
y:  2.0000                 │3:                     │
  ┌───────────────────────┐│2:                     │
x:│ 2.0000                ││1:                    2│
  └───────────────────────┘└───────────────────────┘

 [ 3 ]                      [ 3 ]
t:                         ┌───────────────────────┐
z:                         │3:                     │
y:  2.0000                 │2:                     │
  ┌───────────────────────┐│1:                    2│
x:│ 3_                    ││3_                     │
  └───────────────────────┘└───────────────────────┘

 [ ENTER^ ]                 [ENTER]
t:                         ┌───────────────────────┐
z:  2.0000                 │4:                     │
y:  3.0000                 │3:                     │
  ┌───────────────────────┐│2:                    2│
x:│ 3.0000                ││1:                    3│
  └───────────────────────┘└───────────────────────┘

 [ + ]                      [ + ]
t:                         ┌───────────────────────┐
z:                         │4:                     │
y:  2.0000                 │3:                     │
  ┌───────────────────────┐│2:                     │
x:│ 6.0000                ││1:                    5│
  └───────────────────────┘└───────────────────────┘

La touche [ENTER^] met fain à la saiie et duplique le registre d'entrée x: afin de préparer le RPN à la saiie suivante.
La touche [ENTER] valide la ligne de saisie et l'interprète en tant que ligne de commande.

A noter que RPN et RPL donne le même résultat si on évite d'utiliser [ENTER] avant un opératueur :

Code : Tout sélectionner

       * R * P * N *              * R * P * L *
t:                         ┌───────────────────────┐
z:                         │4:                     │
y:                         │3:                     │
  ┌───────────────────────┐│2:                     │
x:│ 0.0000                ││1:                     │
  └───────────────────────┘└───────────────────────┘

 [ 2 ]                      [ 2 ]
t:                         ┌───────────────────────┐
z:                         │3:                     │
y:                         │2:                     │
  ┌───────────────────────┐│1:                     │
x:│ 2_                    ││2_                     │
  └───────────────────────┘└───────────────────────┘

[ENTER^]                    [ENTER]
t:                         ┌───────────────────────┐
z:                         │4:                     │
y:  2.0000                 │3:                     │
  ┌───────────────────────┐│2:                     │
x:│ 2.0000                ││1:                    2│
  └───────────────────────┘└───────────────────────┘

 [ 3 ]                      [ 3 ]
t:                         ┌───────────────────────┐
z:                         │3:                     │
y:  2.0000                 │2:                     │
  ┌───────────────────────┐│1:                    2│
x:│ 3_                    ││3_                     │
  └───────────────────────┘└───────────────────────┘

 [ + ]                      [ + ]
t:                         ┌───────────────────────┐
z:                         │4:                     │
y:                         │3:                     │
  ┌───────────────────────┐│2:                     │
x:│ 5.0000                ││1:                    5│
  └───────────────────────┘└───────────────────────┘

Aller à la recherche avancée