• Domingo 28 de Abril de 2024, 23:34

Autor Tema:  Duda sobre un metodo de VB 2005  (Leído 2065 veces)

Boxcarpilot

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Duda sobre un metodo de VB 2005
« en: Martes 22 de Septiembre de 2009, 06:18 »
0
Bueno recien empiezoe n Visual Basic 2005, despues de 5 años desde la ultima vez q use el 6.0

Tengo una tarea de varios programas, hay 1 algo raro para mi, tengo q leer un numero y volverlo palabras...

ejemplo:

0 imprime "cero"

4 imp "cuatro"

1265 imp "mil docientos sesenta y cinco"

100000 imp "cien mil"

1000000 imp "un millon"


Como hago eso?????????
Q debo importar??
solo se me ocurre un for por logica, pero mas nada, help, alguien q me de un ejemplito

GRacias

Sagma

  • Miembro MUY activo
  • ***
  • Mensajes: 390
  • Nacionalidad: bo
    • Ver Perfil
Re: Duda sobre un metodo de VB 2005
« Respuesta #1 en: Martes 22 de Septiembre de 2009, 15:25 »
0
hola que tal, fijate esto lo encontre en google.

Código: vb.net
  1.  
  2. Public Function Num2Text(ByVal value As Double) As String
  3.     Select Case value
  4.         Case 0 : Num2Text = "CERO"
  5.         Case 1 : Num2Text = "UN"
  6.         Case 2 : Num2Text = "DOS"
  7.         Case 3 : Num2Text = "TRES"
  8.         Case 4 : Num2Text = "CUATRO"
  9.         Case 5 : Num2Text = "CINCO"
  10.         Case 6 : Num2Text = "SEIS"
  11.         Case 7 : Num2Text = "SIETE"
  12.         Case 8 : Num2Text = "OCHO"
  13.         Case 9 : Num2Text = "NUEVE"
  14.         Case 10 : Num2Text = "DIEZ"
  15.         Case 11 : Num2Text = "ONCE"
  16.         Case 12 : Num2Text = "DOCE"
  17.         Case 13 : Num2Text = "TRECE"
  18.         Case 14 : Num2Text = "CATORCE"
  19.         Case 15 : Num2Text = "QUINCE"
  20.         Case Is <; 20 : Num2Text = "DIECI" & Num2Text(value - 10)
  21.         Case 20 : Num2Text = "VEINTE"
  22.         Case Is <; 30 : Num2Text = "VEINTI" & Num2Text(value - 20)
  23.         Case 30 : Num2Text = "TREINTA"
  24.         Case 40 : Num2Text = "CUARENTA"
  25.         Case 50 : Num2Text = "CINCUENTA"
  26.         Case 60 : Num2Text = "SESENTA"
  27.         Case 70 : Num2Text = "SETENTA"
  28.         Case 80 : Num2Text = "OCHENTA"
  29.         Case 90 : Num2Text = "NOVENTA"
  30.         Case Is <; 100 : Num2Text = Num2Text(Int(value  10) * 10) & " Y " & Num2Text(value Mod 10)
  31.         Case 100 : Num2Text = "CIEN"
  32.         Case Is <; 200 : Num2Text = "CIENTO " & Num2Text(value - 100)
  33.         Case 200, 300, 400, 600, 800 : Num2Text = Num2Text(Int(value  100)) & "CIENTOS"
  34.         Case 500 : Num2Text = "QUINIENTOS"
  35.         Case 700 : Num2Text = "SETECIENTOS"
  36.         Case 900 : Num2Text = "NOVECIENTOS"
  37.         Case Is <; 1000 : Num2Text = Num2Text(Int(value  100) * 100) & " " & Num2Text(value Mod 100)
  38.         Case 1000 : Num2Text = "MIL"
  39.         Case Is <; 2000 : Num2Text = "MIL " & Num2Text(value Mod 1000)
  40.         Case Is <; 1000000 : Num2Text = Num2Text(Int(value  1000)) & " MIL"
  41.             If value Mod 1000 Then Num2Text = Num2Text & " " & Num2Text(value Mod 1000)
  42.         Case 1000000 : Num2Text = "UN MILLON"
  43.         Case Is <; 2000000 : Num2Text = "UN MILLON " & Num2Text(value Mod 1000000)
  44.         Case Is <; 1000000000000.0# : Num2Text = Num2Text(Int(value / 1000000)) & " MILLONES "
  45.             If (value - Int(value / 1000000) * 1000000) Then Num2Text = Num2Text & " " & Num2Text(value - Int(value / 1000000) * 1000000)
  46.         Case 1000000000000.0# : Num2Text = "UN BILLON"
  47.         Case Is <; 2000000000000.0# : Num2Text = "UN BILLON " & Num2Text(value - Int(value / 1000000000000.0#) * 1000000000000.0#)
  48.         Case Else : Num2Text = Num2Text(Int(value / 1000000000000.0#)) & " BILLONES"
  49.             If (value - Int(value / 1000000000000.0#) * 1000000000000.0#) Then Num2Text = Num2Text & " " & Num2Text(value - Int(value / 1000000000000.0#) * 1000000000000.0#)
  50.     End Select
  51. End Function
  52.  
  53.  

este dato lo saque de esta direccion:

http://msmvps.com/blogs/jvargas/pages/convertirnumeroletras.aspx

suerte  :comp:
Sagma

elultimoguerrero

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Duda sobre un metodo de VB 2005
« Respuesta #2 en: Miércoles 23 de Septiembre de 2009, 02:14 »
0
Que tal Boxcarpilot, lo que yo entiendo que tu quieres hacer es que cuando introduzcas un número el sistema te muestra la cantidad en letras, es muy sencillo hacerlo, nuestro compañero sagma te ha proporcionado una buena solución, yo lo hago de la siguente forma, espero te pueda ayudar. Vamos a poner dos cajas de texto en nuestro formulario a una la llamaremos tnumeros y a otra tletras, damos doble clic a la caja tletras y escribimos el siguiente código:

Try
    If IsNumeric(Me.tnumeros.Text) Then
        Me.tletras.Text = Modletras.Convertir( _
        CLng(Me.tnumeros.Text), False)
    Else
        Me.tletras.Text = ""
    End If
Catch
    Me.tletras.Text = "Error."
End Try

Para esto vamos a agregar un módulo al que llamaremos Modletras (esta es una variable global para que no tengas que hacerlo en cada uno de los formularios) y agregamos el siguiente código:

Option Explicit On
Option Strict On

Module Modletras
    Public Function Convertir(ByVal Valor As Int64, Optional ByVal esCorto As Boolean = False) As String

        REM aUnidades  ' Unidades
        REM a1DecenasL ' Decenas Largo 10
        REM a1DecenasC ' Decenas Corto 10
        REM a2DecenasE ' Decenas Exact 20-90
        REM a2DecenasL ' Decenas Largo 20-90
        REM a2DecenasC ' Decenas Corto 20-90
        REM aCentenas  ' Centenas
        REM aMillares  ' Millares

        Dim aUnidades As String() = {"", "UNO", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE", "OCHO", "NUEVE"}
        Dim a1DecenasL As String() = {"DIEZ", "ONCE", "DOCE", "TRECE", "CATORCE", "QUINCE", "DIEZ Y SEIS", "DIEZ Y SIETE", "DIEZ Y OCHO", "DIEZ Y NUEVE"}
        Dim a1DecenasC As String() = {"DIEZ", "ONCE", "DOCE", "TRECE", "CATORCE", "QUINCE", "DIECISEIS", "DIECISIETE", "DIECIOCHO", "DIECINUEVE"}
        Dim a2DecenasE As String() = {"", "->ERROR<-", "VEINTE", "TREINTA", "CUARENTA", "CINCUENTA", "SESENTA", "SETENTA", "OCHENTA", "NOVENTA"}
        Dim a2DecenasL As String() = {"", "->ERROR<-", "VEINTE Y ", "TREINTA Y ", "CUARENTA Y ", "CINCUENTA Y ", "SESENTA Y ", "SETENTA Y ", "OCHENTA Y ", "NOVENTA Y "}
        Dim a2DecenasC As String() = {"", "->ERROR<-", "VEINTI", "TREINTI", "CUARENTI", "CINCUENTI", "SESENTI", "SETENTI", "OCHENTI", "NOVENTI"}
        Dim aCentenas As String() = {"", "CIENTO", "DOSCIENTOS", "TRESCIENTOS", "CUATROCIENTOS", "QUINIENTOS", "SEISCIENTOS", "SETECIENTOS", "OCHOCIENTOS", "NOVECIENTOS"}
        Dim aMillares As String() = {"", " MIL ", " MILLONES ", " MIL MILLONES ", " BILLONES ", " MIL BILLONES ", " TRILLONES ", " MIL TRILLONES ", "->ERROR<-", "->ERROR<-"}

        Dim CadenaFinal As String = ""
        Dim CadenaTemp As String = ""

        Dim Numero As Int64 = Valor
        Dim Millon As Integer = 0

        Dim Unidades As Integer
        Dim Decenas As Integer
        Dim Centenas As Integer

        Do While Numero > 0
            CadenaTemp = ""

            Unidades = CInt(Numero Mod 10)
            Decenas = CInt((Numero  10) Mod 10)
            Centenas = CInt((Numero  100) Mod 10)

            'Centenas
            If Centenas <> 0 Then
                If Centenas = 1 And Decenas + Unidades = 0 Then
                    CadenaTemp &= "CIEN"
                ElseIf Decenas + Unidades = 0 Then
                    CadenaTemp &= aCentenas(Centenas)
                Else
                    CadenaTemp &= aCentenas(Centenas) & " "
                End If
            End If

            'Decenas
            If Decenas <> 0 Then
                If esCorto Then
                    If Decenas = 1 Then
                        CadenaTemp &= a1DecenasC(Unidades)
                    ElseIf Unidades > 0 Then
                        CadenaTemp &= a2DecenasC(Decenas)
                    Else
                        CadenaTemp &= a2DecenasE(Decenas)
                    End If
                Else
                    If Decenas = 1 Then
                        CadenaTemp &= a1DecenasL(Unidades)
                    ElseIf Unidades > 0 Then
                        CadenaTemp &= a2DecenasL(Decenas)
                    Else
                        CadenaTemp &= a2DecenasE(Decenas)
                    End If
                End If
            End If

            'Unidades
            If Unidades <> 0 Then
                If Decenas <> 1 Then
                    If Unidades = 1 And Millon <> 0 Then
                        CadenaTemp &= "UN"
                    Else
                        CadenaTemp &= aUnidades(Unidades)
                    End If
                End If
            End If

            'Millares
            If Centenas + Decenas + Unidades <> 0 Then
                If Centenas + Decenas = 0 And Unidades = 1 And (Millon = 2 Or Millon = 4 Or Millon = 6) Then
                    Select Case Millon
                        Case Is = 2
                            CadenaTemp &= " MILLON "
                        Case Is = 4
                            CadenaTemp &= " BILLON "
                        Case Is = 6
                            CadenaTemp &= " TRILLON "
                    End Select
                Else
                    CadenaTemp &= aMillares(Millon)
                End If
            End If

            CadenaFinal = CadenaTemp & CadenaFinal
            Numero = 1000
            Millon += 1
        Loop

        Return CadenaFinal
    End Function
End Module

Existen muchas formas de lograr esta función, pero yo me adapté mucho a esta porque la uso para muchos formularios, estudia la solución de sagma y tu ya decidirás cual te conviene más, saludos.

elultimoguerrero

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Duda sobre un metodo de VB 2005
« Respuesta #3 en: Miércoles 23 de Septiembre de 2009, 02:24 »
0
Boxcarpilot, en el código que te mandé se le da doble clic  a la caja con el nombre de tnumeros y no a la tletras, lo que pasa es que tuve un error de escritura y me equivoqué, hay para que lo corrijas, saludos.

Boxcarpilot

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Duda sobre un metodo de VB 2005
« Respuesta #4 en: Miércoles 23 de Septiembre de 2009, 04:23 »
0
bueno gracias a ambos, como mencionaba no veia el lenguaje visual desde hace 5 años-...
otra cosa el programa solo puede ser ejecutado en modo consola, por ahora, luego lo paso a grafico.

Lo de un modulo NO se q es....  el rem me suena... no lo recuerdo...
vaya cuando uno no toca algo se pierde... siento como si volviera a empezar....

lo del try no es necesario luego hare las validaciones...

pregunta, usas programacion orientada a obj o estruc???

elultimoguerrero

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Duda sobre un metodo de VB 2005
« Respuesta #5 en: Miércoles 23 de Septiembre de 2009, 18:53 »
0
Ok Boxcarpilot, un módulo lo agregas de esta forma, agregar... módulo, esta función yo la utilizo en este ejemplo como una variable global, es decir, imagínate que tengas 5, 10, 20 ó más formularios donde tengas que convertir numeros a letras, yo este módulo lo delcaro como una variable global, es decir que todos esos 5 módulos la podrán utilizar, lo único que estaría poniendo en cada módulo es el código de la caja de texto a la que le di doble clic, si yo lo hiciera de manera individual tendría que agregar un módulo por cada formulario, obviamente existen otras códigos que hacen este tipo de conversiones pero la verdad no los tengo a la mano, mi programación está orientada a objetos, los formularios, cajas de textos, bases de datos, etc, espero te haya ayudado con tus dudas, seguimos colaborando.

Boxcarpilot

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Duda sobre un metodo de VB 2005
« Respuesta #6 en: Jueves 24 de Septiembre de 2009, 05:44 »
0
bueno gracias

mira el punto esq este programa yo la habia hecho ya, pero fue en java, aun lo tengo en java...
pense q pasarlo a VB seria facil... veo q no

No he podido... reprobare pero le pedire alguna orientacion al profesor, gracias por su ayuda amigos


Estoy pasandolo a modo consola, todo bien pero cuando pongo los numeros 101, 201, 301, 1455, no puede realizarse:
Código: vb.net
  1.  
  2. Module Module1
  3.  
  4.     Sub Main()
  5.  
  6.         Dim Num2 As String
  7.         Dim val As Integer
  8.         Console.WriteLine(" Conversion de Numeros  ")
  9.         Console.WriteLine(" ")
  10.         Console.WriteLine("Coloque el Numero a Convertir :")
  11.         val = Console.ReadLine()
  12.  
  13.         Select Case val
  14.  
  15.             Case 0 : Num2 = "CERO"
  16.  
  17.             Case 1 : Num2 = "UN"
  18.  
  19.             Case 2 : Num2 = "DOS"
  20.  
  21.             Case 3 : Num2 = "TRES"
  22.  
  23.             Case 4 : Num2 = "CUATRO"
  24.  
  25.             Case 5 : Num2 = "CINCO"
  26.  
  27.             Case 6 : Num2 = "SEIS"
  28.  
  29.             Case 7 : Num2 = "SIETE"
  30.  
  31.             Case 8 : Num2 = "OCHO"
  32.  
  33.             Case 9 : Num2 = "NUEVE"
  34.  
  35.             Case 10 : Num2 = "DIEZ"
  36.  
  37.             Case 11 : Num2 = "ONCE"
  38.  
  39.             Case 12 : Num2 = "DOCE"
  40.  
  41.             Case 13 : Num2 = "TRECE"
  42.  
  43.             Case 14 : Num2 = "CATORCE"
  44.  
  45.             Case 15 : Num2 = "QUINCE"
  46.  
  47.             Case Is < 20 : Num2 = "DIECI" & Num2(val - 10)
  48.  
  49.             Case 20 : Num2 = "VEINTE"
  50.  
  51.             Case Is < 30 : Num2 = "VEINTI" & Num2(val - 20)
  52.  
  53.             Case 30 : Num2 = "TREINTA"
  54.  
  55.             Case 40 : Num2 = "CUARENTA"
  56.  
  57.             Case 50 : Num2 = "CINCUENTA"
  58.  
  59.             Case 60 : Num2 = "SESENTA"
  60.  
  61.             Case 70 : Num2 = "SETENTA"
  62.  
  63.             Case 80 : Num2 = "OCHENTA"
  64.  
  65.             Case 90 : Num2 = "NOVENTA"
  66.  
  67.             Case Is < 100 : Num2 = Num2 & (Int(val  10) * 10) & " Y " & Num2(val Mod 10)
  68.  
  69.             Case 100 : Num2 = "CIEN"
  70.  
  71.             Case Is < 200 : Num2 = "CIENTO " & Num2(val - 100)
  72.  
  73.             Case 200, 300, 400, 600, 800 : Num2 = "Num2" & (Int(val  100)) & "CIENTOS"
  74.  
  75.             Case 500 : Num2 = "QUINIENTOS"
  76.  
  77.             Case 700 : Num2 = "SETECIENTOS"
  78.  
  79.             Case 900 : Num2 = "NOVECIENTOS"
  80.  
  81.             Case Is < 1000 : Num2 = "Num2" & (Int(val  100) * 100) & " " & "Num2" & (val Mod 100)
  82.  
  83.             Case 1000 : Num2 = "MIL"
  84.  
  85.             Case Is < 2000 : Num2 = "MIL " & Num2(val Mod 1000)
  86.  
  87.             Case Is < 1000000 : Num2 = Num2(Int(val  1000)) & " MIL"
  88.  
  89.                 If val Mod 1000 Then Num2 = Num2 & " " & Num2(val Mod 1000)
  90.  
  91.             Case 1000000 : Num2 = "UN MILLON"
  92.  
  93.             Case Else
  94.                 Console.WriteLine()
  95.         End Select
  96.  
  97.         Console.WriteLine(" ")
  98.         Console.WriteLine(Num2)
  99.         Console.ReadKey()
  100.     End Sub
  101.  
  102. End Module
  103.