elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [DUDA] Con que puedo reemplazar el IF?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [DUDA] Con que puedo reemplazar el IF?  (Leído 2,822 veces)
jdc


Desconectado Desconectado

Mensajes: 3.406


Ver Perfil WWW
[DUDA] Con que puedo reemplazar el IF?
« en: 10 Enero 2009, 00:56 am »

Lo que pasa es que necesito compararmuchos rangos para hacer un programa, pero mucha gente me ha dicho que los IF's ocupan muchos recursos y no son optimos para grandes comparaciones.

Lo que quiero hacer es algo como esto:

Código
  1. Public a
  2.  
  3. Private Sub Command1_Click()
  4.   a = Text1.Text
  5.      If (a >= 0) And (a <= 9) Then
  6.         MsgBox ("El numero esta entre 0 y 9")
  7.      ElseIf (a >= 10) And (a <= 19) Then
  8.         MsgBox ("El numero esta entre 10 y 19")
  9.      ElseIf (a >= 20) And (a <= 29) Then
  10.         MsgBox ("El numero esta entre 10 y 19")
  11.      Else
  12.         MsgBox ("El numero es mayor o igual que 30 o es un caracter no numerico")
  13.      End If
  14. End Sub

claro que no seria solo 4 o 5 comparaciones, son al rededor de 40 aprox xD por lo que se podria hacer asi pero no seria lo optimo  :rolleyes:

Saludos y gracias de antemano :)



En línea

skapunky
Electronik Engineer &
Colaborador
***
Desconectado Desconectado

Mensajes: 3.668


www.killtrojan.net


Ver Perfil WWW
Re: [DUDA] Con que puedo reemplazar el IF?
« Respuesta #1 en: 10 Enero 2009, 00:59 am »

Intenta hacerlo con un "case". Por internet encontrarás ejemplos miles, no creo que te cueste nada y es una alternativa a probar a los if's.


En línea

Killtrojan Syslog v1.44: ENTRAR
jdc


Desconectado Desconectado

Mensajes: 3.406


Ver Perfil WWW
Re: [DUDA] Con que puedo reemplazar el IF?
« Respuesta #2 en: 10 Enero 2009, 01:02 am »

Intenta hacerlo con un "case". Por internet encontrarás ejemplos miles, no creo que te cueste nada y es una alternativa a probar a los if's.

aja habia pensado en Select Case.Index pero seria mas rollo que con el if no? eso si, seria mas optimo?
En línea

skapunky
Electronik Engineer &
Colaborador
***
Desconectado Desconectado

Mensajes: 3.668


www.killtrojan.net


Ver Perfil WWW
Re: [DUDA] Con que puedo reemplazar el IF?
« Respuesta #3 en: 10 Enero 2009, 01:28 am »

Hombre..rollo mas o menos es lo mismo pero si, seria más optimo, eso sin duda.
En línea

Killtrojan Syslog v1.44: ENTRAR
seba123neo
Moderador
***
Desconectado Desconectado

Mensajes: 3.621


"No quiero creer, quiero saber" - Carl Sagan


Ver Perfil WWW
Re: [DUDA] Con que puedo reemplazar el IF?
« Respuesta #4 en: 10 Enero 2009, 02:06 am »

el Select Case es mas ordenado que el "IF" a la vista de eso no hay duda...
En línea

La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson
jdc


Desconectado Desconectado

Mensajes: 3.406


Ver Perfil WWW
Re: [DUDA] Con que puedo reemplazar el IF?
« Respuesta #5 en: 10 Enero 2009, 02:36 am »

y como seria la sintaxis?

Select Case (a)

case 0 (a >= 0) And (a <= 9)
          sentencias

case 1 (a >= 10) And (a <= 19)
          sentencias

case 2 (a >= 20) And (a <= 29)
          sentencias

case else
end select

eso seria o no?
En línea

<[(x)]>

Desconectado Desconectado

Mensajes: 215



Ver Perfil
Re: [DUDA] Con que puedo reemplazar el IF?
« Respuesta #6 en: 10 Enero 2009, 04:03 am »

holas haci

Código:
din variable
select case variable
case varlor1
sentecia
case valor2
sentecia
case esle
´como el else del if

end select case


listo.
En línea

<[(x)]>
seba123neo
Moderador
***
Desconectado Desconectado

Mensajes: 3.621


"No quiero creer, quiero saber" - Carl Sagan


Ver Perfil WWW
Re: [DUDA] Con que puedo reemplazar el IF?
« Respuesta #7 en: 10 Enero 2009, 04:14 am »

con lo que pusiste hoy seria asi:

Código
  1. Option Explicit
  2.  
  3. Public a As Integer
  4.  
  5. Private Sub Command1_Click()
  6.    a = 5
  7.    If Not IsNumeric(a) Then MsgBox ("Debe ser Numerico"): Exit Sub
  8.    Select Case a
  9.        Case 0 To 9
  10.            MsgBox ("El numero esta entre 0 y 9")
  11.        Case 10 To 19
  12.            MsgBox ("El numero esta entre 10 y 19")
  13.        Case 20 To 29
  14.            MsgBox ("El numero esta entre 20 y 29")
  15.        Case Is >= 30
  16.            MsgBox ("El numero es mayor o igual que 30")
  17.        Case Else
  18.            MsgBox ("Ingresaste un Numero Negativo?? xD")
  19.    End Select
  20. End Sub

acostumbrate a declarar las variables y con algun tipo de dato...

Cita de: <[(x)
>]holas así

Código:

din variable
select case variable
case varlor1
sentecia
case valor2
sentecia
case esle
´como el else del if

end select case


listo.

termina en End Select no en End Select Case  :xD

saludos.
« Última modificación: 10 Enero 2009, 04:17 am por seba123neo » En línea

La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson
vivachapas


Desconectado Desconectado

Mensajes: 612



Ver Perfil
Re: [DUDA] Con que puedo reemplazar el IF?
« Respuesta #8 en: 10 Enero 2009, 05:26 am »

Citar
Código
Option Explicit
 
Public a As Integer
 
Private Sub Command1_Click()
    a = 5
    If Not IsNumeric(a) Then MsgBox ("Debe ser Numerico"): Exit Sub
    Select Case a
        Case 0 To 9
            MsgBox ("El numero esta entre 0 y 9")
        Case 10 To 19
            MsgBox ("El numero esta entre 10 y 19")
        Case 20 To 29
            MsgBox ("El numero esta entre 20 y 29")
        Case Is >= 30
            MsgBox ("El numero es mayor o igual que 30")
        Case Else
            MsgBox ("Ingresaste un Numero Negativo?? xD")
    End Select
End Sub

tenes toda la razon.. es asi como se hace :P


esto q habian posteado.. esta mal hecho.. seria como usar el select case como un if.. donde el numero recorreria solo un case, y solo un if...:S
Citar
Select Case (a)

case 0 (a >= 0) And (a <= 9)
          sentencias

case 1 (a >= 10) And (a <= 19)
          sentencias

case 2 (a >= 20) And (a <= 29)
          sentencias
En línea

BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 3.144


I'Love...!¡.


Ver Perfil WWW
Re: [DUDA] Con que puedo reemplazar el IF?
« Respuesta #9 en: 10 Enero 2009, 19:38 pm »

Solo sirve para visualisar en que rango esta un numero de 0 a 9 , 10 a 19, 20 a 29, etc... asi como se menciona, ojo no se si te llegue a sirvir para lo que desees.

Soporta numeros esesivamente numeros grandes por ejemplo:

5564544165465715917671651713681798179817373878173873817878973146574654314634136713614


Dando resultado el numero completo (sin las "E"  55645441654657159176716517136817e+127 o algo asi era)



El numero esta entre
5564544165465715917671651713681798179817373878173873817878973146574654314634136713610
y
5564544165465715917671651713681798179817373878173873817878973146574654314634136713619


SOLO sirviria si se muestra Texto, o si se manejara el Callbyname() O.o! pero limitado...¡! (a este ultmo solo se jalaria el nombre del proceso del archivo condif.ini y se plantaria en el proceso Callbyname() se me ocurre, estaria limitado esto ¬¬" como lo veo ), seria una forma mas cnfortable y sin tanto "Select Case" o tantos "If Then" y demas


Ojo use un archivo config.ini en c:\  pero pudo haber sido de iual forma dentro del mismo programa los texto pero igual.

Aca lo debo

Nesesitarian solo:

1 textbox
1 commandbutton
2 label

Pegar el siguiente codigo en un formualrio:

Código
  1. Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, lpKeyName As Any, ByVal lpDefault As String, ByVal lpRetunedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
  2.  
  3. Private Sub Command1_Click()
  4.    Dim Numero As String
  5.    Dim Str0 As String, Str1 As String
  6.    Dim Num0 As String, Num1 As String
  7.    Numero = Text1.Text
  8.  
  9.    If Not IsNumeric(Numero) Then Label1.Caption = Numero & "  <-- NO es un numero": Exit Sub
  10.  
  11.    If (Len(Numero) - 1 > 0) Then
  12.        Str0 = Mid(Numero, 1, Len(Numero) - 1)
  13.    Else
  14.        Str0 = "" 'Mid(Numero, 1, Len(Numero))
  15.    End If
  16.  
  17.    Num0 = Str0 & 0
  18.    Num1 = Str0 & 9
  19.    Label1.Caption = LeerINI("numeros", Num0 & "*-*" & Num1, "no existe clave", "c:\config.ini")
  20.    label2.Caption = "El numero esta entre  " & Num0 & "  y  " & Num1
  21.    'callbyname(....)
  22. End Sub
  23.  
  24. Public Function LeerINI(sección As String, Llave As String, Pre As Variant, strpatch As String) As String
  25.    On Error Resume Next
  26.    Dim Str As String
  27.    Str = String(255, Chr(0))
  28.    d = GetPrivateProfileString(sección, ByVal Llave, Pre, Str, Len(Str), strpatch)
  29.    LeerINI = Trim(Str)
  30. End Function
  31.  

Un archivo config.ini ya hecho:

Código:
[numeros]
0*-*9=la pera esta en 0 y 9
10*-*19=la manzana esta en 10 y 19
20*-*29=jaimico esta en 20 y 29
30*-*39=chucharunga esta entre 30 y 39
40*-*49=doña petaca esta entre 40 y 49
50*-*59=canuta entre 50 y 59
60*-*69=popis entre 60 y 69
70*-*79=jodido caracter entre 70 y 79
80*-*89=chahca entre 80 y 89
90*-*99=se me acaba entre 90 y 99
100*-*109=jodines entre 100 y 109
110*-*119=maldita sea 110 y 119
120*-*129=odio a entre 120 y 129
130*-*139=cojones del mal entre 130 y 139
140*-*149=me ando artando entre 140 y 149
150*-*159=tito entre 150 y 159
160*-*169=lucifer entre 160 y 169
170*-*179=san miguel entre 170 y 179
180*-*189=san antonio abad entre 180 y 189
190*-*199=san lucas?¿ entre 190 y 199

-0*-*-9=la pera esta en -0 y -9 |--->(Numero negativo)
-10*-*-19=la manzana esta en -10 y -19 |--->(Numero negativo)
-20*-*-29=jaimico esta en -20 y -29 |--->(Numero negativo)
-30*-*-39=chucharunga esta entre -30 y -39 |--->(Numero negativo)
-40*-*-49=doña petaca esta entre -40 y -49 |--->(Numero negativo)
-50*-*-59=canuta entre -50 y -59 |--->(Numero negativo)
-60*-*-69=popis entre -60 y -69 |--->(Numero negativo)
-70*-*-79=jodido caracter entre -70 y -79 |--->(Numero negativo)
-80*-*-89=chahca entre -80 y -89 |--->(Numero negativo)
-90*-*-99=se me acaba entre -90 y 99 |--->(Numero negativo)
-100*-*-109=jodines entre -100 y -109 |--->(Numero negativo)
-110*-*-119=maldita sea -110 y -119 |--->(Numero negativo)
-120*-*-129=odio a entre -120 y -129 |--->(Numero negativo)
-130*-*-139=cojones del mal entre -130 y -139 |--->(Numero negativo)
-140*-*-149=me ando artando entre -140 y -149 |--->(Numero negativo)
-150*-*-159=tito entre -150 y -159 |--->(Numero negativo)
-160*-*-169=lucifer entre -160 y -169 |--->(Numero negativo)
-170*-*-179=san miguel entre -170 y -179 |--->(Numero negativo)
-180*-*-189=san antonio abad entre -180 y -189 |--->(Numero negativo)
-190*-*-199=san lucas?¿ entre -190 y -199 |--->(Numero negativo)
« Última modificación: 10 Enero 2009, 19:56 pm por ░▒▓BlackZeroҖ▓▒░ » En línea




CScript (Actualizado 26/06/2013).

FileX <-- Re-modelando...
Web Principal-->[ Blog(VB6/C/C++) | Host File | Scan Port) ]

The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilit y el metal mi relig
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Cómo puedo reemplazar un Msg Box por un Form?
Programación Visual Basic
Eduardo223 3 1,286 Último mensaje 27 Septiembre 2011, 17:50 pm
por Elemental Code
Duda [VBA] Reemplazar una fecha por otra en la cabecera
Programación Visual Basic
solaire 2 1,159 Último mensaje 12 Febrero 2015, 10:52 am
por solaire
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines