Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Convertir de numeros Romanos a numeros arabigos

Estas en el tema de Convertir de numeros Romanos a numeros arabigos en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 10/11/2008, 21:35
 
Fecha de Ingreso: noviembre-2008
Mensajes: 6
Antigüedad: 16 años
Puntos: 0
Convertir de numeros Romanos a numeros arabigos

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 ke 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 ke el problema de esto es ke solo imprime 1 , 5, 10 , 50, 100, 1000 y no lo suma y lo ke necesito es ke 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...
  #2 (permalink)  
Antiguo 10/11/2008, 23:08
 
Fecha de Ingreso: octubre-2008
Mensajes: 34
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Convertir de numeros Romanos a numeros arabigos

A mi manera de ver, deber recibir el numero romano con un arreglo de caracteres, del tamaño suficiente para recibir un numero grande Ej: 3888 = MMMDCCCLXXXVIII para lo cual necesitarías definir char op[15].

Con esto, recibes el número con un ciclo DO con un contador para saber cuántas letras se introdujeron,
Luego, haces un bucle FOR para "convertir" el numero romano, empezando por el mayor valor posible (M) con la opción de que le preceda una letra menor. Ej:

for (j=0; j<i; j++) // i= numero de letras

if op[j] == 'C' && op[j+1] =='M'

num += 900



Y así sucesivamente. Es un poco dispendioso, pero no se me ocurre nada mejor.

Última edición por IgnacioJavier; 10/11/2008 a las 23:23
  #3 (permalink)  
Antiguo 11/11/2008, 01:46
Avatar de marcopoloaz06  
Fecha de Ingreso: julio-2007
Ubicación: México
Mensajes: 457
Antigüedad: 17 años, 4 meses
Puntos: 11
Sonrisa Respuesta: Convertir de numeros Romanos a numeros arabigos

Asi queda:
Código PHP:
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;

void romanos(int x);
void print(string t);

int main(){
    
cout << "Introduce numero Romano menos de 3999" << endl;
    
int r;
    
cin >> r;
    if( 
3999 ){
        
cout << "Error" << endl;
        
system("PAUSE");
        return 
0;
    }
    
cout << "--------------------" << endl;
    
romanos);
    
cout << endl << "--------------------" << endl;

    
system("PAUSE");
    return 
0;
}

void romanos(int x){
   while(
x>=1000){x-=1000;print("M");}
   while(
x>=900){x-=900;print("CM");}
   while(
x>=500){x-=500;print("D");}
   while(
x>=400){x-=400;print("CD");}
   while(
x>=100){x-=100;print("C");}
   while(
x>=90){x-=90;print("XC");}
   while(
x>=50){x-=50;print("L");}
   while(
x>=40){x-=40;print("XL");}
   while(
x>=10){x-=10;print("X");}
   while(
x>=9){x-=9;print("IX");}
   while(
x>=5){x-=5;print("V");}
   while(
x>=4){x-=4;print("IV");}
   while(
x>=1){x-=1;print("I");}
}
void print(string t){
    
cout << t;

saludos
:]
__________________
Aerolíneas Alicia :D
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 22:58.