Título: Ejercicio de invertir un numero en vb.net (algo incomprendido) Publicado por: DSREY 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
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
· 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 (http://foro.elhacker.net/reglas.htm) -Engel Lex Título: Re: Ejercicio de invertir un numero en vb.net (algo incomprendido) Publicado por: Eleкtro 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 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 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! Título: Re: Ejercicio de invertir un numero en vb.net (algo incomprendido) Publicado por: Serapis 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... ... Marcado en negrita...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 ... - 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. Título: Re: Ejercicio de invertir un numero en vb.net (algo incomprendido) Publicado por: okik en 23 Junio 2017, 22:20 pm Matemáticamente...
Código
Con Substring: Código
Título: Re: Ejercicio de invertir un numero en vb.net (algo incomprendido) Publicado por: DSREY 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: Título: Re: Ejercicio de invertir un numero en vb.net (algo incomprendido) Publicado por: DSREY 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 "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) y me sale 0 0 0 0 .... :( :( :( :huh: :huh: :huh: :huh: Título: Re: Ejercicio de invertir un numero en vb.net (algo incomprendido) Publicado por: okik en 25 Junio 2017, 14:25 pm puse Código: writeline (masa) y me sale 0 0 0 0 .... :( :( :( :huh: :huh: :huh: :huh: Te sale ... Código: 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:
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
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
COMPLETO: Código
Título: Re: Ejercicio de invertir un numero en vb.net (algo incomprendido) Publicado por: DSREY 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 Título: Re: Ejercicio de invertir un numero en vb.net (algo incomprendido) Publicado por: okik 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
https://en.wikipedia.org/wiki/List_of_Unicode_characters (https://en.wikipedia.org/wiki/List_of_Unicode_characters) https://unicode-table.com/es/#00B2 (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
Una forma sencilla de encontrar el valor numérico Unicode de un carácter es usar el miembro Enumeración ConsoleKey Enumeración ConsoleKey (https://msdn.microsoft.com/es-es/library/system.consolekey(v=vs.110).aspx) Código
Enter por ejemplo sería el 13 Y si te fijas en el código hay una línea como esta: Código
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" Devuelve "HOLA MUNDO" Método String.ToUpper () (https://msdn.microsoft.com/es-es/library/ewdd6aed(v=vs.110).aspx) Cyan es un color de la lista de colores de System.ConsoleColor. El color azul clarito ▓▓▓ . Enumeración ConsoleColor (https://msdn.microsoft.com/es-es/library/system.consolecolor(v=vs.110).aspx) 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
Si escribes "ConsoleColor." en el editor de código te aparecerá una lista de colores. |