Determinar rango de valores al que pertenece un número...
Buenas, a ver, quisiera hacer un select case que me dedujera a que rango pertenece un número concreto, por ejemplo:
Select case Numero_Seleccionado
case is = 'valor esta entre 1 y 9
Console.Write="Número seleccionado menor de 10"
case is= 'valor está entre 9 y 19
Console.Write="Número seleccionado menor de 20"
case is= 'valor está entre 19 y 29
Console.Write="Número seleccionado menor de 30"
Etc...
Pues no se me ha ocurrido ningún operador que me haga esta función directamente. Evidentemente al final lo he resuelto haciendo uso de unos If... then, Elseif... then, tal cómo sigue:
If Numero_Seleccionado <= 9 Then
Console.Write="Número seleccionado menor de 10"
ElseIf Numero_Seleccionado > 9 And Numero_Seleccionado <= 19 Then
Console.Write="Número seleccionado menor de 20"
ElseIf Numero_Seleccionado > 19 And Numero_Seleccionado <= 29 Then
Console.Write="Número seleccionado menor de 30"
Etc...
End IF
Me ha funcionado a la perfección, pero claro, quiero exigirme cada vez el hacer código más eficiente y me gustarÃa alguna solución más "elegante"... si es que existe, claro.
Muchisimas gracias de antemano.
Select case Numero_Seleccionado
case is = 'valor esta entre 1 y 9
Console.Write="Número seleccionado menor de 10"
case is= 'valor está entre 9 y 19
Console.Write="Número seleccionado menor de 20"
case is= 'valor está entre 19 y 29
Console.Write="Número seleccionado menor de 30"
Etc...
Pues no se me ha ocurrido ningún operador que me haga esta función directamente. Evidentemente al final lo he resuelto haciendo uso de unos If... then, Elseif... then, tal cómo sigue:
If Numero_Seleccionado <= 9 Then
Console.Write="Número seleccionado menor de 10"
ElseIf Numero_Seleccionado > 9 And Numero_Seleccionado <= 19 Then
Console.Write="Número seleccionado menor de 20"
ElseIf Numero_Seleccionado > 19 And Numero_Seleccionado <= 29 Then
Console.Write="Número seleccionado menor de 30"
Etc...
End IF
Me ha funcionado a la perfección, pero claro, quiero exigirme cada vez el hacer código más eficiente y me gustarÃa alguna solución más "elegante"... si es que existe, claro.
Muchisimas gracias de antemano.
Hola.
No conozco Visual Basic oni C#, solo Visual C++, pero voy a mojarme un poco.
Siento deciros que ese código es muy ineficiente (por lo menos para mà que optimizo en numerosas ocasiones a nivel de bits), muchos if anidados es muy ineficiente. Una posible solución para saber Si quieres saber si el número está entre 0-9, 10-19, 20-29, etc, a primera vista se me ocurre que dividas un número entre diez y te quedes con el resultado sumándole 1 (si no es entero redondealo hacia abajo y quedate con el número sin los decimales), de esta manera (perdona si no se entiende mucho, pero no conozco Basic):
entero NumeroEntero;
NumeroEntero = Numero_Selecionado / 10;
NumeroEntero = int(NumeroEntero) + 1; // Quedarse solo con la parte entera.
Console.Write="Numero seleccionado menor que" + 10*NumeroEntero
La última sentencia no se como se hace en Basic, en C++ serÃa;
CString strTexto;
strTexto.Format(Numero seleccionado menor que %d", 10 * NumeroEntero);
Y para comprimirlo aún más se podrÃa hacer, (en Visual C++):
int NumeroEntero; // define un entero
CString strTexto; // para cadena de carácteres
strTexto.Format(Numero seleccionado menor que %d", 10 * (int(Numero_Selecionado / 10) + 1));
Espero que al menos se entienda, porque suponte que Numero_Seleccionado vale 1 millón (o más), se perderÃa demasiado tiempo, y de esta manera te vale para cualquier tipo de número (siempre entre los lÃmites del propio entero).
Un saludo.
No conozco Visual Basic oni C#, solo Visual C++, pero voy a mojarme un poco.
Siento deciros que ese código es muy ineficiente (por lo menos para mà que optimizo en numerosas ocasiones a nivel de bits), muchos if anidados es muy ineficiente. Una posible solución para saber Si quieres saber si el número está entre 0-9, 10-19, 20-29, etc, a primera vista se me ocurre que dividas un número entre diez y te quedes con el resultado sumándole 1 (si no es entero redondealo hacia abajo y quedate con el número sin los decimales), de esta manera (perdona si no se entiende mucho, pero no conozco Basic):
entero NumeroEntero;
NumeroEntero = Numero_Selecionado / 10;
NumeroEntero = int(NumeroEntero) + 1; // Quedarse solo con la parte entera.
Console.Write="Numero seleccionado menor que" + 10*NumeroEntero
La última sentencia no se como se hace en Basic, en C++ serÃa;
CString strTexto;
strTexto.Format(Numero seleccionado menor que %d", 10 * NumeroEntero);
Y para comprimirlo aún más se podrÃa hacer, (en Visual C++):
int NumeroEntero; // define un entero
CString strTexto; // para cadena de carácteres
strTexto.Format(Numero seleccionado menor que %d", 10 * (int(Numero_Selecionado / 10) + 1));
Espero que al menos se entienda, porque suponte que Numero_Seleccionado vale 1 millón (o más), se perderÃa demasiado tiempo, y de esta manera te vale para cualquier tipo de número (siempre entre los lÃmites del propio entero).
Un saludo.
Ja, ja, ja... muchas gracias. Bueno, pues la dejo tal que asÃ.
El caso es que contra más aprendo de ".NET" más me excita la capacidad de "abstracción" a la que puedo llegar a la hora de aplicar soluciones para casos concretos... y claro, uno se va animando y no para de darle al coco hasta pillar soluciónes más "puras" y "sublimes"... (si, a veces he llegado a estados de pseudoéxtasis visualizando estructuras complejas de información reducidas a su mÃnima expresión)
Gracias de todos modos, e intentaré tomármelo más terrenalmente...
El caso es que contra más aprendo de ".NET" más me excita la capacidad de "abstracción" a la que puedo llegar a la hora de aplicar soluciones para casos concretos... y claro, uno se va animando y no para de darle al coco hasta pillar soluciónes más "puras" y "sublimes"... (si, a veces he llegado a estados de pseudoéxtasis visualizando estructuras complejas de información reducidas a su mÃnima expresión)
Gracias de todos modos, e intentaré tomármelo más terrenalmente...
