C/Visual C - Convertir una cantidad romana a entera positiva

 
Vista:
sin imagen de perfil

Convertir una cantidad romana a entera positiva

Publicado por Sebastián (31 intervenciones) el 19/11/2016 04:23:07
Hola!, serían tan amables de ayudarme con este programa que debo hacer, la cuestión es que la impresion de datos me falla mucho, y la verdad no se de que forma validar en casos donde se tengan que restar los valores en vez de sumar por ejemplo: MMCMXCVII, donde C se resta del valor de M , si serian tan amables con darme orientacion o algun otro tipo de ayuda, se los agradecería mucho
Este es el enunciado:

Escribir un programa que convierta una cantidad romana a cantidad entera positiva. Diseñar el programa para que se ejecute repetidamente. Usar teoría de punteros.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Convertir una cantidad romana a entera positiva

Publicado por Sebastián (31 intervenciones) el 19/11/2016 05:34:12
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
 
void main()
{
 
	char a[100] = "";
	char b[100] = "";
	printf("Ingrese un valor:\n");
	gets_s(a);
	char *puntero = a;
	char *puntero2 = a + 1;
	int cont = 1;
	int romanos = 0;
	for (int j = 0; j < strlen(a); j++)
	{
		if (*puntero==*puntero2)
		{
			cont++;
		}
 
		*puntero++;
		*puntero2++;
 
 
	}
	printf("%d\n", cont);
 
 
	if (cont<= 3)
	{
		puntero = a;
		puntero2 = a + 1;
 
		for (int i = 0; i < strlen(a); i++)
		{
			switch (*puntero)
			{
			case 'M':
				romanos = romanos + 1000;
				break;
 
			case 'C':
				romanos += 100;
				break;
 
			case 'D':
				romanos += 500;
				break;
 
			case 'L':
				romanos += 50;
				break;
 
			case 'X':
				romanos += 10;
				break;
 
			case 'V':
				//int valorV = 5;
				romanos += 5;
				break;
 
			case 'I':
 
				romanos += 1;
				break;
 
			case 0:
				romanos = 0;
				break;
			default:
				printf("\n Has introducido caracteres invalidos");
				romanos = 0;
				break;
 
 
			}
			*puntero++;
			//*puntero2++;
 
 
		}
		printf("%d\n", romanos);
	}
 
		else
		{
			printf("Numero incorrecto\n");
		}
 
 
		_getch();
	}
Es lo que he hecho pero quisiera que me aporten con alguna idea para validar cuando se ingresa un numero menor que otro, me explico IV o IX , como puedo validar en esos casos?

Gracias de antemano
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 296
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Convertir una cantidad romana a entera positiva

Publicado por agustin (272 intervenciones) el 19/11/2016 08:23:43
Yo hice un código para eso. A ver si hoy lo veo y te lo pongo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 296
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Convertir una cantidad romana a entera positiva

Publicado por agustin (272 intervenciones) el 19/11/2016 13:18:49
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <stdio.h>
#include <ctype.h>
#include <string.h>
//---------------------------------------------------------------------------
 
int digitValue(char);
void toUpperCase(char roman_Number[]);
int romanToDec(char roman_Number[]);
//---------------------------------------------------------------------------
 
int main(){
 
    char roman_Number[1000];
    long int number;
 
    printf("Introduce un numero romano (Los digitos validos son I, V, X, L, C, D, M): ");
    scanf("%s",roman_Number);
 
    //Paso la cadena a mayusculas
    toUpperCase(roman_Number);
 
    //La paso de romano a decimal
    number=romanToDec(roman_Number);
 
    if(number > 0)
        printf("Su valor decimal es: %ld\n",number);
 
    return 0;
}
//---------------------------------------------------------------------------
 
//Con esta funcion paso de romano a decimal
int romanToDec(char roman_Number[]){
 
    int i=0;
    long int number =0;
 
    while(roman_Number[i]){
 
         if(digitValue(roman_Number[i]) < 0){
             printf("El digito '%c' no es valido para numeros romanos\n",roman_Number[i]);
             return 0;
         }
 
         if((strlen(roman_Number) -i) > 2){
             if(digitValue(roman_Number[i]) < digitValue(roman_Number[i+2])){
                 printf("Numero romano con formato no valido\n");
                 return 0;
             }
         }
 
         if(digitValue(roman_Number[i]) >= digitValue(roman_Number[i+1]))
             number = number + digitValue(roman_Number[i]);
         else{
             number = number + (digitValue(roman_Number[i+1]) - digitValue(roman_Number[i]));
             i++;
         }
         i++;
    }
    return number;
}
//---------------------------------------------------------------------------
 
//Con esta funcion paso la cadena a mayusculas
void toUpperCase(char roman_Number[]){
 
    unsigned int i;
 
    for(i=0;i<strlen(roman_Number);i++){
        roman_Number[i] = toupper(roman_Number[i]);
    }
}
//---------------------------------------------------------------------------
 
//Con esta funcion obtengo el valor de cada caracter
int digitValue(char c){
 
    int value=0;
 
    switch(c){
         case 'I': value = 1; break;
         case 'V': value = 5; break;
         case 'X': value = 10; break;
         case 'L': value = 50; break;
         case 'C': value = 100; break;
         case 'D': value = 500; break;
         case 'M': value = 1000; break;
         case '\0': value = 0; break;
         default: value = -1;
    }
 
    return value;
}
//---------------------------------------------------------------------------

En su momento me basé en un codigo que encontré por la red pero no se decirte de donde fue donde lo saqué.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Convertir una cantidad romana a entera positiva

Publicado por Sebastián (31 intervenciones) el 27/11/2016 20:41:44
Muchas gracias por tu ayuda Agustín!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar