• Jueves 7 de Noviembre de 2024, 22:48

Autor Tema:  problema con numero y #: numero#  (Leído 2424 veces)

Jimbenit

  • Miembro MUY activo
  • ***
  • Mensajes: 269
  • Nacionalidad: co
    • Ver Perfil
    • http://ingenieriacivil.foroactivo.com
problema con numero y #: numero#
« en: Viernes 2 de Octubre de 2009, 00:29 »
0
Hola a todos los de visual basic, ya creo que me conocen  :lol:

En esta ocasion tengo un problema, se que debe ser facil pero aqui se los coloco:

Tengo un proceso que no hice yo, es el siguiente:
Código: Visual Basic
  1. For i = 1250 To 3540
  2.                Y1 = Int(150# * Cos(amplitud) * Sin((i - 1250#) * 8# * PI / 2290#) + 2650# + j)
  3.                 Y2 = Int(520 / 600 * (i - 1250) + 3280)
  4.                 Y3 = Int(-520 / 600 * (i - 3540) + 3280)
  5.                 If Y1 > Y2 Then
  6.                     Y1 = Y2
  7.                 ElseIf Y1 > Y3 Then
  8.                     Y1 = Y3
  9.                 ElseIf Y1 > 3750 Then
  10.                     Y1 = 3750
  11.                 End If
  12.                 PSet (i, Y1), RGB(red2, Green2, blue2)
  13.         Next
  14.  

y lo quiero aislar a un SUb y lo coloco de la siguiente manera:

Código: Visual Basic
  1. Private Sub Water_Waves(Min As Integer, Max As Integer, Nro_Seccion As Integer)
  2.     Dim i As Integer
  3.         'water waves
  4.         For i = Min To Max
  5.                 Y1 = Int(150# * Cos(amplitud) * Sin((i -Min#) * 8# * PI / 2290#) + 2650# + j)
  6.                 Y2 = Int(520 / 600 * (i - Min) + 3280)
  7.                 Y3 = Int(-520 / 600 * (i - Max) + 3280)
  8.                 If Y1 > Y2 Then
  9.                     Y1 = Y2
  10.                 ElseIf Y1 > Y3 Then
  11.                     Y1 = Y3
  12.                 ElseIf Y1 > 3750 Then
  13.                     Y1 = 3750
  14.                 End If
  15.                 PSet (i, Y1), RGB(Vector_Seccion(Nro_Seccion).Red, Vector_Seccion(Nro_Seccion).Green, Vector_Seccion(Nro_Seccion).Blue)
  16.         Next
  17.  
  18.  
  19.  
  20. End Sub
  21.  

El error me dice que esta en el Min# de la linea 5...
La pregunta es:
¿Como debe colocarse para que el codigo sea correcto?
saludos y gracias a todos...


Yo quiero mucho a Toph ---> Mi Web]http://ingenieriacivil.foroactivo.com[/url]

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: problema con numero y #: numero#
« Respuesta #1 en: Viernes 2 de Octubre de 2009, 10:05 »
0
Código: Visual Basic
  1. CDbl(Min)
  2.  

No uses caracteres de declaración de tipos (#, @, $, etc...), es una mala práctica. Son confusos y dificultan la legibilidad.

Saludos.

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: problema con numero y #: numero#
« Respuesta #2 en: Viernes 2 de Octubre de 2009, 18:00 »
0
Ademas en este casi ni siquiera son necesarios

Para convertir a double usas la funcion que te dio m0skit0
o
simplemente declaralo como dobles

Código: Visual Basic
  1. Private Sub Water_Waves(Min As Double, Max As Double, Nro_Seccion As Integer)
  2.  

Pero la expresion es correcta sin #

Código: Visual Basic
  1. Int(150 * Cos(amplitud) * Sin((i -Min) * 8 * PI / 2290) + 2650 + j)
  2.  


y a mi parecer esto 150# resulta incoherente, pues Visual Basic ya lo reconoce como un valor numerico


Saludos
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

Jimbenit

  • Miembro MUY activo
  • ***
  • Mensajes: 269
  • Nacionalidad: co
    • Ver Perfil
    • http://ingenieriacivil.foroactivo.com
Re: problema con numero y #: numero#
« Respuesta #3 en: Viernes 2 de Octubre de 2009, 18:13 »
0
Si, correcto...
ssencillo cierto??:...  B)  Grcias...


Yo quiero mucho a Toph ---> Mi Web]http://ingenieriacivil.foroactivo.com[/url]

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: problema con numero y #: numero#
« Respuesta #4 en: Sábado 3 de Octubre de 2009, 00:39 »
0
No hay nada malo en usar la declaración de tipos, quizás el problema sea que si la gente no está acostumbrada a usarlos no los reconozca.

Más concretamente en los valores inmediatos numéricos es acertado hacerlo por que por defecto cualquier valor inmediato es de tipo long por tanto forzarlo a un single o double si el resultado va a contener ese tipode datos es acertado porque le ahorras a vb algunas comprobaciones de tipos.

Por otro lado, vb utiliza como acumulador 'la variable de la izquerda' en una expresión, lo que nos indica en cierto modo que algunas declaraciones pueden ser superfluas y la expresión entonces debería diseñarse en base a velocidad, esto es, el tipo de datos integer que es el más rápido para vb, por tanto los de tipo byte promocionarlos a integer y los longs si no superan el límite de un integer también promocionarlos a integer. Si se requiere más info sobre esta cuestión, basta que avises...

Tu error se da porque declaras Min como integer en el parámetro de la función pero al usarlo luego dentro de una expresión le dices que es un double, ya está declarado por tanto es una etiqueta duplicada, sólo que aquí nos indicará duplicación de etiqueta porque la declaración es explícita en tanto que utilizando el signo de tipo es implícito. si se declarara primeramente la variable con el signo implícito y luego se hiciera la declaración explícita, el error también se daría como etiqueta duplicada, como es el orden al revés se asume el error en el signo implícito, es decir en la 2ª declaración....

 El error equivalente fácil de comprender serían estas combinaciones de código:
Código: Visual Basic
  1.  
  2. ' duplicación de etiqueta: 1º 'valor' se declara explícitamente como integer luego como double
  3. dim Valor as integer
  4. dim Valor as double ' error aquí
  5.  
  6.  
Código: Visual Basic
  1.  
  2. ' duplicación de etiqueta: 1º 'valor' se declara implícitamente como integer luego explícitamente como double
  3. Valor% = 20*5
  4. dim Valor as double ' error aquí
  5.  
  6.  

Código: Visual Basic
  1.  
  2. ' el signo de declaración no coincide con el tipo de la declaración: 1º 'valor' se declara explícitamente como double luego  implícitamente como integer . este es tu caso
  3. dim Valor as double
  4. Valor% = 20*5 ' error aquí
  5.  
  6.  
Código: Visual Basic
  1.  
  2. ' el signo de declaración no coincide con el tipo de la declaración: 1º 'valor' se declara implícitamente como double luego  implícitamente como integer .
  3. Valor#= 45
  4. Valor% = 20*5  ' error aquí
  5.  
  6.  

p.d.: para recrear esas ondas, no crees que sería mejor utlizar circle en vez de pset ?...
Además de más rápido te permitiría más flexibilidad, con currentx y currenty desplazarías la 'onda' y con el aspecto del círculo definirías la elipse, con el inico y fin del arco definirías los grados del arco... resumiendo, podrías además, hacer sobre el bucle  que la onda fuera variando a cada arco, mascorta, más larga, mas alta mas baja, no de 180º y no en línea recta... en vez de dibujar una sinusoide. Claro que depende de para qué lo quieras, pero sería mejer usar circle de todas maneras.
«Ma non troppo»
----> ModoVacaciones = False<----