Poner varios números y que los separe

Iniciado por SlayerBur, 26 Mayo 2017, 23:25 PM

0 Miembros y 2 Visitantes están viendo este tema.

SlayerBur

Hola.

Sucede que quiero hacer un programa que una persona coloque varios numeros, y que el programa los separe, y comience a contarlos.

El programa ya cuenta los numeros ingresados del 0 al 9, y los agrega a una variable a cada uno. Pero la persona tiene que ingresar numero por numero. Quiero saber como se haría para que la persona ingrese por ejemplo: 998742567850
Y lo que haga sea separar los números, y sume +1 a su correspondiente variable.
No se si me explico correctamente..

Eleкtro

#1
Cita de: SlayerBur en 26 Mayo 2017, 23:25 PM
No se si me explico correctamente..

Pues yo creo que no he entendido nada.

Tienes este número: 998742567850 (+1) y supuestamente quieres "desglosar" los dígitos para convertir el valor a un array, pues bien, puedes hacerlo así:

Código (vbnet) [Seleccionar]
Dim value As Long = (998742567850 + 1)

Dim arr As Integer() =
   Array.ConvertAll(Of Char, Integer)(value.ToString().ToCharArray(), Function(s As String) CInt(s))

Debug.WriteLine(String.Join(", ", arr))


Resultado de ejecución:
Cita de: Visual Studio Debug Output Console9, 9, 8, 7, 4, 2, 5, 6, 7, 8, 5, 1

PD: También puedes hacerlo con LINQ.

Saludos








Serapis

#2
Esta pregunta, (al menos la primera parte), es idéntica a la que ya se respondió en:
http://foro.elhacker.net/programacion_cc/ayuda_algoritmo_para_calcular_el_numero_de_veces_que_una_cifra_se_repite-t470039.0.html

Lo que me fuerza a sospechar que:
- O el tema es una tarea del cole, que varios alumnos tienen que resolver...
- O el usuario emanuek, es también SlayerBur (¿para qué un registro duplicado?). Supongo que los moderadores podrán verificar si la IP de estos usuarios coincide, y por ende deducir que se trata del mismo usuario...

Básicamente la mayor parte de problemas, es de doble dirección, es decir: si avanzas x, giras a la derecha y, subes z, avanzas n, bajas t, giras a derecha s, subes k.... ir desde el final al comienzo, es hacer el camino inverso...

Lo que quiere decir, que si el problema anterior se resolvió tomando la unidad, y dividiendo entre 10, dentro de un bucle....esto se resuelve igualmente siguiendo el bucle... y si antes dividíamos entre 10, ahora multiplicamos por 10 y si antes extraíamos las unidades, ahora la sumamos...

No se debe resolver problemas a base de preguntar, porque entonces jamás en la vida termina uno de preguntar cada cosa, cada día. Hay que pensar un mínimo, y no rendirse a los dos minutos, porque a fin de cuentas este problema son matemáticas de 9-10 años... y programarlo, es básicamente "darle nombre" a cada operación.

p.d.: aunque releyendoel mensaje de nuevo, al final no queda claro, si quieres separar separar las cifras sueltas, o unirlas tras recibirlas sueltas.
...Si es separarlas y llevar la cuenta de cada una, ya se explicó en el enlace proporcionado... y siguen siendo matemáticas de 10 años... y un simple toque de programación.

SlayerBur

Cita de: Eleкtro en 27 Mayo 2017, 13:07 PM

Código (vbnet) [Seleccionar]
Dim value As Long = (998742567850 + 1)

Dim arr As Integer() =
   Array.ConvertAll(Of Char, Integer)(value.ToString().ToCharArray(), Function(s As String) CInt(s))

Debug.WriteLine(String.Join(", ", arr))


Resultado de ejecución:
PD: También puedes hacerlo con LINQ.

Saludos

Gracias, eso separa los números, pero necesito una vez separado esos números contabilizarlos, lo que tendría que asignar cada número en una variable, ¿No es así?

---


NEBIRE: El enlace que me has mostrado, es como contabilizar los números, y eso lo tengo echo. Esa parte se me es fácil. Lo que estoy buscando mas bien es separar los números, y luego esos números poder utilizarlos en otra cosa.

En cuanto a lo de pensar un mínimo, llevo varios días buscando la forma, y pensando en como conseguirlo. Tengo hasta el SeudoCodigo echo, pero no logro encontrar la forma de separar los números y poder utilizarlos.

Gracias :)

Eleкtro

#4
Cita de: SlayerBur en 27 Mayo 2017, 20:39 PMeso separa los números, pero necesito una vez separado esos números contabilizarlos, lo que tendría que asignar cada número en una variable, ¿No es así?

Con el código que te he mostrado ya tienes cada número en una "variable" distinta: los índices del Array. . .

arr(0) = numero1
arr(1) = numero2
arr(2) = numero3
etc...


Saludos!








Serapis

#5
Cita de: SlayerBur en 27 Mayo 2017, 20:39 PM
NEBIRE: El enlace que me has mostrado, es como contabilizar los números, y eso lo tengo echo. Esa parte se me es fácil.
Sigo sin entenderte... a mi me dices esto...
Pero luego a electro, le respondes esto otro:
Cita de: SlayerBur en 27 Mayo 2017, 20:39 PM
Gracias, eso (el código de Electro) separa los números, pero necesito una vez separado esos números contabilizarlos, lo que tendría que asignar cada número en una variable, ¿No es así?
Así que no hay quien entienda a veces que rayos pedís...

De todos hay un código mucho más fácil para convertir un número en un array, de los valores que lo componen...
Código (vbnet) [Seleccionar]

Private Function Splitter(ByVal X As Integer) As Char()
   Return x.ToString().ToArray()
End Function


Y en la imagen la llamada, y un despliegue del resultado:


Cita de: SlayerBur en 27 Mayo 2017, 20:39 PM
En cuanto a lo de pensar un mínimo, llevo varios días buscando la forma, y pensando en como conseguirlo. Tengo hasta el SeudoCodigo echo, pero no logro encontrar la forma de separar los números y poder utilizarlos.
Varios días, ayyyyy... habría que ver el pseudocódigo que has hecho.

De todos modos el código del enlace que te daba, también separa los números (tanto si luego los cuentas como si no). De hecho, la conversión a array (ue hace VB, tras convertirlo a string, es más lento que esto: tomar las unidades del número y dividir entre 10, tomar las unidades, y dividir entre diez,  tomar las unidades del número y dividir entre 10, tomar las unidades del número y dividir entre 10... hasta que el valor a dividir sea 0... indicativo de que ya no hay más cifras...

SlayerBur

Muchas gracias a ambos :)

Logré solucionar ese problema, y poder continuar con mi "programa" :D