Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
Problema Con DEC(numero) Y Abs(numero) [Solucionado]
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Problema Con DEC(numero) Y Abs(numero) [Solucionado] 
 
Buenas, como ya he comentado, estoy leyendo el libro gambas, a la vez que busco informacion en San Google y en el foro, pero que aun asi, no soy capaz de encontrar. Me gustaria que alguien me ayudase con pequeñas cuestiones que me van surgiendo en relacion al libro.

Yo voy leyendo el libro, y a la vez, voy probando con gambas los codigos, para ir probando que todo funcione correctamente. Uso Gambas2, y el libro es para Gambas1 (si no me equivoco), asi que algunas cosas que no me funcionen o que no sepa como hacerlo, a lo mejor es porque lo este haciendo mal, o por la version (en cada caso, no se porque es...).
Con la informacion que vaya recopilando aqui y alli, me gustaria hacer una especie de guia, en la que se vayan explicando los cambios que hay entre la version del libro y la actual, para futuros usuarios que les pase lo mismo que a mi.

He leido las normas y pone que se deben hacer las preguntas una a una, y yo tenia pensado hacerlas todas en este mismo hilo, a modo de guia a la vez que se lee el libro, pero si no es correcto, hago las preguntas separadas y luego las recopilo.

Muchas gracias y un Saludo!!!
 



 
última edición por AnSnarkista el Domingo, 13 Junio 2010, 10:33; editado 2 veces 
AnSnarkista - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ayudas Para Aprendices En Relacion Al Libro Gambas 
 
' gambas module file

PUBLIC SUB Main()
  DIM num AS Byte
  DIM num2 AS Byte
  RANDOMIZE
  num = Rnd(30)
  num2 = Rnd(25)
  PRINT num, num2, Max(num, num2), DEC(num)
  END
 


La salida, segun mis expectativas seria, un numero aleatorio entre 0 y 30, otro entre 0 y 25, el numero mas grande de los dos y el primer numero menos uno, pero me sale una queja de gambas:
Citar:
Unexpected DEC en linea 9
.

Me fijado que (como se puede ver tambien en el codigo aqui), que Max, y DEC son se colores diferentes, y que ademas, Max, esta en minusculas y DEC no. Son del mismo tipo, asi que he intuido que deberian de ser de la misma forma y color, pero al salir diferentes me queda una duda.
¿DEC se ha quitado de dentro de gambas (porque se pueda hacer numero -1) o tiene otra sintaxis que no he encontrado?

Gracias!
 



 
AnSnarkista - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ayudas Para Aprendices En Relacion Al Libro Gambas 
 
Sigo con el ejemplo anterior, pero un poco mas grande:
' gambas module file

PUBLIC SUB Main()
  DIM num AS Byte
  DIM num2 AS Byte
  RANDOMIZE
  num = Rnd(30)
  num2 = Rnd(25)
  PRINT num, num2, Abs(num - num2)
  END
 

Desde siempre me han dicho que el valor absoluto de un numero es el valor del numero con signo positivo, pero al ejecutar este ejemplo, me han dado salidas de este tipo:
Citar:
6     24     238  ---> Segun lo que me han explicado siempre, deberia de ser 6   24   18
2     12     246  ---> y este 2   12   10


Lei un post de uno al que la tangente no le salia correctamente...¿Mi cambio se debe a lo mismo(Por lo de Deg o Rad en la calculadora) o es porque es alguna otra cosa de programacion mas avanzada?
 



 
AnSnarkista - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ayudas Para Aprendices En Relacion Al Libro Gambas 
 
AnSnarkista escribió: [Ver mensaje]

¿DEC se ha quitado de dentro de gambas (porque se pueda hacer numero -1) o tiene otra sintaxis que no he encontrado?

Gracias!


La sintaxis correcta es DEC numero, sin los paréntesis. Equivale a numero = numero - 1. De igual forma INC hace lo contrario, incrementa en 1.

DEC numero
INC numero
 


Pero Max(valor) es una función, y por tanto su sintaxis es con paréntesis.

AnSnarkista escribió: [Ver mensaje]
Sigo con el ejemplo anterior
Desde siempre me han dicho que el valor absoluto de un numero es el valor del numero con signo positivo, pero al ejecutar este ejemplo, me han dado salidas de este tipo:
Citar:
6     24     238  ---> Según lo que me han explicado siempre, debería de ser 6   24   18
2     12     246  ---> y este 2   12   10



Qué raro... voy a probar tu ejemplo, porque estás en lo cierto. Parece que aquí gambas se equivoca...

EDITO...

Confirmado un posible bug en gambas: cuando el primer nº es mayor que el segundo, no hay problema. Pero al contrario se devuelve un valor absurdo:

17      24      249

11      21      246

Sin embargo si haces:

PRINT Abs(11 - 21) da 10, lo cual es correcto.

Este es el código usado
PUBLIC SUB Main()
  DIM num AS Byte
  DIM num2 AS Byte
  RANDOMIZE
  num = 11 'Rnd(30)
  num2 = 21 'Rnd(25)
  PRINT num, num2, Abs(num - num2)
  PRINT Abs(num - num2)
  PRINT Abs(11 - 21)
END
 


Resultados:
11      21      246
246
10



Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ayudas Para Aprendices En Relacion Al Libro Gambas 
 
Muchisimas gracias con lo del DEC y el INC, porque en todos los sitios que he mirado pone lo mismo, DEC(numero), con los parentesis.

He vuelto a hacer pruebas con el DEC y me he dado cuenta de que no se podria poner dentro del PRINT ¿no? Porque las dos son instrucciones.

Seguire con las pruebas y leyendo el libro.

Espero pronto ser de los que responde en vez de los que preguntan....jejeje
 



 
última edición por AnSnarkista el Viernes, 11 Junio 2010, 23:20; editado 2 veces 
AnSnarkista - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ayudas Para Aprendices En Relacion Al Libro Gambas 
 
El código y los resultados son correctos. El problema es el tipo de datos y los valores que usas:

Citar:

PUBLIC SUB Main()
  DIM num AS Byte
  DIM num2 AS Byte
  RANDOMIZE
  num = Rnd(30)
  num2 = Rnd(25)
  PRINT num, num2, Abs(num - num2)
  END
 


Desde siempre me han dicho que el valor absoluto de un numero es el valor del numero con signo positivo, pero al ejecutar este ejemplo, me han dado salidas de este tipo:
Citar:
6     24     238  ---> Segun lo que me han explicado siempre, deberia de ser 6   24   18
2     12     246  ---> y este 2   12   10


El problema es que usas una variable de tipo Byte cuyos valores mínimo y máximo son 0..255.

si num = 6 y num2 = 24 => 6 - 24 = -18 ; el resultado está fuera del rango aceptable para el tipo de datos Byte. Entonces, evidentemente lo que hace gambas es tomar la cantidad máxima de valores posibles para el tipo de datos y continuar con el cálculo.

6 - 24 + 256 = X; -18 + 256 = X; X = 238

2 - 12 + 256 = X; -10 + 256 = X; X = 246

No sé si este comportamiento es un resultado buscado o si se trata de un efecto colateral, pero en definitiva el problema lo resuelves usando el tipo de datos Integer en reemplazo de Byte.


Saludos cordiales.
 




===================
Cómo programar con Gambas

Speed Books: informática libre.
 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ayudas Para Aprendices En Relacion Al Libro Gambas 
 
Mecachisss!!! Cómo no me di cuenta de ese "pequeño" detalle...

Cambiando el tipo a short o integer soluciona el problema, claro está, dependiendo de la magnitud que necesites usar para tu aplicación.

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ayudas Para Aprendices En Relacion Al Libro Gambas 
 
Me quedé pensando... creo que tal vez sí podría interpretarse este problema como un bug de gambas porque mirando el código:

...
 DIM num2 AS Byte

...

  PRINT num, num2, Abs(num - num2)
 


se observa que no es posible asignar un tipo de datos a expresión, y que el problema se produce a causa de la expresión que se pasa como parámetro a la función Abs(). Está claro que gambas calcula la expresión "num - num2" tomando como base el tipo de datos de las variables involucradas, pero ¿acaso no podría hacer "upcast" hacia el subtipo superior más próximo?.

De hecho si prueban colocando sólo una de las dos variables como tipo Short o Integer Abs() devuelve el resultado esperado.

¿No debería gambas hacer "upcast" no sólo en base al tipo de datos, sino también cuando detecta el desbordamiento? ¿No estaría gambas obligando a realizar un sobredimensionamiento de las variables (en cuanto a la elección de su tipo de datos) para prevenir este tipo de problema? ¿Acaso siempre es posible saber por adelantado que los valores que tomarán ciertas variables no desbordarán el tipo de datos elegido?

Como yo lo veo o se sobre-dimensionan las variables o se arriesga a que este tipo de problema ocurra, entonces que gambas hiciera "upcast" del tipo de datos podría ser una solución más eficiente.

¿Cómo lo ven ustedes?
 




===================
Cómo programar con Gambas

Speed Books: informática libre.
 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ayudas Para Aprendices En Relacion Al Libro Gambas 
 
Como se suele decir, a veces las preguntas mas complejas tienen su solucion delante de nosotros y es la mas simple.

Bueno, me gustaria tambien que me contestarais a lo de si dejo todas las dudas que me vayan surgiendo a lo largo de la lectura del libro en este mismo hilo o lo voy poniendo en posts diferentes.

Thaanks!
 



 
AnSnarkista - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ayudas Para Aprendices En Relacion Al Libro Gambas 
 
AnSnarkista escribió: [Ver mensaje]
Como se suele decir, a veces las preguntas mas complejas tienen su solución delante de nosotros y es la mas simple.

Bueno, me gustaría también que me contestarais a lo de si dejo todas las dudas que me vayan surgiendo a lo largo de la lectura del libro en este mismo hilo o lo voy poniendo en posts diferentes.

Thaanks!


Creo que lo más indicado es abrir un hilo para cada pregunta concreta. Si englobamos dentro de este hilo varias cuestiones tan dispares como "casting de variables" o "ayuda para aprendices", no estamos favoreciendo la búsqueda por temática ni tampoco la coherencia dentro del propio tema inicial del hilo.

Las preguntas deben de ir al foro temático correspondiente y, en caso de que no encaje en ninguno en particular, al foro General.


Respecto a:

fabianfv escribió: [Ver mensaje]

¿No debería gambas hacer "upcast" no sólo en base al tipo de datos, sino también cuando detecta el desbordamiento? ¿No estaría gambas obligando a realizar un sobredimensionamiento de las variables (en cuanto a la elección de su tipo de datos) para prevenir este tipo de problema? ¿Acaso siempre es posible saber por adelantado que los valores que tomarán ciertas variables no desbordarán el tipo de datos elegido?

Como yo lo veo o se sobre-dimensionan las variables o se arriesga a que este tipo de problema ocurra, entonces que gambas hiciera "upcast" del tipo de datos podría ser una solución más eficiente.

¿Cómo lo ven ustedes?


Mi opinión es que gambas lo debería tratar como un error y punto. Debería advertirte de algún modo al momento de la depuración. Para ciertas cosas puedo entender que gambas haga conversiones automáticas de tipos, pero debería advertir al menos de los desbordamientos incluso con el disparo de un error. Siempre he creído que es responsabilidad del programador calcular y/o convertir el tipo de las variables antes que dejar al propio compilador (o intérprete , en este caso) la tarea de decidir qué hacer ante un caso así.

Siempre he pensado que gambas es demasiado flexible con los castings... Os acordáis: "Option Strict On" ? (creo que era algo así, en VB). Pues eso!.

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Problema Con Result (Solucionado) chen_08 Bases de Datos 1 Martes, 23 Marzo 2010, 17:56 Ver último mensaje
jguardon
No hay nuevos mensajes Problema Con Settings (Solucionado) Dani26 General 4 Viernes, 03 Diciembre 2010, 12:44 Ver último mensaje
Dani26
No hay nuevos mensajes Problema Con El Refresco De Un PictureBox ... shordi Controles/Librerías/Componentes 4 Viernes, 24 Junio 2011, 18:28 Ver último mensaje
shordi
No hay nuevos mensajes Problema Con Operación Matemática [Soluc... Shell General 2 Viernes, 31 Octobre 2014, 00:39 Ver último mensaje
Shell
 

Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron