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).

Eliminar valores de una lista

11 respuestas [Último envío]
Integró: 26/12/2007
Envíos: 627
MonedasHP: 593
Imagen de Dani_
Calc: HP50 | ROM:2.09
Eliminar valores de una lista
 
Mar, 06/07/2010 - 16:51

Hola, aquí les planteo una pregunta.
Tengo una lista que puede contener una n cantidad de valores, de la siguiente manera:

{2 3 5 7 11 13 17 19 23....x}

Como pueden ver es una lista de números primos.

Quisiera implementar un programa que elimine algunos valores, para que la lista quede de la siguiente manera:

{2 5 11 17 23....x}

Alguien tiene una idea de como hacer esto? No quiero hacerlo para una lista de tamaño fijo, sino que el programa sea aplicable a una lista de tamaño arbitrario (no importa si no funciona para una lista vacía).

Saludos.

Ingeniero. Usuario de HP 50g.

Top
Integró: 20/03/2009
Envíos: 462
MonedasHP: 420
Imagen de VereV
AdictoHP+
Calc: HP50
 
#1
Mar, 06/07/2010 - 17:45

Fijate si te sirve:

«
DUP
SIZE 'N' STO
N 2 MOD 1 IF == THEN
N 1 - 'N' STO
END
REVLIST
EVAL
1 LIST
1 N 2 / FOR i
SWAP DROP
SWAP +
NEXT
{ N } PURGE
»

Como se haría con variables locales? así me voy acostumbrando a trabajar bien Tongue

Top
Integró: 26/12/2007
Envíos: 627
MonedasHP: 593
Imagen de Dani_
Calc: HP50 | ROM:2.09
 
#2
Mar, 06/07/2010 - 19:58

Gracias VereV, funciona bien.
Con variables locales sería así:

«
DUP
SIZE  N
«
N 2 MOD 1 IF == THEN
N 1 - 'N' STO
END
REVLIST
EVAL
1 LIST
1 N 2 / FOR i
SWAP DROP
SWAP +
NEXT
»
»

Como ves es muy simple, para crear la variable N, en lugar de usar 'N' STO se usa -> N, luego se usa 'N' STO para guardar otros valores en esa variable.
El resto del programa va encerrado en nuevos delimitadores de <<>> y se omite el {N} PURGE al final ya que no es necesario (las variables locales dejan de existir una vez finalizado el programa).

Ingeniero. Usuario de HP 50g.

Top
Integró: 20/03/2009
Envíos: 462
MonedasHP: 420
Imagen de VereV
AdictoHP+
Calc: HP50
 
#3
Mar, 06/07/2010 - 20:16

Dani_ cita:
Gracias VereV, funciona bien.
Con variables locales sería así:

«
DUP
SIZE  N
«
N 2 MOD 1 IF == THEN
N 1 - 'N' STO
END
REVLIST
EVAL
1 LIST
1 N 2 / FOR i
SWAP DROP
SWAP +
NEXT
»
»

Como ves es muy simple, para crear la variable N, en lugar de usar 'N' STO se usa -> N, luego se usa 'N' STO para guardar otros valores en esa variable.
El resto del programa va encerrado en nuevos delimitadores de <<>> y se omite el {N} PURGE al final ya que no es necesario (las variables locales dejan de existir una vez finalizado el programa).

Perfecto gracias, igual te hago una pregunta? Cada vez defino una variable local tengo que abrir << >> denuevo?

PD: Como hago para eliminar un elemento de una lista? No con TAIL, sino quiero decir, eliminame el elemento 3 y que lo elimine...

Top
Integró: 17/09/2007
Envíos: 153
MonedasHP: 211
Imagen de LuisBeas
 
#4
Mar, 06/07/2010 - 20:12

Hola tu quieres eleminar los valores en posicion impar?, si es asi puedes usar:

«
1. 
«  NSUB 2. MOD NOT { DROP } IFT »
DOSUBS
»

Top
Integró: 20/03/2009
Envíos: 462
MonedasHP: 420
Imagen de VereV
AdictoHP+
Calc: HP50
 
#5
Mar, 06/07/2010 - 20:24

Jaja, eso me pasa por no conocer bastantes comandos...

PD:Cada vez defino una variable local tengo que abrir << >> denuevo?

PD2: Como hago para eliminar un elemento de una lista? No con TAIL, sino quiero decir, eliminame el elemento 3 y que lo elimine...

Top
Integró: 17/09/2007
Envíos: 153
MonedasHP: 211
Imagen de LuisBeas
 
#6
Mar, 06/07/2010 - 20:41

Hay muchas formas para eliminar un lemento yo propongo el siguiente programa:

«
{ NSUB SAME { DROP } IFT  }
+ PRG 1. SWAP
DOSUBS
»

de entrada debe tener una lista y un munero que indigue el elemento que se borrara

Top
Integró: 19/11/2003
Envíos: 838
MonedasHP: 1222
Imagen de MACH
Calc: HP50 | ROM:HP50-C Revisión #2.15 | HP49G | HP48G+ | HP28C | HP75C | HP41CV | HP67
 
#7
Mar, 06/07/2010 - 21:36

Hola!, Vere:
Puedes buscar en el sitio de Eric Rechlin (www.hpcalc.org), un archivo llamado ... One Minute Marvels y en la Sección L (Lists) ...
L3.Removiendo un elemento.
L4.Removiendo una serie de elementos.

¡El conocimiento, a través de la capacitación, es la base de la sabiduría!. ¡ Ni a la persona, ni al ingenio, lo hace, el título!.
Cordiales saludos desde Neuquén, Patagonia Argentina.
M.A.C.H.

Top
Integró: 20/03/2009
Envíos: 462
MonedasHP: 420
Imagen de VereV
AdictoHP+
Calc: HP50
 
#8
Mar, 06/07/2010 - 22:02

MACH cita:
Hola!, Vere:
Puedes buscar en el sitio de Eric Rechlin (www.hpcalc.org), un archivo llamado ... One Minute Marvels y en la Sección L (Lists) ...
L3.Removiendo un elemento.
L4.Removiendo una serie de elementos.

Muchísimas gracias, no lo conocía!
Igual mi pregunta era por si existía algún comando que haga tal cosa, jaja

Top
Integró: 26/12/2007
Envíos: 627
MonedasHP: 593
Imagen de Dani_
Calc: HP50 | ROM:2.09
 
#9
Mar, 06/07/2010 - 23:25

Creo que ya lo comenté alguna vez, pero por las dudas...para la manipulación de listas existe una biblioteca llamada Goferlists (está en HPCalc) que tiene muchos comandos interesantes. Claro que al usar esos comandos en programas, no se podrán usar los programas en otras calculadoras ajenas excepto que tengan instalada esa biblioteca.

Gracias Luis, tu dominio de la programación con listas es notable.

VereV cita:

Perfecto gracias, igual te hago una pregunta? Cada vez defino una variable local tengo que abrir << >> denuevo?

Creo que sí, es indispensable, salvo que luego de definir las variables uses algo como '', por ejemplo:

«  A B C '2*A+B-C' EVAL
»

funciona sin abrir nuevos << >>

Pero esto no funciona, te da invalid syntax:

«  A B C
A 2 * B + C -
»

Ingeniero. Usuario de HP 50g.

Top
Integró: 09/03/2010
Envíos: 467
MonedasHP: 926
Imagen de zuaritx
Calc: HP48G/GX | ROM:.
 
#10
Mar, 14/12/2010 - 20:29

<

Top
Integró: 17/09/2007
Envíos: 153
MonedasHP: 211
Imagen de LuisBeas
 
#11
Mié, 07/07/2010 - 10:25

Para los que quieran arriesgarse les dejo esto:

«
{ A B C D E F }
3.
"!NO CODE
 !RPL
 ::
   SWAP INNERCOMP DUPDUP #3+ ROLL
   COERCE #- #2+ ROLLDROP #1-{}N
 ;
@"
ASM EVAL
»

Top

Twitter

Cargando...

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