elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 00:49  


Tema destacado: ¡Aprende hacking con práctica! - WarZone, el wargame de elhacker.net

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Convertir de numeros Romanos a numeros arabigos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Convertir de numeros Romanos a numeros arabigos  (Leído 24,322 veces)
Lamer

Desconectado Desconectado

Mensajes: 6



Ver Perfil
Convertir de numeros Romanos a numeros arabigos
« en: 11 Noviembre 2008, 04:35 »

Hola disculpen la molestia normalmente nunca había pedido ayuda en mi tarea pero ahora es especial. esto va un poco mas de mis conocimientos apenas estoy empezando pero bueno.. aver si me pueden ayudar con este programa esto es lo que llevo

Problema: Escribir un programa que convierta un numero romano [en forma de cadena de caracteres en un numero arabigo]. reglas de conversión:
I=1
V=5
X=10
L=50
C=100
M=1000

Código:
#include <stdio.h>
#include <conio.h>

void main()
{
char op;
clrscr();

printf("Introduzca el numero romano que quiera convertir a arabigos");
scanf("%c"&op);

switch(op)
{
case 'I' : printf("1");
            breack;

case 'V' : printf("5");
            breack;

case 'X' : printf("10");
            breack;

case 'L' : printf("50");
            breack;

case 'C' : printf("100");
            breack;

case 'M' : printf("1000");
            breack;
}
getch();
}

Ahí tienen mi código solo que el problema de esto es que solo imprime 1 , 5, 10 , 50, 100, 1000 y no lo suma y lo que necesito es que sume o reste los valores

Ejemplo: IV = 1-5 = 4 ó VI = 5+1 =6.

Espero y me puedan ayudar se los agradeceria mucho

De antemano gracias...


En línea

Nakp
casi es
Ex-Staff
*
Desconectado Desconectado

Mensajes: 6.334

he vuelto :)


Ver Perfil WWW
Re: Convertir de numeros Romanos a numeros arabigos
« Respuesta #1 en: 11 Noviembre 2008, 07:20 »

pues.. no es breack sino break

después podrías recorrer el vector de derecha a izquierda (donde guardas el numero romano) e ir comparando si el de la izq es menor al de la der entonces restas a la derecha, si no sumas... la idea es esa :P

salu2


En línea

Ojo por ojo, y el mundo acabará ciego.
JuaN-ThE-HaCKeR

Desconectado Desconectado

Mensajes: 252


http://www.JBJ.esp.st


Ver Perfil WWW
Re: Convertir de numeros Romanos a numeros arabigos
« Respuesta #2 en: 12 Noviembre 2008, 01:45 »

Hola!

Lo veo un poco imposible de hacer con switch y una sola variable...

Si por ejemplo en la aplicación, introduzco CMLXXIIX (478), ¿como lo harías?

Código
switch (op){
case 'CMLXXIIX' : printf("478");
           break;
//¿Así? xDD
}

Porque ese código imprimiría 478 solo cuando op==CMLXXIIXX.

No se, una opción que veo posible es introducir cada letra (número romano) en una variable distinta, por ejemplo, variables de a-z, if ((a==I) && (b==V)){ printf("4");} pero quedaría muy mal introducir entre letra y letra un espacio... Otra cosa no se me ocurre... :-\

PD: No se si me expliqué bien... :-X
PD2: El código tiene varios errores de síntaxis, no solo el breack/break, también por ejemplo:
scanf("%c"&op); <- ¿La coma (,) donde la dejaste? :rolleyes:
scanf("%c",&op);

Y además utilizas la función clrscr(); al principio del código, sin tener nada que limpiar. :P

Edito: Creo que no sería necesario introducir un espacio (segundo pareado del día :xD) entre letra y letra, por ejemplo char a[0], b[0]; Al introducir IV por ejemplo sería a==I && b==V, no lo he probado, así que no estoy seguro de esto. :P

Edito2: Lo acabo de probar y no sirve, pero seguro que hay alguna forma de evitar los espacios, creo que lo vi hace como un mes por algún sitio, pero no recuerdo como ni donde. :-X

Saludos! ;)
« Última modificación: 12 Noviembre 2008, 02:01 por {[*JυαИ-TнE-HαÇKεR*]} » En línea





VirucKingX


Desconectado Desconectado

Mensajes: 540


VirucKingX


Ver Perfil
Re: Convertir de numeros Romanos a numeros arabigos
« Respuesta #3 en: 12 Noviembre 2008, 02:56 »

Aca va mi code :

Código
#include <stdio.h>
#include <string.h>
 
int main()
{
 char numero_R[500];
 int numero_A[500];
 int suma = 0,ix;
 
 for(ix = 0;ix < 500;ix++)
   numero_A[ix] = 0;
 
 printf("Introduzca el numero Romano : ");
 scanf("%s",numero_R);
 
 for (ix = 0;ix < strlen(numero_R);ix++)
 {
   switch(numero_R[ix])
   {
     case 'I' :
       numero_A[ix] = 1;
       break;
 
     case 'V' :
       numero_A[ix] = 5;
       break;
 
     case 'X' :
       numero_A[ix] = 10;
       break;
 
     case 'L' :
       numero_A[ix] = 50;
       break;
 
     case 'C' :
       numero_A[ix] = 100;
       break;
 
     case 'D' :
       numero_A[ix] = 500;
       break;
 
     case 'M' :
       numero_A[ix] = 1000;
       break;
     default:
     {
       printf("El numero no es Romano, GAMER OVER\n");
       return (-1);
       break;
     }
   }
 }
 
 for(ix = 0;ix < strlen(numero_R);ix++)
 {
   if(numero_A[ix] < numero_A[ix+1])
     suma -= numero_A[ix];
   else
     suma += numero_A[ix];
 }
 
 printf("El numero : %s , corresponde a : %d\n",numero_R,suma);
 
 return (0);
}

PARA -> Lamer : te falto el numero D el cual corresponde a 500

PARA -> {[*JυαИ-TнE-HαÇKεR*]}  : 478 se es escribe de esta forma creo : CDLXXVIII

Si le encuentran un fallo me lo notifican.

Chau
« Última modificación: 12 Noviembre 2008, 03:21 por VirucKingX » En línea



Bye
JuaN-ThE-HaCKeR

Desconectado Desconectado

Mensajes: 252


http://www.JBJ.esp.st


Ver Perfil WWW
Re: Convertir de numeros Romanos a numeros arabigos
« Respuesta #4 en: 12 Noviembre 2008, 15:29 »

Hola!

PARA -> {[*JυαИ-TнE-HαÇKεR*]}  : 478 se es escribe de esta forma creo : CDLXXVIII
Sí, tienes razón, es lo mismo que yo puse, solo que escribí M en lugar de D por error.  :laugh:
Mal -> CMLXXVII
Bien -> CDLXXVII

Saludos! ;)
En línea





*-.Sub-Vorbio.-*

Desconectado Desconectado

Mensajes: 80


"Dos perros pueden matar a un león".


Ver Perfil
Re: Convertir de numeros Romanos a numeros arabigos
« Respuesta #5 en: 15 Noviembre 2008, 23:42 »

Confirmado!

Vínculo a tabla  que contiene los números romanos desde el 1 hasta el 5200 en 15 páginas A4 y está en formato PDF  (31KB).

http://neoparaiso.com/imprimir/numeros-romanos/tabla-romanos.pdf

Espero que sirva para algo; Salu2 y suerte;
Sub-Vorbio.
En línea

"Al clavo salido le toca siempre el martillazo."

"Cuando los elefantes luchan, la hierba es la que sufre."
ҒrεακΠιи∂

Desconectado Desconectado

Mensajes: 184



Ver Perfil
Re: Convertir de numeros Romanos a numeros arabigos
« Respuesta #6 en: 16 Noviembre 2008, 00:45 »

Buenas

No sirve hardcodear el mapeo. Tenes que encontrar un algoritmo que haga eso.

Pensa en como haces vos para pasar de romanos a "normales". Eso es un algoritmo. Solo tenes que tratar de pasarlo a un lenguaje.


Salu2, FreakMind
En línea

Connoisseurs of C semantics find C++ inferior to ++C
the.adx

Desconectado Desconectado

Mensajes: 29


Brain kept a rollin' all night long.


Ver Perfil
Re: Convertir de numeros Romanos a numeros arabigos
« Respuesta #7 en: 17 Noviembre 2008, 20:16 »

Creo que el algoritmo de VirucKingX no es del todo correcto (corregidme si me equivoco).

Si introduzco VIIIIII me devuelve 10, pero 10 en romano es X. Estaría interesante un algoritmo para resolver todo esto ;D.

Estoy dándole vueltas al tema aver si consigo un algoritmo funcional...Postearé un código pronto...(o eso creo xD)

¡Espero los vuestros!

EDIT: Por lo visto, progamar un algoritmo estable y funcional para esto no es nada fácil. He mirado las reglas de conversión, y se necesitan bastantes comprobaciones para asegurar que un número romano es correcto, y cómo calcular su valor decimal.

Ver más: http://es.wikipedia.org/wiki/Numeraci%C3%B3n_romana
« Última modificación: 18 Noviembre 2008, 12:23 por the.adx » En línea



"I was trying to do too many things at the same time, which is my nature. But I was enjoying it, and I still do enjoy it. "
Jimi Hendrix
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Almacenar números en cadena
Programación C/C++
SySc0d3r 0 1,249 Último mensaje 19 Diciembre 2010, 15:04
por SySc0d3r
Hallar numeros amigos
Scripting
franncc22 3 2,402 Último mensaje 7 Mayo 2011, 20:04
por .:UND3R:.
Convertir numeros a letras
Programación Visual Basic
NightMoonKiller 10 1,509 Último mensaje 11 Mayo 2011, 06:32
por BlackZeroX (Astaroth)
capicua de un rango de numeros
Programación C/C++
ryan parker 4 1,141 Último mensaje 4 Junio 2011, 18:48
por ryan parker
[Libreria] Convertir Numeros a Letras/Texto (solved)
PHP
Diabliyo 1 364 Último mensaje 27 Febrero 2012, 18:29
por Diabliyo
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines