Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Múltiplos de 0.5

658 views
Skip to first unread message

Alberto Reig Pérez

unread,
May 22, 2001, 2:01:57 PM5/22/01
to
Hola amigos

Quiero crear un programa que debe utilizar la función gama de Euler, esta
función es:

G(n)=(n-1)! Si n es un nº entero
G(p)=(p-1)G(p-1) para los demás valores de p (los múltiplos de 0.5), con
G(0.5)=raiz de Pi

El problema es que no se como conseguir que la hp distinga un nº entero de
uno real, dado que la función TYPE devuelve el mismo valor (0) tanto para
reales como enteros.

¿Alguien sabe como conseguir esto, o, mejor aún, si existe un programa que
haga esto?

Muchas gracias,

Alberto Reig Pérez


Lopez de la Fuente, Jose Manri

unread,
May 22, 2001, 7:47:46 PM5/22/01
to
In article <9ee9na$i8u$1...@m2wpersoisp01.wanadoo.es>, "Alberto Reig Pérez" <alber...@hotmail.com> writes:
> Hola amigos
>
> Quiero crear un programa que debe utilizar la función gama de Euler, esta
> función es:
>
> G(n)=(n-1)! Si n es un nº entero
> G(p)=(p-1)G(p-1) para los demás valores de p (los múltiplos de 0.5), con
> G(0.5)=raiz de Pi

Hp48 o hp49???

En la hp49g version 1.19-1 o posteriores el comando es GAMMA.

>
> El problema es que no se como conseguir que la hp distinga un nº entero de
> uno real, dado que la función TYPE devuelve el mismo valor (0) tanto para
> reales como enteros.

Me suena a que entonces es una hp48...

>
> ¿Alguien sabe como conseguir esto, o, mejor aún, si existe un programa que
> haga esto?
>
> Muchas gracias,
>
> Alberto Reig Pérez
>

Si es hp48 voy a revolver un poco en la mia mañana despues del
examen de estadistica...

J.Manrique


>
>
>

Pablo Iranzo Gómez

unread,
May 23, 2001, 2:24:39 AM5/23/01
to
La 48 tanto para reales como para enteros con la funcion "!"
calcula el factorial o la Gamma de Euler sin más que poner 5! ó 5.5!
Respecto a lo de diferenciar si un número es entero o es real,
pues bueno, aunque os parezca tonto ¿que os parece una comparativa?
(Numero en la pila)
<< DUP FLOOR - 0 = IF THEN "Real" ELSE "Entero" END >>
Con este programa obtienes una cadena, pero como claramente se ve,
se puede poner lo que quieras entre las comillas o incluso que te de otros
valores o ejecute otras cosas

Un saludo

> > El problema es que no se como conseguir que la hp distinga un nº entero de
> > uno real, dado que la función TYPE devuelve el mismo valor (0) tanto para
> > reales como enteros.
> >

> > ¿Alguien sabe como conseguir esto, o, mejor aún, si existe un programa que
> > haga esto?
> >
> > Muchas gracias,
> >
> > Alberto Reig Pérez


Pablo Iranzo Gómez (Pablo....@uv.es)
http://www.uv.es/~iranzop/ring/astron/ (Anillo Astronómico)
http://www.uv.es/~iranzop/hp48/ (Página de la HP)
--
ICQ UIN: 36614467
(PGPKey Available on http://www.uv.es/~iranzop/PGPKey.pgp)
--
Principio de Heisenberg sobre la Incertidumbre:
La localización de todos los objetos no se puede conocer de forma
simultánea.

Corolario:
Si encuentra un objeto que estaba perdido, desaparecerá otro.
--

Rodriguez Rodriguez, Gregorio

unread,
May 23, 2001, 6:48:16 AM5/23/01
to
In article <9ee9na$i8u$1...@m2wpersoisp01.wanadoo.es>, "Alberto Reig Pérez" <alber...@hotmail.com> writes:
> Hola amigos
>
> Quiero crear un programa que debe utilizar la función gama de Euler, esta
> función es:
>
> G(n)=(n-1)! Si n es un nº entero
> G(p)=(p-1)G(p-1) para los demás valores de p (los múltiplos de 0.5), con
> G(0.5)=raiz de Pi
>
> El problema es que no se como conseguir que la hp distinga un nº entero de
> uno real, dado que la función TYPE devuelve el mismo valor (0) tanto para
> reales como enteros.
No quiero ser redundante, porque ya te lo han dicho, pero también
lo puedes hacer de una forma parecida, con el comando IP
El comando IP devuelve la parte entera del número, así que
haciendo una comprobación similar,
DUP IP == IF THEN "entero" ELSE "real" END

pues ya tendrías el resultado

Saludos
Gregorio Rodríguez
greg...@rpn48.zzn.com
http://www.rpn48.zzn.com

RubEn PErez

unread,
May 23, 2001, 1:47:41 PM5/23/01
to
Hola:

La función gamma ya viene en la calculadora, hay que restar 1 al
número (sea entero o real) y aplicar el comando factorial (!), en forma de
programa podría ser:

<< 1 - ! >>

Sencillo, ;-)

En cuanto a lo de saber si un número es real o entero, sólo hay
que comprobar si tiene o no parte decimal:

<< IF DUP FP 0 SAME THEN "entero" ELSE "real" END >>

Un saludo,
Rubén

Máximo Castañeda

unread,
May 23, 2001, 4:58:08 AM5/23/01
to
"Alberto Reig Pérez" escribió:

>
> El problema es que no se como conseguir que la hp distinga un nº entero de
> uno real, dado que la función TYPE devuelve el mismo valor (0) tanto para
> reales como enteros.
>

No sé si estas funciones están en la 48, pero ahí va de todas formas.
Con CEIL, FLOOR o IP puedes conseguir números enteros (el inmediatamente
superior, inferior, o truncado), así que te basta con algo como:

DUP IP ==

que devuelve 1 si el número era entero y 0 si no.

Comprueba que realmente funciona: que las funciones existen y que
aceptan números negativos (aunque me parece que esto no lo necesitas).

Pablo Iranzo Gómez

unread,
May 24, 2001, 5:47:58 AM5/24/01
to Pablo Iranzo Gómez
No se si te servirá, pero yo, con un programa de cálculo de
errores, utilizo el método burro :) que va bastante bien, el caso es que
el programa calcula los errores por el método de las diferenciales, y
mediante ese método, tienes que calcular la derivada de una función para
cada una de las variables que intervienen, el caso es que la forma de
hacer ese cálculo es hacer algo como:

2: Función
1: {var1 var2 var3 var4}

y luego ejecutar la derivada

Esto entra como trabajo con listas y entonces la HP automáticamente me
calcula de forma simbólica todas las derivadas a la vez, luego, mediante
una forma más burra, creo unas variables que se llaman evar1, etc que
hacen referencia al error de cada una de las variables y eso lo hago con
un maravilloso

1: "e"
2: {var1 var2 var3 var4}

y luego utilizo la suma y como resultado tengo:

1: {"evar1" "evar2" "evar" "evar4"}

luego realizo todos los cálculos y si me interesa, pues aprovecho y con el
SOLVER de la hp pues las resuelvo y meto los valores de cada una.

Las ventajas de hacerlo así son que no necesito un cuadro de
diálogo para meter los datos, de forma que tengo por un lado el cuadro de
diálog, por otro la rutina de cálculo, con la ventaja de que puedo
aprovechar la rutina dentro de otros programas y así no tener que
programar otra vez o separarlo luego.

Propuesta:

Programa el algoritmo para que te calcule una sola integral con
unos valores que le pongas en la pila
por ejemplo a, b, alfa, beta y en el segundo nivel los valores de p y q

crea un cuadro de dialogo que te pida los valores una sola vez

y luego creas una rutina principal que llame al principio a unos
valores y luego el resto ya los proporcione y repita el proceso para el
numero de ecuaciones n que tue le digas
No te puedo ayudar con el programa porque es para la 49 y yo la
experiencia la tengo conla 48, pero debe ser muy parecido porque muchas
cosas me suenan :)

A ver, la rutinas serían algo así como: (los formularios te los
dejo para que los hagas tú)

Area (a,b,alfa,beta) (es un formulario que tu creas y que deja en la pila
los cuatro valores en el orden a b alfa beta cada uno en un nivel de la
pila.

Parametros (p,q) es otro formulario que creas para introducir los valores
de p y q y los dejas en la pila a continuación de a, b, alfa, beta
el programa principal sería:

Introduce N (formulario para introducir el numero de ecuaciones)


<<
IntroduceN (devuelve el valor N a la pila)
Area (devuelve a, b, alfa, beta en la pila)
1 N FOR i
DUP
Parametros (devuelve p, q en la pila)
p q
calcula (rutina de calculo)
SWAP (para dejar el resultado en la parte de arriba de la
pila y que vuelvan a quedar los valores del area en el primer nivel para
poder volver a hacer el DUP y repetir el proceso)

NEXT
>>


Calcula:

<<
-> a b alfa beta p q

(lo que sigue es tu rutina original) el último comando de 1. "n"
STO+ no se a que hace referencia, pero en principio haciendo el programa
como te he puesto arriba no gastas variables fijas (sólo volátiles, que
conforme se ejecute el programa se borran automáticamente y así en caso de
fallo del soft pues no queda nada de porquería por ahí tirado)

«
a p ^ b q ^ * a ß * / p a / GAMMA q
ß / GAMMA * 1. p a /
+ q ß / + GAMMA / *

»

»


Espero que te sea útil.
Un saludo
Pablo

PUNKROCKER

unread,
May 25, 2001, 6:38:14 AM5/25/01
to
segundo parcial de Resistencia?
jejeje, que no te pase nada; yo si fuese tú confiaría ciegamente en la Plasticidad (siempre cae un mecanismo de rotura) y en la HP (para meterte todas las fórmulas de Elasticidad, e incluso todos los problemas si tienes tiempo), porque por lo que me han comentado este año no dejan ni siquiera el formulario,....
 
Avelino es el hijo de Satán
 
suerte
 
 
 
 
"Alberto Reig Pérez" <alber...@hotmail.com> escribió en el mensaje news:9eigsr$pcs$1...@m2wpersoisp01.wanadoo.es...
Hola amigos, y gracias por vuestras respuestas
 
La calculadora es una 49g, con el ROM 1.18, que ya incluye la función gamma.  ¡Que conste que antes de escribiros busqué el commando en la AUG publicada por HP!
 
Enfin, ahora ya he intentado programar el bicho, y claro, como es harto común entre principiantes, me he quedado atascado.
 
El programa que estoy intentando escribir sirve para evaluar integrales usando una fórmula que a su vez usa la función gamma, de ahí viene mi pregunta original...
 
La idea es que se le de al programa el nº de integrales a evaluar (n) y la definición del recinto (a, b, a, ß) , y luego usar una estructura WHILE ... REPEAT ... END para que calcule las n integrales sobre el mismo recinto.  El código del programa es:
 
 «"Nº de integrales a evaluar?"

"" INPUT ® n

      «"Definicion del recinto"

      {{"a:" "Introduce el coeficiente a"}

      {"b:" "Introduce el coeficiente b"}

      {"a:" "Introduce el coeficiente a"}

      {"ß:" "Introduce el coeficiente ß"}}

      { } { } { }

      INFORM»

DROP OBJ® ® a b a ß

'1.' ® i

  «WHILE i n £

   REPEAT

      «"Parametros de la integral"

      { { "p:" "Potencia de x + 1" }

      { "q:" "Potencia de y + 1" }}

      { } { } { } INFORM»

DROP OBJ® ® p q

« a p ^ b q ^ *

a ß * / p a / GAMMA q

ß / GAMMA * 1. p a /

+ q ß / + GAMMA / * »

n '1.' STO+

    END

  »

»

También os mando el programa como datos adjuntos
 
El problema es que cuando tiene que evaluar la condición del REPEAT, me da error diciendo que 'REPEAT Error: Undefined Name'. La pila tiene el siguiente aspecto:
 
2:        1
1:        '1.£n'
 
 
Agradecería muchísimo que me pudieseis echar un cable, ya que el examen de Elasticidad (estudio Caminos en la UPM) es el lunes y no puedo perder mucho más tiempo con esto...
 
Un cordial saludo,
 
Alberto Reig Pérez
 
 
 
 
"Rodriguez Rodriguez, Gregorio" <zz98...@opalo.etsiig.uniovi.es> escribió en el mensaje news:krF65u...@opalo.etsiig.uniovi.es...
0 new messages