elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Pasar numeros enteros arábigos a romanos, por donde empezar.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Pasar numeros enteros arábigos a romanos, por donde empezar.  (Leído 12,646 veces)
Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Pasar numeros enteros arábigos a romanos, por donde empezar.
« en: 11 Mayo 2014, 15:04 pm »

Buenas a todos, estoy intentando hacer un programa que pase de números arábigos a romanos, busqué en el foro pero solo encontré un par de temas en los que se hablaba de como hacer el proceso a la inversa. Lo que yo había pensado era darle a programa las equivalencias entre los numeros romanos y los arábigos e ir comparando, me explico:
-Si tenemos el numero 200, el numero romano mas grande que podemos utilizar para representar el 200 es C, entonces se escribe una C y se resta a 200, quedarían otros 100 y por lo tanto se pondría otra C, 200= CC.
-Lo mismo por ejemplo con el número 1200, el romano mas cercano al 1200 y que no sea mayor es M, se restaria a 1200 quedando 200, y a partir de aqui igual que el proceso para el número anterior.

El problema viene si se trata del número 4 por ejemplo, V no valdría porque es mayor entonces, siguiendo el mismo proceso de antes, seria IIII, pero eso tampoco es posible, quería alguna orientación para saber como resolver este problema o hacia donde orientar mi programa, muchas gracias.

Un saludo.


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Pasar numeros enteros arábigos a romanos, por donde empezar.
« Respuesta #1 en: 11 Mayo 2014, 15:37 pm »

Pues podrías poner unas condiciones. Por ejemplo:

124:
Si está entre 100 <= n < 400 : C -> Restamos 100
24:
Si está entre 10 <= n < 40 : X -> Restamos 10
14:
(...) : X -> Restamos 10
4:
Si está entre 4 <= n < 5 //(n = 4)// : IV -> Restamos 4

Al final, se reduciría a 4 condiciones en cada cifra:
Código:
1*10^X <= n < 4*10^X
4*10^X <= n < 5*10^X
5*10^X <= n < 9*10^X
9*10^X <= n < 10*10^X

Es un método un poco bruto por tanto condicional, pero ahora no se me ocurre otro xD


En línea

Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: Pasar numeros enteros arábigos a romanos, por donde empezar.
« Respuesta #2 en: 11 Mayo 2014, 16:24 pm »

No lo entendí muy bien

Al final, se reduciría a 4 condiciones en cada cifra:
1*10^X <= n < 4*10^X
4*10^X <= n < 5*10^X
5*10^X <= n < 9*10^X
9*10^X <= n < 10*10^X

¿Qué son esas X?

Haciéndolo con el 379 por ejemplo:

379:
Si está entre 100 <= n < 500: C -> restamos 100
279:
Si está entre 100 <= n < 500: C -> restamos 100
179:
Si está entre 100 <= n < 500: C -> restamos 100
79:
Si está entre 50 <= n < 100: L -> restamos 50
29:
Si está entre 10 <= n < 50: X -> restamos 10
19:
Si está entre 10 <= n < 50: X -> restamos 10

Quedan 9, siguiendo el mismo proceso primero se restaría 5(V) y despues 4(IIII) y quedaría por lo tanto CCCLXXVIIII pero el correcto sería CCCLXXIX, creo que no era algo así lo que dices tu, pero no lo entendí.

Un saludo
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Pasar numeros enteros arábigos a romanos, por donde empezar.
« Respuesta #3 en: 11 Mayo 2014, 16:39 pm »

Para esos 9 sería:
9*10^X <= n < 10*10^X

Perdón, se me olvidó ponerlo: X sería la cifra. En fin, ignóralo.
En línea

erest0r

Desconectado Desconectado

Mensajes: 147



Ver Perfil
Re: Pasar numeros enteros arábigos a romanos, por donde empezar.
« Respuesta #4 en: 11 Mayo 2014, 20:23 pm »

Fijate que las unidades, las decenas, centenas, etc, en los numeros romanos siguen un mismo patron

*De 1 a 3 se repite esa cantidad de veces el simbolo = I, II, III; X, XX, XXX, etc

*Al 4 se le resta la unidad al numero del medio = IV; XL; CD

*Luego el numero del medio = V, L, D

*Despues del 6 al 8 va el numero central mas las unidades correspondientes = VI, VII, VIII; LX, LXX, LXXX

* Al penultimo numero se le resta la unidad al siguiente aumento de digito = IX, XC, CM

* Por ultimo, el numero de digito adicional = X, C, M

Puedes crear una matriz que en cada fila almacene los caracteres dependiendo de la cantidad de digitos y puedes resolver.

Código
  1. char letras[4][3] = { 'I', 'V', 'X',
  2.                      'X', 'L', 'C',
  3.                      'C', 'D', 'M',
  4.                      'M'};
  5.  
« Última modificación: 11 Mayo 2014, 20:27 pm por erest0r » En línea

Cruzar la calle junto a mucha gente cuando el semáforo sigue en rojo da seguridad y espíritu de equipo... o cruzamos todos o morimos juntos.
Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: Pasar numeros enteros arábigos a romanos, por donde empezar.
« Respuesta #5 en: 12 Mayo 2014, 23:25 pm »

Para esos 9 sería:
9*10^X <= n < 10*10^X

Perdón, se me olvidó ponerlo: X sería la cifra. En fin, ignóralo.

Vas a tener que perdonar mi torpeza pero no terminé de entenderlo, ¿la cifra? Entonces si la cifra es 234 sería 9x10^234, eso es un número enorme. Y después, esa sería la condición, ¿pero que tendría que hacer en ese caso?

erest0r, no entendí muy bien el patrón que siguen, a partir del número 4 me perdi.

Muchas gracias, un saludo.
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re:
« Respuesta #6 en: 13 Mayo 2014, 00:06 am »

Con cifra me refería al número de cifras del num. Pero olvídalo, creo que el método de erest0r te podría servir mejor.

Enviado desde mi ST21i mediante Tapatalk
En línea

erest0r

Desconectado Desconectado

Mensajes: 147



Ver Perfil
Re: Pasar numeros enteros arábigos a romanos, por donde empezar.
« Respuesta #7 en: 13 Mayo 2014, 01:59 am »

Empiezas a extraer cada digito del numero ingresado, y lo asocias a cual fila pertenece:

2014: 4 por ser unidad lo evaluas en la primera fila, 1 por ser decena lo evaluas en la segunda fila , etc. Todo eso en caso que lo hagas con la matriz que te mostre.

Luego con un switch haces el procedimiento de evaluacion.

Código
  1. switch( numero )
  2.    {
  3.        case 1:
  4.        case 2:
  5.        case 3:
  6.            for( i = 0; i < numero; i++ )
  7.                digito_romano[i] = letras[cant_decimal][0];
  8.        break;
  9.        case 4:
  10.            for( i = 0; i < 2; i++ )
  11.                digito_romano[i] = letras[cant_decimal][i];
  12.        break;
  13.        case 5:
  14.            digito_romano[0] = letras[cant_decimal][1];
  15.            i++;
  16.        break;
  17.        case 6:
  18.        case 7:
  19.        case 8:
  20.            digito_romano[0] = letras[cant_decimal][1];
  21.            for( i = 1; i <= numero - 5; i++ )
  22.                digito_romano[i] = letras[cant_decimal][0];
  23.        break;
  24.        case 9:
  25.            digito_romano[0] = letras[cant_decimal][0];
  26.            digito_romano[1] = letras[cant_decimal][2];
  27.            i = 2;
  28.        break;
  29.    }
  30.    digito_romano[i] = '\0';
  31.  

A cada digito le harias ese proceso, fijate que la variable "cant_decimal", te indica si el digito es unidad, decena, centena, una vez guardado en "digito_romano", lo concatenas con el "digito_romano" equivalente de los demas digitos, y ya esta.

« Última modificación: 13 Mayo 2014, 02:01 am por erest0r » En línea

Cruzar la calle junto a mucha gente cuando el semáforo sigue en rojo da seguridad y espíritu de equipo... o cruzamos todos o morimos juntos.
Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: Pasar numeros enteros arábigos a romanos, por donde empezar.
« Respuesta #8 en: 13 Mayo 2014, 22:03 pm »

Ya he empezado a peleame con el código por la parte de separar los digitos de los numeros, esto lo llevo bien, lo que no termino de entender es el patrón que siguen los numeros romanos, el primer punto creo que lo entiendo, cuando en las unidades o decenas o centenas... aparece el numero 3, se repiten 3 veces, por ejemplo, 376, en las centenas a parece el numero 3 por lo tanto en romanos el numero empezara por CCC... lo que si que no entiendo son el resto de puntos a partir de este.

Un saludos
« Última modificación: 13 Mayo 2014, 22:05 pm por Caster » En línea

erest0r

Desconectado Desconectado

Mensajes: 147



Ver Perfil
Re: Pasar numeros enteros arábigos a romanos, por donde empezar.
« Respuesta #9 en: 13 Mayo 2014, 22:25 pm »

Amigo asi mismo como tu dices, tienes 376 va a formar parte de la centena para lo cual le tocaria la fila[2], luego el 7 por ser decena le toca la fila[1] y el 6 le toca la fila[0] por ser unidad, solo necesitas un contador que te lleve la cuenta con cual fila vas a trabajar dependiendo del digito. Extraes el 3 lo evaluas y tienes CCC, ahora te deberia quedar 76, extraes el 7 y te da LXX, te queda ya solamentre el 6 por evaluar que le corresponderia VI.
En línea

Cruzar la calle junto a mucha gente cuando el semáforo sigue en rojo da seguridad y espíritu de equipo... o cruzamos todos o morimos juntos.
Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Calculadora que suma numeros romanos
Programación C/C++
miiku 1 10,334 Último mensaje 13 Agosto 2012, 03:50 am
por farresito
Numeros Romanos « 1 2 3 »
Programación C/C++
05K4R1N 20 13,627 Último mensaje 11 Junio 2013, 02:33 am
por edr89
verificar numeros romanos « 1 2 »
Programación C/C++
m@o_614 15 10,816 Último mensaje 22 Agosto 2013, 08:46 am
por rir3760
[Aporte]Convertidor de números decimales a romanos
Programación C/C++
0xFer 0 3,249 Último mensaje 24 Mayo 2015, 19:00 pm
por 0xFer
Conversor de números arábigos a números romanos
Programación C/C++
perico1995 0 1,900 Último mensaje 19 Diciembre 2017, 17:54 pm
por perico1995
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines