RSS
Facebook
G+

Buscador de IntercambioSOS:


Retroceder   Foro de Ayuda IntercambiosvirtualeS > Soporte Sobre: Educación & Entretenimiento > Zona Académica > Programación

Respuesta
 
Herramientas Desplegado
Antiguo 09-ago-2011     #1
Predeterminado Numeros enteros a numeros romanos en Visual Studio

Buen dia chicos, como su nombre lo dice necesito hacer un programita que me permita colocar un numero entero y al dar clic a un boton me de el mismo numero, pero en numeros romanos

Ejemplo:
Se introduce por teclado el numero 6
Al dar clic al boton debe mostrar por pantalla el numero 6 en romano VI

Este es el codigo que tengo:
Código PHP:
Public Class Form1

    
Private Sub Form1_Load(ByVal sender As System.ObjectByVal e As System.EventArgsHandles MyBase.Load

    End Sub

    
Private Sub BtnSalir_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles BtnSalir.Click
        Me
.Close()
    
End Sub

    
Private Sub BtnConvertir_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles BtnConvertir.Click
        
Try
            
Dim numero As Integer
            numero 
TxtNumero.Text


            
If numero 10 Then
                
If numero 1 Then
                    MsgBox
("I")
                Else
                    If 
numero 2 Then
                        MsgBox
("II")
                    Else
                        If 
numero 3 Then
                            MsgBox
("III")
                        Else
                            If 
numero 4 Then
                                MsgBox
("IV")
                            Else
                                If 
numero 5 Then
                                    MsgBox
("V")
                                Else
                                    If 
numero 6 Then
                                        MsgBox
("VI")
                                    Else
                                        If 
numero 7 Then
                                            MsgBox
("VII")
                                        Else
                                            If 
numero 8 Then
                                                MsgBox
("VIII")
                                            Else
                                                If 
numero 9 Then
                                                    MsgBox
("IX")
                                                
End If
                                            
End If
                                        
End If
                                    
End If
                                
End If
                            
End If
                        
End If
                    
End If
                
End If
            ElseIf 
numero >= 10 And numero 20 Then
                
If numero 10 Then
                    MsgBox
("X")
                Else
                    If 
numero <= 11 Then
                        MsgBox
("El numero es mayor a 10 y es muy tedioso seguir programando :S")
                    
End If
                
End If
            
End If
        Catch 
ex As Exception
            MsgBox
("Debe digitar numeros enteros")
        
End Try
    
End Sub

    
Private Sub TxtNumero_TextChanged(ByVal sender As System.ObjectByVal e As System.EventArgsHandles TxtNumero.TextChanged

    End Sub
End 
Class 
Como se daran cuenta no son mas que if's anidados, pero el codigo que tengo unicamente va hasta el numero 10; ya que es muy tedioso tener que hacer cientos de if, por ejemplo que se introduzca el numero 400 :S

Por favor si alguien sabe de un metodo menos tedioso, (en internet encontre que con un switch case, pero la verdad no se como implementarlo ) agradezco si me lo puede brindar

PD: Saludos al viejo cristian si en su busqueda llega por aqui xD

Responder Citando
Los siguientes 5 usuarios agradecen a Rekker por este mensaje:
baduser (09-ago-2011), carmen10 (10-ago-2011), joselmq (12-ago-2011), Orpheus96 (09-ago-2011), wlsnch (10-ago-2011)
Antiguo 09-ago-2011     #2
Predeterminado

Yo creo que para eso necesitas hacer una tabla en una base de datos con una columna con numero cardinal y otra columna con numero romano, y con programacion extraes la informacion.

mira estos links, es lo que necesitas:

http://www.vivir.com/vivir/universid...numromanos.htm

http://www.misosguar.com.ar/romanos/

http://www.mscperu.org/utiles/utilidades/num_roman.htm

salu2

"Hay una fuerza motriz mas poderosa que el vapor, la electricidad y la energía atómica, LA VOLUNTAD."
Responder Citando
Los siguientes 6 usuarios agradecen a baduser por este mensaje:
carmen10 (10-ago-2011), Eloy58 (10-ago-2011), joselmq (12-ago-2011), Orpheus96 (09-ago-2011), Rekker (10-ago-2011), wlsnch (10-ago-2011)
Antiguo 10-ago-2011     #3
Feliz



CONVERTIR DE NÚMEROS ENTERO A NÚMEROS ROMANOS

En este caso vamos a convertir números romanos del 1 al 3999. Utilizamos este rango porque es más fácil de entenderlo, ya que de 4000 en adelante se coloca una línea horizontal por encima del número, para indicar que la base de la multiplicación es por 1.000. Esto no lo vamos a hacer para no crear demasiada confusión.



Los romanos no utilizaban el cero, ya que su defición era que los números era algo que se podía contar pero el cero no se puede contar.


Para no extendernos muchos repasas este link que te explica la teoría de los números romanos link wiki: http://es.wikipedia.org/wiki/Numeraci%C3%B3n_romana

Vamos al grano.

La idea es crear una matriz o array:


Entero ------>Romano----->Indice
1000--------> M---------->0
900--------> CM---------->1
500---------> D---------->2
400---------> CD---------->3
100---------> C---------->4
90----------> XC---------->5
50----------> L---------->6
40----------> XL---------->7
10----------> X---------->8
9----------> IX---------->9
5----------> V---------->10
4----------> IV---------->11
1----------> I----------->12


Crearemos matriz unidimensional de 13 elementos para los enteros
Dim Entero() As Integer = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}
matriz unidimensional de 13 elementos para los simbolos romanos
Dim Romano() As String = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}
En indice nos indica que los arreglos comienza a partir del cero en adelante.

