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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Ejercicio de invertir un numero en vb.net (algo incomprendido)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ejercicio de invertir un numero en vb.net (algo incomprendido)  (Leído 10,946 veces)
DSREY

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Ejercicio de invertir un numero en vb.net (algo incomprendido)
« en: 22 Junio 2017, 05:59 am »

hola q tal, bueno hace rato estaba haciendo un ejercicio sencillo, era un algoritmo que lea un numero entero y obtenga el inverso ejemplo:
123=321, 4789=9874
y bueno lo digite asi:

Código
  1. Imports System.Console
  2. Module Module1
  3.  
  4.    Sub Main()
  5.        Dim num, y As Integer
  6.        y = 0
  7.        Do
  8.            WriteLine("INGRESE UN NUMERO")
  9.            num = ReadLine()
  10.            Do
  11.                y = y * 10 + (num Mod 10)
  12.                num = num \ 10
  13.            Loop While num > 0
  14.            WriteLine(y)
  15.            WriteLine()
  16.            y = 0
  17.  
  18.        Loop While y = 0
  19.    End Sub
  20.  
  21. End Module

y si corre bien y sirve ... pero aqui viene mi duda.... en la linea 12 donde esta :
                num = num \ 10
si cambio a:
                num = num / 10
es decir solo el signo \ por este: /
cuando lo ejecuto si me da el numero inverso pero solo hasta 345
ejemplo: escribo 345 me da el inverso 453 >>>ojo<<<< pero si escribo 456 me da 665 y si escribo cualquier otro numero mayor no lo invierte sino que da otra cantidad, entonces esa es mi duda.. cual es la diferencia entre "\" y "/"

gracias.!!!  aqui dejo el algoritmo que marca el inverso mal a partir de 456

Código
  1. Imports System.Console
  2. Module Module1
  3.  
  4.    Sub Main()
  5.        Dim num, y As Integer
  6.        y = 0
  7.        Do
  8.            WriteLine("INGRESE UN NUMERO")
  9.            num = ReadLine()
  10.            Do
  11.                y = y * 10 + (num Mod 10)
  12.                num = num / 10
  13.            Loop While num > 0
  14.            WriteLine(y)
  15.            WriteLine()
  16.            y = 0
  17.  
  18.        Loop While y = 0
  19.    End Sub
  20.  
  21. End Module


· Los códigos deben ir en etiquetas GeSHi
· No se debe escribir en mayúsculas
· Los temas de .NET van en su respectivo subforo
>aquí las reglas del foro
-Engel Lex


« Última modificación: 22 Junio 2017, 06:02 am por engel lex » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: Ejercicio de invertir un numero en vb.net (algo incomprendido)
« Respuesta #1 en: 22 Junio 2017, 17:04 pm »

esa es mi duda.. cual es la diferencia entre "\" y "/"

La diferencia es que un divisor es para divisiones entre números enteros (la operación devuelve un valor de tipo Integer), y el otro para decimales (la operación devuelve un valor de tipo Double)...

Asignar un valor decimal a una variable entera se considera una operación ilegal "permitida". Si eres nuevo en la programación de Visual Basic.NET entonces deberías activar la sentencia Option Strict ON para prevenir ese tipo de fallos, esto lo puedes activar de forma temporal escribíendo la sentencia en la cabecera de una clase, o de forma global (afectando a todas las clases actuales y futuros proyectos de VB.NET) en la configuración de Visual Studio.



Usando el divisor para enteros:
Cita de: Visual Studio Output Window
INGRESE UN NUMERO
Input: 123456

Loop 1: 12345
Loop 2: 1234
Loop 3: 123
Loop 4: 12
Loop 5: 1
Loop 6: 0

Result: 654321

Usando el divisor para decimales:
Cita de: Visual Studio Output Window
INGRESE UN NUMERO
Input: 123456

Loop 1: 12346
Loop 2: 1235
Loop 3: 124
Loop 4: 12
Loop 5: 1
Loop 6: 0

Result: 665421



Por último, déjame aconsejarte una cosa más...

Si el código que has hecho ha sido con la intención de aprender cosas básicas, o por que te han mandado un ejercicio en el que te obligan a solucionar el problema de esa forma, entonces está bien, pero si es por cualquier otro motivo entonces no estás haciendo lo más apropiado, puesto que hablando en términos de productividad y eficiencia, la librería de clases de .NET Framework expone una función llamada IEnumerable.Reverse() la cual sirve para invertir los elementos de un array/secuencia...

Para que te hagas una idea de la diferencia o ventaja que supone:

En una CPU AMD Ryzen 7 1700X, 10 millones de iteraciones del siguiente código finaliza en 16 segundos aprox.:
Código
  1. For x As Integer = 0 To 10000000
  2.    Dim num As Integer = 123456789, y As Integer
  3.    Do
  4.        y = y * 10 + (num Mod 10)
  5.        num = num \ 10
  6.    Loop While num > 0
  7. Next x
100 millones de iteraciones del mismo código toma un tiempo de ejecución total de 2:42 minutos.

Este otro código, bajo las mismas circunstancias que el primero, con 10 millones de iteraciones se toma 10 segundos aprox.:
Código
  1. For x As Integer = 0 To 10000000
  2.    Dim num As Integer = 123456789
  3.    num = CInt(String.Join("", num.ToString().Reverse()))
  4. Next x
100 millones de iteraciones del mismo código toma un tiempo de ejecución total de 1:41 minutos.

¿Cual es la conclusión de este benchmark?, pues que en la mayoría de ocasiones reinventar la rueda no es lo más apropiado ni tampoco lo más eficiente...

La lbrería de clases de .NET Framework se lleva desarrollando desde el año 2002, ¿alguien cree que no han pensado en la necesidad de invertir secuencias?, ¡por supuesto que si!, .NET Framework expone una inmensa cantidad de sofisticados miembros (métodos y funciones desarrolladas por Microsoft) que nos facilitan la vida y, aunque para realizar una inversión de los dígitos del valor de una variable numérica debemos sufrir un tedioso proceso de conversión de tipo a string, luego a array/IEnumerable, iterar la secuencia hacia atrás, unir la secuencia resultante y el direct cast a Integer, al final lo cierto es que el tiempo de ejecución total supone mucho menos que si lo intentásemos hacer de otro modo... por lo tanto es más eficiente ( aunque por otro lado el algoritmo interno de la función IEnumerable.Reverse() no es muy eficiente, pero eso es otra historia ).

¡Saludos!


« Última modificación: 22 Junio 2017, 17:11 pm por Eleкtro » En línea



Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Ejercicio de invertir un numero en vb.net (algo incomprendido)
« Respuesta #2 en: 23 Junio 2017, 01:48 am »

El modo más fácil y rápido de invertir una cadena de texto, es acceder a sus bytes individuales y operar sobre ellos... Toma rel primero e intercambialro por el último, luego el segundo por el penúltimo, etc... hasta que se encuentren en el centro.

Ahora bien, cuando tienes un número, cada byte no retiene un carácter del número, si no que es un 'trozo' de la base numérica en sí misma (decimal al caso), por lo que se hace preciso convertirlo a cadena de texto (una base numérica de base 256, donde los números tienen una posición concreta dentro de dicha base), sólo entonces la inversión puede aplicarse adecuadamente operando con los bytes...

Más o menos como los tienes (y digo más o menos, porque al tiempo que inviertes, vas generando el número, es más óptimo, convertirlo entero a cadena, luego invertirlo y luego convertirlo a número (si es preciso que deba devolverse un número)),  sin embargo, en tu código hay dos errores de lógica...

...
        Do
            WriteLine("INGRESE UN NUMERO")
            num = ReadLine()
            Do
                y = y * 10 + (num Mod 10)
                num = num \ 10
            Loop While num > 0
            WriteLine(y)
            WriteLine()
            y = 0

        Loop While y = 0

...
Marcado en negrita...
- Tu bucle interno, debería tener el 'while' tras el 'do', ya que si la entrada es 0, todavía entrará en el bucle una vez, siendo innecesario (sin entrar a valorar el código interno).
- Tu bucle externo, es un bucle sin fin... porque le dices (marcado en negrita):
 Y = 0 y luego: Repetir mientras Y=0, como acabas de asignarle el valor 0, jamás saldrá del bucle, porque jamás dejará de cumplir esa condición.
« Última modificación: 23 Junio 2017, 01:53 am por NEBIRE » En línea

okik


Desconectado Desconectado

Mensajes: 462


Ver Perfil
Re: Ejercicio de invertir un numero en vb.net (algo incomprendido)
« Respuesta #3 en: 23 Junio 2017, 22:20 pm »

Matemáticamente...

Código
  1.  
  2. Do
  3.            Console.WriteLine("Escribe un número:")
  4.            Dim numero As Integer = Console.ReadLine()
  5.            Dim numeroInvertido As String = Nothing
  6.            Dim y As Integer
  7.            While numero > 0
  8.                y = numero Mod 10
  9.                numero \= 10
  10.                numeroInvertido &= y
  11.            End While
  12.            Console.WriteLine(numeroInvertido)
  13.            Console.WriteLine()
  14.        Loop
  15.  
  16.  


Con Substring:

Código
  1.     Do
  2.            Console.WriteLine("Escribe un número:")
  3.            Dim numero As String = Console.ReadLine()
  4.            Dim numeroInvertido As String = Nothing
  5.            For I As Integer = 1 To numero.Length
  6.  
  7.                numeroInvertido += numero.Substring(numero.Length - I, 1)
  8.            Next
  9.            Console.WriteLine(numeroInvertido)
  10.            Console.WriteLine()
  11.        Loop
  12.  
« Última modificación: 24 Junio 2017, 09:05 am por okik » En línea

DSREY

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Re: Ejercicio de invertir un numero en vb.net (algo incomprendido)
« Respuesta #4 en: 24 Junio 2017, 21:41 pm »

gracias por su ayuda, entiendo que hay mas formas de hacer que un numero se invierta y son mejores, como estoy recien aprendiendo a programar no conozco aun todas sus funciones aunq me gustaria algun folleto de los espacios de nombres y variables que existen y en que situaciones se las puede usar o para que sirven,
asi podre ponerlas en mi speudocodigo.... :huh: :huh: :huh:
« Última modificación: 24 Junio 2017, 21:49 pm por DSREY » En línea

DSREY

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Re: Ejercicio de invertir un numero en vb.net (algo incomprendido)
« Respuesta #5 en: 24 Junio 2017, 21:48 pm »

gracias por su ayuda, entiendo que hay mas formas de hacer que un numero se invierta y son mejores, como estoy recien aprendiendo a programar no conozco aun todas sus funciones aunq me gustaria algun folleto de los espacios de nombres y variables que existen y en que situaciones se las puede usar o para que sirven,
asi podre ponerlas en mi speudocodigo....
por otro lado tengo una duda... en cuanto a reolver ejercicios como sumas, resta, multiplicacion, division y potencias,
que variable se usa.?? xq no me resuelve ninguna operacion este codigo que hice,,, se trata sobre sacar el indice de masa corporal y bueno se usan varias operaciones ...
este es mi codigo

Código:
Imports System.Console
Module Module1

    Sub Main()
        Dim nom As String
        Dim cm, lb, m, kg, m2 As Integer
        Dim masa As Long
        cm = 0
        lb = 0
        m = cm / 100
        kg = lb / 2.2
        m2 = m * m
        WriteLine("CALCULADORA DE MASA CORPORAL CMC")
        WriteLine("")
        WriteLine("ESCRIBA SU NOMBRE")
        nom = ReadLine()
        WriteLine("ESCRIBA SU ESTATURA EN CENTIMETROS")
        cm = ReadLine()
        WriteLine("ESCRIBA SU PESO EN LIBRAS")
        lb = ReadLine()
        WriteLine(masa)
        WriteLine(kg)
        WriteLine(m)
        WriteLine(m2)
        masa = kg / m2
        WriteLine(("SU PORCENTAJE DE MASA CORPORAL ES, "), masa, ("%"))
        WriteLine("*---------------------------------------------------------*")
        WriteLine("*Indice de masa             Clasificacion                 *")
        WriteLine("*---------------------------------------------------------*")
        WriteLine("*<16.00___________________Infrapeso: Delgadez Severa______*")
        WriteLine("*16.00 - 16.99____________Infrapeso: Delgadez moderada____*")
        WriteLine("*17.00 - 18.49____________Infrapeso: Delgadez aceptable___*")
        WriteLine("*18.50 - 24.99____________Peso Normal_____________________*")
        WriteLine("*25.00 - 29.99____________Sobrepeso_______________________*")
        WriteLine("*30.00 - 34.99____________Obeso: Tipo I___________________*")
        WriteLine("*35.00 - 40.00____________Obeso: Tipo II__________________*")
        WriteLine("*>40.00___________________Obeso: Tipo III_________________*")
        WriteLine("*---------------------------------------------------------*")
        ReadLine()
        If masa < 16 Then
            WriteLine(nom, ("Tiene infrapeso: delgadez severa"))
            WriteLine("presione enter para salir")
            ReadLine()
            If masa > 16 And masa < 16.99 Then
                WriteLine("Tiene Infrapeso: Delgadez moderadap")
                WriteLine("presione enter para salir")
                ReadLine()
                If masa >= 17 And masa <= 18.49 Then
                    WriteLine(nom, " Tiene Infrapeso: Delgadez aceptable")
                    WriteLine("presione enter para salir")
                    ReadLine()
                    If masa >= 18.5 And masa <= 24.99 Then
                        WriteLine(nom, " Tiene Peso Normal")
                        WriteLine("presione enter para salir")
                        ReadLine()
                        If masa >= 25 And masa <= 29.99 Then
                            WriteLine(nom, " Tiene sobrepeso")
                            WriteLine("presione enter para salir")
                            ReadLine()
                            If masa >= 30 And masa <= 34.99 Then
                                WriteLine(nom, " Se encuentra con Obesidad: Tipo I")
                                WriteLine("presione enter para salir")
                                ReadLine()
                                If masa >= 35 And masa <= 40 Then
                                    WriteLine(nom, " Se encuentra con Obesidad: Tipo II")
                                    WriteLine("presione enter para salir")
                                    ReadLine()
                                    If masa > 40 Then
                                        WriteLine(nom, " Se encuentra con Obesidad: Tipo III")
                                        WriteLine("presione enter para salir")
                                        ReadLine()

                                    End If
                                End If
                            End If
                        End If
                    End If
                End If
            End If
        End If

    End Sub

End Module

"no se como insertan el codigo y q salga con las letras azules o rojas segun corresponde"

que debo cambiar.?? xq aumente unas lineas para verificar si esta resolviendo los ajercicios y nada

puse

Código:
writeline (masa)
writeline (kg)
writeline (m)
writeline (m2)

y me sale

0
0
0
0

....  :( :( :( :huh: :huh: :huh: :huh:
« Última modificación: 24 Junio 2017, 21:51 pm por DSREY » En línea

okik


Desconectado Desconectado

Mensajes: 462


Ver Perfil
Re: Ejercicio de invertir un numero en vb.net (algo incomprendido)
« Respuesta #6 en: 25 Junio 2017, 14:25 pm »

puse

Código:
writeline (masa)
writeline (kg)
writeline (m)
writeline (m2)

y me sale

0
0
0
0

....  :( :( :( :huh: :huh: :huh: :huh:

Te sale ...
Código:
0
0
0

 porque colocas las operaciones ANTES de que el usuario haya introducido algún valor, y como es de esperar operas con valores nulos


Código:
   
(ANTES)
m = cm / 100
kg = lb / 2.2
m2 = m * m

...
(DESPUÉS)
        WriteLine("ESCRIBA SU ESTATURA EN CENTIMETROS")
        cm = ReadLine()
        WriteLine("ESCRIBA SU PESO EN LIBRAS")
        lb = ReadLine()
...

Como puedes imaginar primero se debe introducir el valor y luego operar.

Por otro lado como operas con DECIMALES debes usar el tipo de variable Decimal

Cuando introduzcas valores numéricos en el código si son decimales añade la letra D para indicar a VB, por ejemplo 2.2D
. De este modo indicas a VB que es un número decimal, y trabajará con el como tal.


Bueno aquí dejo tu código creo que arreglado, espero te sirva y esté correcto. Si ves cualquier problema o no entiendes algo nos comentas ¿ok?.

Código
  1. Imports System.Console
  2. Imports System.ConsoleColor
  3. Module Module1
  4.  
  5.    Sub Main()
  6.        Dim nom As String
  7.        Dim cm, lb, m, kg, m2 As Decimal
  8.        Dim masa As Decimal
  9.  
  10.        WriteLine("CALCULADORA DE MASA CORPORAL CMC")
  11.        WriteLine("")
  12.        WriteLine("ESCRIBA SU NOMBRE")
  13.        nom = ReadLine().ToUpper
  14.        WriteLine("ESCRIBA SU ESTATURA EN CENTIMETROS")
  15.        cm = ReadLine()
  16.        WriteLine("ESCRIBA SU PESO EN LIBRAS")
  17.        lb = ReadLine().Replace(".", ",")
  18.        m = cm / 100D
  19.        kg = lb / 2.20462D
  20.        m2 = m * m
  21.        masa = CDec(kg / m2)
  22.        WriteLine()
  23.  
  24.        WriteLine("===========================================")
  25.        ForegroundColor = Cyan
  26.        WriteLine(String.Format("NOMBRE: {0}", nom))
  27.        WriteLine(String.Format("PESO (KG): {0:0.0000} kg", kg)) '{0} referencia a valor kg y :00.0000 formato a mostrar ej: 45,5899
  28.        WriteLine(String.Format("ESTATURA: {0:0.00} m", m))
  29.        WriteLine(String.Format("M{1}: {0:0.0000} m{1}", m2, Convert.ToChar(178)))
  30.        ForegroundColor = White
  31.        WriteLine("===========================================")
  32.        WriteLine()
  33.        ForegroundColor = White
  34.        WriteLine("SU PORCENTAJE DE MASA CORPORAL ES: ")
  35.        WriteLine()
  36.        BackgroundColor = Yellow
  37.        ForegroundColor = Red
  38.        Write(String.Format("{0:0.0000} %", masa))
  39.        WriteLine()
  40.        WriteLine()
  41.  
  42.        BackgroundColor = Yellow
  43.        ForegroundColor = Blue
  44.        WriteLine("*---------------------------------------------------------*")
  45.        WriteLine("*Indice de masa             Clasificacion                 *")
  46.        WriteLine("*---------------------------------------------------------*")
  47.        WriteLine("*<16.00___________________Infrapeso: Delgadez Severa______*")
  48.        WriteLine("*16.00 - 16.99____________Infrapeso: Delgadez moderada____*")
  49.        WriteLine("*17.00 - 18.49____________Infrapeso: Delgadez aceptable___*")
  50.        WriteLine("*18.50 - 24.99____________Peso Normal_____________________*")
  51.        WriteLine("*25.00 - 29.99____________Sobrepeso_______________________*")
  52.        WriteLine("*30.00 - 34.99____________Obeso: Tipo I___________________*")
  53.        WriteLine("*35.00 - 40.00____________Obeso: Tipo II__________________*")
  54.        WriteLine("*>40.00___________________Obeso: Tipo III_________________*")
  55.        WriteLine("*---------------------------------------------------------*")
  56.  
  57.  
  58.        BackgroundColor = Black
  59.        ForegroundColor = White
  60.  
  61.        WriteLine()
  62.  
  63.        Select Case masa
  64.            Case Is < 16D
  65.                WriteLine(nom & "Tiene Infrapeso: Delgadez Severa")
  66.            Case 16D To 16.99D
  67.                WriteLine(nom & "Tiene Infrapeso: Delgadez moderada")
  68.            Case 17D To 18.49D
  69.                WriteLine(nom & " Tiene Infrapeso: Delgadez aceptable")
  70.            Case 18.5D To 24.99D
  71.                WriteLine(nom & " Tiene Peso Normal")
  72.            Case 25D To 29.99D
  73.                WriteLine(nom & " Tiene sobrepeso")
  74.            Case 30D To 34.99D
  75.                WriteLine(nom & " Se encuentra con Obesidad: Tipo I")
  76.            Case 35D To 40D
  77.                WriteLine(nom & " Se encuentra con Obesidad: Tipo II")
  78.            Case Is > 40D
  79.                WriteLine(nom & " Se encuentra con Obesidad: Tipo III")
  80.        End Select
  81.        'If masa > 16 And masa < 16.99 Then
  82.        ' WriteLine("Tiene Infrapeso: Delgadez moderada")
  83.        'End If
  84.  
  85.        'If masa >= 17 And masa <= 18.49 Then
  86.        '    WriteLine(nom, " Tiene Infrapeso: Delgadez aceptable")
  87.        'End If
  88.  
  89.        'If masa >= 18.5 And masa <= 24.99 Then
  90.        '    WriteLine(nom, " Tiene Peso Normal")
  91.        'End If
  92.  
  93.  
  94.        'If masa >= 25 And masa <= 29.99 Then
  95.        '    WriteLine(nom, " Tiene sobrepeso")
  96.        'End If
  97.  
  98.        'If masa >= 30 And masa <= 34.99 Then
  99.        '    WriteLine(nom, " Se encuentra con Obesidad: Tipo I")
  100.        'End If
  101.  
  102.        'If masa >= 35 And masa <= 40 Then
  103.        '    WriteLine(nom, " Se encuentra con Obesidad: Tipo II")
  104.        'End If
  105.  
  106.  
  107.        'If masa > 40 Then
  108.        '    WriteLine(nom, " Se encuentra con Obesidad: Tipo III")
  109.        'End If
  110.  
  111.        ForegroundColor = Yellow
  112.        WriteLine()
  113.        WriteLine("Presione ENTER para salir")
  114.  
  115.        ReadLine()
  116.  
  117.  
  118.    End Sub
  119.  
  120. End Module
  121.  

Por cierto  según esto tengo peso Normal, sin embargo ya estoy mas que harto que me digan que estoy muy delgado. En fin que le vamos a hacer.




He realizado una arreglo para que esto
Código:
 SU PORCENTAJE DE MASA CORPORAL ES:  21 %

quede en una sola línea tal que así:

Citar
SU PORCENTAJE DE MASA CORPORAL ES: 21 %")

Simplemente remplazas lo anterior por  esto y listo:

Código
  1.   Out.NewLine = Convert.ToChar(ConsoleKey.Backspace)
  2.        WriteLine("SU PORCENTAJE DE MASA CORPORAL ES:  ")
  3.        BackgroundColor = Yellow
  4.        ForegroundColor = Red
  5.        Out.NewLine = Environment.NewLine
  6.        WriteLine(String.Format("{0:0.0000} %", masa))
  7.        WriteLine()
  8.  



COMPLETO:
Código
  1. Imports System.Console
  2. Imports System.ConsoleColor
  3. Module Module1
  4.  
  5.    Sub Main()
  6.        Dim nom As String
  7.        Dim cm, lb, m, kg, m2 As Decimal
  8.        Dim masa As Decimal
  9.  
  10.        WriteLine("CALCULADORA DE MASA CORPORAL CMC")
  11.        WriteLine("")
  12.        WriteLine("ESCRIBA SU NOMBRE")
  13.        nom = ReadLine().ToUpper
  14.        WriteLine("ESCRIBA SU ESTATURA EN CENTIMETROS")
  15.        cm = ReadLine()
  16.        WriteLine("ESCRIBA SU PESO EN LIBRAS")
  17.        lb = ReadLine().Replace(".", ",")
  18.        m = cm / 100D
  19.        kg = lb / 2.20462D
  20.        m2 = m * m
  21.        masa = CDec(kg / m2)
  22.        WriteLine()
  23.  
  24.        WriteLine("===========================================")
  25.        ForegroundColor = Cyan
  26.        WriteLine(String.Format("NOMBRE: {0}", nom))
  27.        WriteLine(String.Format("PESO (KG): {0:0.0000} kg", kg)) '{0} referencia a valor kg y :00.0000 formato a mostrar ej: 45,5899
  28.        WriteLine(String.Format("ESTATURA: {0:0.00} m", m))
  29.        WriteLine(String.Format("M{1}: {0:0.0000} m{1}", m2, Convert.ToChar(178)))
  30.        ForegroundColor = White
  31.  
  32.        WriteLine("===========================================")
  33.        WriteLine()
  34.  
  35.        ForegroundColor = White
  36.        Out.NewLine = Convert.ToChar(ConsoleKey.Backspace)
  37.        WriteLine("SU PORCENTAJE DE MASA CORPORAL ES:  ")
  38.        BackgroundColor = Yellow
  39.        ForegroundColor = Red
  40.        Out.NewLine = Environment.NewLine
  41.        WriteLine(String.Format("{0:0.0000} %", masa))
  42.        WriteLine()
  43.  
  44.        BackgroundColor = Yellow
  45.        ForegroundColor = Blue
  46.        WriteLine("*---------------------------------------------------------*")
  47.        WriteLine("*Indice de masa             Clasificacion                 *")
  48.        WriteLine("*---------------------------------------------------------*")
  49.        WriteLine("*<16.00___________________Infrapeso: Delgadez Severa______*")
  50.        WriteLine("*16.00 - 16.99____________Infrapeso: Delgadez moderada____*")
  51.        WriteLine("*17.00 - 18.49____________Infrapeso: Delgadez aceptable___*")
  52.        WriteLine("*18.50 - 24.99____________Peso Normal_____________________*")
  53.        WriteLine("*25.00 - 29.99____________Sobrepeso_______________________*")
  54.        WriteLine("*30.00 - 34.99____________Obeso: Tipo I___________________*")
  55.        WriteLine("*35.00 - 40.00____________Obeso: Tipo II__________________*")
  56.        WriteLine("*>40.00___________________Obeso: Tipo III_________________*")
  57.        WriteLine("*---------------------------------------------------------*")
  58.  
  59.  
  60.        BackgroundColor = Black
  61.        ForegroundColor = White
  62.  
  63.        WriteLine()
  64.  
  65.        Select Case masa
  66.            Case Is < 16D
  67.                WriteLine(nom & "Tiene Infrapeso: Delgadez Severa")
  68.            Case 16D To 16.99D
  69.                WriteLine(nom & "Tiene Infrapeso: Delgadez moderada")
  70.            Case 17D To 18.49D
  71.                WriteLine(nom & " Tiene Infrapeso: Delgadez aceptable")
  72.            Case 18.5D To 24.99D
  73.                WriteLine(nom & " Tiene Peso Normal")
  74.            Case 25D To 29.99D
  75.                WriteLine(nom & " Tiene sobrepeso")
  76.            Case 30D To 34.99D
  77.                WriteLine(nom & " Se encuentra con Obesidad: Tipo I")
  78.            Case 35D To 40D
  79.                WriteLine(nom & " Se encuentra con Obesidad: Tipo II")
  80.            Case Is > 40D
  81.                WriteLine(nom & " Se encuentra con Obesidad: Tipo III")
  82.        End Select
  83.  
  84.        ForegroundColor = Yellow
  85.        WriteLine()
  86.        WriteLine("Presione ENTER para salir")
  87.  
  88.        ReadLine()
  89.  
  90.  
  91.    End Sub
  92.  
  93. End Module
  94.  
« Última modificación: 25 Junio 2017, 14:55 pm por okik » En línea

DSREY

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Re: Ejercicio de invertir un numero en vb.net (algo incomprendido)
« Respuesta #7 en: 25 Junio 2017, 18:32 pm »

 :D :D okik, Muchas gracias, ahora entiendo mejor como hacer q funcione el pseudogodigo y como usar las variables,

Citar
Bueno aquí dejo tu código creo que arreglado, espero te sirva y esté correcto. Si ves cualquier problema o no entiendes algo nos comentas ¿ok?.

Código
;-)

Si funciono bien con select case y con if.


No tengo muy claro para que es exactamente "Convert.ToChar(178)"
Citar
WriteLine(String.Format("M{1}: {0:0.0000} m{1}", m2, Convert.ToChar(178)))

"ToUpper"
Citar
nom = ReadLine().ToUpper

 y "Cyan"
Citar
ForegroundColor = Cyan

Citar
Por otro lado como operas con DECIMALES debes usar el tipo de variable Decimal

Cuando introduzcas valores numéricos en el código si son decimales añade la letra D para indicar a VB, por ejemplo 2.2D
. De este modo indicas a VB que es un número decimal, y trabajará con el como tal.

y lo de los decimales me sirvio mucho, asi pude corregir otros pseudocodigos que estoy haciendo, la verdad es q tengo un examen el jueves en visual y como requisito para dar el examen es llevar 12 aplicaciones funcionando, (temas q ya nos dieron) y bueno ya solo me faltan 4 (hoy ya los termino) pero en fin
como uso visul basic 2017 en internet google o en otras paginas no encuentro mucha ayuda xq tienen pseudocodigos mas de visual estudio 2010 y ahora hay mas variables que son mejores para usarlas

 
En línea

okik


Desconectado Desconectado

Mensajes: 462


Ver Perfil
Re: Ejercicio de invertir un numero en vb.net (algo incomprendido)
« Respuesta #8 en: 25 Junio 2017, 20:34 pm »

No tengo muy claro para que es exactamente "Convert.ToChar(178)"
"ToUpper"
 y "Cyan"

Convert.ToChar() Convierte un valor Char en un carácter Unicode. Donde Char es un código UTF-16 (16-bits Unicode Transformation Format). En la tabla Unicode se puede encontrar que el superíndice "²" en formato UTF-16 corresponde al número Unicode U+00B2, 0x00B2, o bien &HB2. Donde B2 es el valor hexadecimal de 178. De modo que puedes ponerlo de las dos maneras.

Código
  1.    WriteLine(Convert.ToChar(&HB2))
  2.  
  3.    WriteLine(Convert.ToChar(178))
  4.  
  5.    WriteLine("²")
  6.  


https://en.wikipedia.org/wiki/List_of_Unicode_characters

https://unicode-table.com/es/#00B2
´
También puede ser que lo veas escrito así ChrW(178) en lugar de
Convert.ToChar(). Antiguamente en VB se usaba ChrW(), que es una función de VB6, pero todavía se puede usar en VB.NET.

Para declara una variable de tipo char se hace de la siguiente manera:
Código
  1.  
  2.        Dim miChar As Char =  Convert.ToChar(178) ' o ChrW(178),
  3.        Console.WriteLine(miChar)
  4.        Console.ReadLine()
  5.  


Una forma sencilla de encontrar el valor numérico Unicode de un carácter es usar el miembro Enumeración ConsoleKey

Enumeración ConsoleKey

Código
  1.  Dim caracter As Integer = ConsoleKey.A
  2.        WriteLine(caracter)
  3.        WriteLine(Convert.ToChar(caracter))
  4.  

Enter por ejemplo sería el 13

Y si te fijas en el código hay una línea como esta:
Código
  1. Out.NewLine = Convert.ToChar(ConsoleKey.Backspace)
  2.  

He utilizado el ConsoleKey para obtener el código de retroceso o retorno de carro (ConsoleKey.Backspace). Que es el 8.

De modo que envío un retorno de carro a la consola para subir el valor del porcentaje hacia la línea anterior.


ToUpper es un método que convierte una cadena todo en mayúsculas

Código:
Dim cadena as String= "Hola mundo"
WriteLine(cadena.ToUpper())
ReadLine()

Devuelve "HOLA MUNDO"

Método String.ToUpper ()



Cyan es un color de la lista de colores de System.ConsoleColor. El color azul clarito ▓▓▓ .
Enumeración ConsoleColor

Al principio de código he importado System.ConsoleColor para no tener que escribirlo todo el tiempo. Pero de no haberlo importado tendría que ponerlo así:
Código
  1.      Console.ForegroundColor = ConsoleColor.Cyan
  2.  

Si escribes "ConsoleColor." en el editor de código te aparecerá una lista de colores.

« Última modificación: 25 Junio 2017, 20:57 pm por okik » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ejercicio: factorización de un número, creación de "palabras" [python]
Ejercicios
Ragnarok 1 9,966 Último mensaje 21 Julio 2009, 20:46 pm
por Ragnarok
Invertir numero de coma flotante
Programación C/C++
jaguirred 5 3,566 Último mensaje 26 Febrero 2017, 22:01 pm
por engel lex
invertir un número con recursividad en java
Java
PleySu 9 21,046 Último mensaje 13 Marzo 2017, 00:38 am
por ivancea96
Invertir un número dado
Programación C/C++
BortizF 3 3,086 Último mensaje 18 Octubre 2017, 16:20 pm
por BortizF
invertir el número entero « 1 2 »
Programación C/C++
lohayne 10 12,606 Último mensaje 22 Abril 2018, 16:48 pm
por lohayne
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines