Glosario

Abreviado SysRPL, este es el lenguaje en el cual la mayor parte del ROM de la HP48 está escrito. También está disponible para el usuario usando HP Tools (en la PC), Jazz (en la HP) o cualquier otro de varias herramientas de desarrollo de programas. Este es el fundamento del User RPL, sólo que mucho más poderoso y mucho menos seguro (dado que toda la protección es removida, tal como la verificación de argumentos).

Mejoremos este codigo

1 respuesta [Último envío]
Integró: 17/09/2007
Envíos: 153
MonedasHP: 211
Imagen de LuisBeas
Mejoremos este codigo
 
Vie, 25/12/2009 - 16:18

Hola adictos escribí el siguiente programa usando debug4x que
toma una lista con los vértices de un polígono escritos como números
complejos y en sentido antihorario finalizando con el mismo puntos que se comenzó y calcula su perímetro su centroide y los momentos de
inercia respecto a los ejes X y Y y además los momentos de inercia
centroidales paralelos a los ejes X y Y:

{ (X1,Y1) (X2,Y2) (X3,Y3) ... (X1,Y1) } --> Perimetro Area x y Ix Ix Ixc Iyc, el codigo es:

RPL 
::
CK&DISPATCH1
BINT5	        ( se verifica que exista una lista en el primer nivel de la pila )
::	
{{ M }}       ( se guarda la lisita en M )
		
	( se comprueba que todos los elementos de la lista sean numeros complejos )
		  
TRUE
M LENCOMP #1+_ONE_DO
M INDEX@ NTHCOMPDROP TYPECMP?  AND
LOOP
		
( si todos los elementos de la lista son complejos)
ITE
::
	
  { 0. 0. 0. 0. 0. 0. }
 M LENCOMP  ONE_DO
M INDEX@ NTHCOMPDROP   C%>%
M INDEX@ #1+ NTHCOMPDROP   C%>%
0. 0.
{{ X1 Y1 X2 Y2 m b }}
  ::
   X1 X2 %= case :: Y2 Y1 %- %ABS 0. 0. 0. 0. 0.  ;
   Y1 Y2 %= case :: X2 X1 %- %ABS
                    Y1 X1 X2 %- %*
                    Y1 2. %/ X1 %SQ_  X2 %SQ_  %- %*
                    Y1 %SQ_ 2. %/ X1 X2 %- %*
		    Y1 3. %^ 3. %/ X1 X2 %- %*
		    Y1 3. %/ X1 3. %^ X2 3. %^ %- %*
												 ;
   Y2 Y1 %- X2 X1 %- %/   !m
   Y1 m X1 %* %-  !b
   Y2 Y1 %- %SQ_  X2 X1 %- %SQ_ %+ %SQRT
   m 2. %/ X1 %SQ_ X2 %SQ_ %- %* b X1 X2 %- %* %+
   m 3. %/    X1 3. %^   X2 3. %^   %-  %*   b 2. %/   X1 %SQ_  X2 %SQ_  %-  %*  %+
   m X1 %* b %+ 3. %^     m X2 %* b %+ 3. %^  %-     6. m %* %/
   m X1 %* b %+ 4. %^      m X2 %* b %+ 4. %^  %-    12. m %* %/
   m 4. %/ X1 4. %^ X2 4. %^ %- %* b 3. %/ X1 3. %^ X2 3. %^ %- %* %+

    ;
    #6 {}N
 		  
  BINT7 ONE_DO
  DUP CARCOMP SWAP CDRCOMP SWAPROT  DUP CARCOMP ROT %+
  >TCOMP CDRCOMP SWAP
  LOOP
  DROP
  ABND
			
  LOOP
  
  INNERCOMP DROP
  {{ P A MY MX IX IY }}
  P
  A
  MY A %/
  MX A %/   %>C%
  IX
  IY
  IX A MX A %/ %SQ_ %* %-
  IY A MY A %/ %SQ_ %* %-
  BINT7 {}N
   ABND
  
  ABND
  ;

( si es que alguno de los elementos de la lista no es un numero complejo)	
	 
  ::
			
   "revisa la lista"
   BINT20
   BINT10
   GROB 00026 70000B00000A0004000F00A410C0308F100900

{ NullMenuKey NullMenuKey NullMenuKey NullMenuKey NullMenuKey
{ "ok" :: TakeOver FLASHPTR DoMKeyOK ; } } ERRBEEP
ROMPTR DoMsgBox
DROP

M
  ;

;
;

Y por eso escribí "mejoremos este código", el programa corre bien pero seguro que se le puede hacer muchas mejoras, estaré esperando sus comentarios chau y Feliz navidad a todos Laughing out loud

Top
Integró: 05/06/2003
Envíos: 343
MonedasHP: 186
Imagen de GkEnte
Calc: HP50 | ROM:pasé por aquí, pero ya lo pasado pasado.
 
#1
Jue, 31/12/2009 - 22:54

He optimizado la parte de verificación de una lista que contiene números reales.

!NO CODE !RPL
::
  {{ M }}
  M INNERCOMP TRUESWAP_
  ZERO_DO
  SWAP TYPEREAL? AND
  LOOP ABND
;
@
Es mejor manejar una sola vez los objetos en la pila que estar extrayendo a cada momento... Quisiera seguir con la verificación pero no entiendo bien la estructura. Le recomiendo use los BBCODE de código, para mejorar el orden de la visualización.
- Gaak -

n/a
Top

Twitter

Cargando...

CAPTCHA
Esta pregunta es para probar si usted es un visitante humano y así evitar el spam automatizado.
2 + 0 =
Solucione este simple problema matemático e ingrese el resultado. Por ejemplo: para 1+3, ingrese 4.