Foros del Web » Programación para mayores de 30 ;) » .NET »

Números romanos

Estas en el tema de Números romanos en el foro de .NET en Foros del Web. Saludos. Actualmente estoy aprendiendo .Net a través de C# y quisiera saber por qué en esta clase que elaboré para practicar el lenguaje, hay ciertas ...
  #1 (permalink)  
Antiguo 10/07/2008, 15:28
Avatar de PC's Troll  
Fecha de Ingreso: junio-2005
Ubicación: Caracas-Venezuela
Mensajes: 55
Antigüedad: 18 años, 11 meses
Puntos: 0
Pregunta Números romanos

Saludos.

Actualmente estoy aprendiendo .Net a través de C# y quisiera saber por qué en esta clase que elaboré para practicar el lenguaje, hay ciertas irregularidades al momento de entrar algunos números y no me toma el valor real.

Para probarlo, pueden crear una simple clase que realice un ciclo desde 1 - 30 llamando a el método toRoman() y se darán cuenta de los resultados.

Yo creo que el detalle se encuentra entre las líneas 42 y 47, ambas inclusive; pero de verdad que no entiendo por qué.

OJO: yo no quisiera que me dieran otro código que ya funcione, sino que alguien me pueda dar alguna pista de qué debo revisar; y así seguir aprendiendo.


Muchísimas gracias de antemano.

Código:
public class Roman
{
    private char[][] unit;
       
	public Roman()
	{
		//
		// 
        //TODO: Add constructor logic here
		//
        this.unit = new char[2][];
        this.unit[0] = new char[] { 'I', 'X', 'C', 'M' };
        this.unit[1] = new char[] { 'V', 'L', 'D' };
	}

    public String toRoman(String number)
    {
        int num = int.Parse(number);    
        return this.romanize(num, 0);
    }

    private String romanize(int number, int x)
    {
        String res="";
        if (number > 0)
        {
            if ((number / 10) > 0)
            {
                res += romanize(number / 10, x+1);
                double aux = (double)number / 10;
                number /= 10;
                aux -= number;
                aux *= 10;
                number = (int)aux;
            }
            while (number > 0)
            {
                if (number == 9)
                {
                    res += (this.unit[0][x].ToString() + this.unit[0][x + 1].ToString());
                    number -= 9;
                }
                if (number >= 5)
                {
                    res += this.unit[1][x].ToString();
                    number -= 5;
                }
                if (number == 4)
                {
                    res += (this.unit[0][x].ToString() + this.unit[1][x].ToString());
                    number -= 4;
                }
                if (number <= 3 )
                {
                    while (number > 0)
                    {
                        res += this.unit[0][x].ToString();
                        number--;
                    }
                }
            }// end while   
        }
        else 
        {
            res += "";
        }
        return res;
    }
}
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:13.