En el form tenemos un textbox, lo que escribamos dentro son texto para convertirlo a numero entero utilizaremos la función Val.
numero = Val(TxtNumero.Text)
Como queremos en ese mismo textbox convertir a numero enteros entonce, limpiamos el contenido, no te olvides que el valor ya está guardado en la variable número.

En esta línea verifica si se cumple la condición.

If ((numero >= 1) And (numero < 4000)) Then



En esta parte del codigo:

Código PHP:
  While (numero 0)
                    While (
numero >= Entero(indice))
                        
TxtNumero.Text TxtNumero.Text Romano(indice)
                        
numero numero Entero(indice)
                    
End While
                    
indice indice 1
              End 
While 
Para entenderlo pongamos un número que es 152:

152>=Entero(0) 152>=1000 NO entonces indice=0+1
152>= Entero(1) 152>=900 NO entonces indice=1+1
152>= Entero(2) 152>=500 NO entonces indice=2+1
152>=Entero(3) 152>=400 NO entonces indice=3+1
152>=Entero(4) 152>=100 SI entonces TxtNumero.Text=””+ ”C” numero=152-100 indice=4+1
52>= Entero(5) 52>=90 NO entonces indice=5+1
52>=Entero(6) 52>=50 SI entonces TxtNumero.Text=”C”+ ”L” numero=52-50 indice=6+1
2>=Entero(7) 2>=40 NO entonces indice=7+1
2>=Entero(8) 2>=10 NO entonces indice=8+1
2>=Entero(9) 2>=9 NO entonces indice=9+1
2>=Entero(10) 2>=5 NO entonces indice=10+1
2>=Entero(11) 2>=4 NO entonces indice=11+1
2>=Entero(12) 2>=1 SI TxtNumero.Text=”CL”+ ”I” numero=2-1
1>=Entero(12) 1>=1 SI TxtNumero.Text=”CLI”+ ”I” numero=1-1

Y finalmente se sale del bucle porque while(numero>0) While(0>0) entonces no cumple la condición y finalmente la variable TxtNumero.Text=”CLII”

En el siguiente está el código completo, no puse comentario para no confundirte. Solamente copia el código y pégalo en tu actual proyecto, ya que los nombres de las variables y los objetos, me base en el código que pusiste en tu mensaje.

Código PHP:
Public Class Form1

    
Private Sub Form1_Load(ByVal sender As System.ObjectByVal e As System.EventArgsHandles MyBase.Load
    End Sub

    
Private Sub BtnSalir_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles BtnSalir.Click
        Me
.Close()
    
End Sub

    
Private Sub BtnConvertir_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles BtnConvertir.Click
        
Try
            
Dim numeroindice As Integer
            Dim Entero
() As Integer = {1000900500400100905040109541}
            
Dim Romano() As String = {"M""CM""D""CD""C""XC""L""XL""X""IX""V""IV""I"}
            
numero Val(TxtNumero.Text)
            
indice 0
            TxtNumero
.Text ""
            
If ((numero >= 1) And (numero 4000)) Then
                
While (numero 0)
                    While (
numero >= Entero(indice))
                        
TxtNumero.Text TxtNumero.Text Romano(indice)
                        
numero numero Entero(indice)
                    
End While
                    
indice indice 1
                End 
While
            Else
                
MsgBox("Debe digitar numeros enteros de 1 al 3999")
            
End If
        Catch 
ex As Exception
            MsgBox
("Debe digitar numeros enteros")
        
End Try
    
End Sub
End 
Class 
Generando el ejecutable:



NOTA: La etiqueta dice PHP, pero es código de visual Basic .net, ya que no hay etiqueta de Visual Studio.

Mil disculpas si hay errores, es que en mi país ahorita son la 3 de la madrugada, espero haberte ayudado.

Saludos,


“ No hay que confundir nunca el conocimiento con la sabiduría. El primero nos sirve para ganarnos la vida; la sabiduría nos ayuda a vivir. ” - Sorcha Carey

Última edición por wlsnch; 10-ago-2011 a las 04:36 Razón: Corregir algunos errores ortográficos
Responder Citando
Los siguientes 5 usuarios agradecen a wlsnch por este mensaje:
carmen10 (10-ago-2011), Eloy58 (10-ago-2011), Francisco6812 (07-jun-2017), joselmq (13-ago-2011), Rekker (10-ago-2011)
Antiguo 10-ago-2011     #4
Predeterminado

Gracias por compartir

Saludos




El que busca la verdad corre el riesgo de encontrarla.
Responder Citando
Usuarios que han agradecido este mensaje de carmen10
wlsnch (10-ago-2011)
Antiguo 10-ago-2011     #5
Predeterminado

Muchisimas gracias amigo wlsnch, efectivamente funciona, solo quiero preguntarte algo mas.
Dices:
En el form tenemos un textbox, lo que escribamos dentro son texto para convertirlo a numero entero utilizaremos la función Val.

numero = Val(TxtNumero.Text)


La funcion Val hace lo mismo que la funcion CInt? (Convertir a Integer) es decir colocar:
numero = Val(TxtNumero.Text) es igual a colocar numero = CInt(TxtNumero.Text)
La probre y el resultado es el mismo, solo quiero saber si las funciones Val y CInt son iguales.
Nuevamente muchas gracias

Edito
Para las personas que no entendieron muy bien la explicacion, dejo una detallada paso a paso para entenderlo mejor, obviamente sin desmeritar TODO el trabajo del amigo wlsnch


Última edición por Rekker; 10-ago-2011 a las 16:14 Razón: Agregar info
Responder Citando
Los siguientes 3 usuarios agradecen a Rekker por este mensaje:
baduser (10-ago-2011), joselmq (13-ago-2011), wlsnch (10-ago-2011)
Antiguo 10-ago-2011     #6
Feliz



Hola Rekker:

Muchas gracias por la edición con más detalle en la explicación. Gracias


Me alegro que te haya funcionado.

La diferencia entre la función Val y la Cint.


Val(cadena) es una función que devuelve los números que se encuentra en una cadena, reconoce los signos de puntuación. Estos números convertidos pueden ser de Integer o Double.

Cint(cadena) es un función que redondea al número más cercano. Por lo tanto acepta Integer o Double.



Código PHP:
Public Class Form1
    
Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Button1.Click
        Label3
.Text Val(TextBox1.Text)
        
Label4.Text CInt(TextBox2.Text)
    
End Sub
End 
Class 
Como podemos observar en el gráfico el Val("36.5"), esta función devolvio un Double que es 36.5, mientras que CInt("36.5") lo convirtió a un Integer pero con redondeo.

¿Qué pasaría si el usuario ingresa en vez de número un texto?

En el caso del Cint("Hola") generaría un error que hay que controlarlo. Igual error produciría si Cint("") estuviera vacio.


En el caso de Val("Hola") o Val("") la función val devuelve el valor de cero. El programador puede utilizar este valor para indicar que el usuario no ingreso ningún número.




Código PHP:
Public Class Form1
    
Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Button1.Click
        Label3
.Text Val(TextBox1.Text)
    
End Sub
End 
Class 

Pero con el val("3Hola25") devuelve 3, la razón principal es que primero lee de izquierda a derecha busca un numero y en el momento de llegar a la letra 'H´y como no es número se detiene la conversión.



Como habrás visto , puedes usar el CInt pero no te olvides que controlar lo que ingrese el usuario en el textbox, ya que si ingresa texto generaría un error.


Saludos





“ No hay que confundir nunca el conocimiento con la sabiduría. El primero nos sirve para ganarnos la vida; la sabiduría nos ayuda a vivir. ” - Sorcha Carey

Última edición por wlsnch; 10-ago-2011 a las 17:05
Responder Citando
Los siguientes 3 usuarios agradecen a wlsnch por este mensaje:
baduser (10-ago-2011), joselmq (13-ago-2011), Rekker (10-ago-2011)
Antiguo 10-ago-2011     #7
Feliz

Hola Rekker:

Muchas gracias por la edición para entender los while, así creo lo van a entender todo el mundo. Gracias.


Si vas a usar el Cint, hay que controlar los errores, usas la instrucción Try...Catch...End Try

Aquí te muestro el código


Código PHP:
Public Class Form1
    
Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Button1.Click
        
Try
            
Label1.Text CInt(TextBox1.Text)
        Catch 
ex As Exception
            MsgBox
("Se ha producido el siguiente error: " ex.Message_
                       MsgBoxStyle
.Critical MsgBoxStyle.OkOnly)
            
MsgBox("Debe digitar numeros enteros")
        
End Try
    
End Sub
End 
Class 


Saludos,


“ No hay que confundir nunca el conocimiento con la sabiduría. El primero nos sirve para ganarnos la vida; la sabiduría nos ayuda a vivir. ” - Sorcha Carey
Responder Citando
Los siguientes 3 usuarios agradecen a wlsnch por este mensaje:
baduser (10-ago-2011), joselmq (13-ago-2011), Rekker (10-ago-2011)
Antiguo 10-ago-2011     #8
Predeterminado

Muchas gracias por tu aclaracion, ahora entiendo la diferencia entre una funcion y la otra.
Por otro lado lo del Try catch lo habia implementado, solo que emplee la forma que conozco del MessageBox

Código PHP:
MessageBox.Show("Unicamente se permiten valores de tipo entero""Error"MessageBoxButtons.OKMessageBoxIcon.Error


Nuevamente MUCHAS GRACIAS.

PD: Pueden cerrar el tema

Responder Citando
Los siguientes 3 usuarios agradecen a Rekker por este mensaje:
baduser (10-ago-2011), joselmq (13-ago-2011), wlsnch (10-ago-2011)
Antiguo 04-jun-2017     #9
Predeterminado

si quisiera hacer un algortimo al reves??? pasar de romanos a enteros??? no se si podras darme una mano.. saludos
Responder Citando
Respuesta


(0 miembros y 1 visitantes)
 
Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los Códigos BB están Activado
Las Caritas están Activado
[IMG] está Activado
El Código HTML está Desactivado

Ir al Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Crear Software o algo asi - [Autoplay Media Studio] cramercaba Peticiones 19 23-nov-2011 17:23
Limpiar Lista de Proyectos recientes Visual Studio sasuke.17 Programación 3 22-jul-2011 04:28
Introducción a la programación con Visual Basic .NET en Visual Studio 2005 rubenmasmas Peticiones 1 07-jun-2011 09:59
Visual Studio 2010 (Español) sauron Programación 7 27-oct-2010 23:37


Desarrollado por: vBulletin® Versión 3.8.1
Derechos de Autor ©2000 - 2017, Jelsoft Enterprises Ltd.
Ad Management by RedTyger