SoloCodigo
Programación General => Pascal => Mensaje iniciado por: gangister en Viernes 26 de Agosto de 2005, 22:24
-
Hola:
Quiero hacer un programa que convierta numeros romanos a arabigos. Recien estoy aprendiendo pascal. Quisiera saber como puedo manejar el string leido de manera tal que pueda contar la cantidad de I,X,V,L,C,D,M para calcular el número.
Gracias
-
Básicamente la idea sería ir leyendo el string, e ir sumando los valores de las letras.
Ahora, tenemos el problema en cuanto una letra de valor menor a otra se encuentra a la izquierda de esta.
Lo que podrías hacer es llevar un caracter en el que indiques por qué letra vas (es decir, si la última que leíste es una M, D, C, L, X, V, I). La idea es que no leas una chica antes de una grande.
O puesto que las restas no se hacen con más de una letra, podrías recorrer de izquiera a derecha sumando, y verificando que no haya una dupla de resta.
Por ejemplo:
MXM
1era dupla: MX -> es letra grande-chica -> sumo M -> avanzo 1 lugar
2da dupla XM -> es letra chica-grande -> a la grande le resto la chica -> sumo -> avanzo 2 lugares
Entonces, en MDXLIV, tendríamos
1era -> MD -> mayor-menor -> sumo M al total (1000). Avanzo uno.
2da -> DX -> mayor-menor -> sumo D al total (1500). Avanzo uno.
3era -> XL -> menor-mayor -> L - X = 40, lo sumo al total (1540). Avanzo dos.
4ta -> IV -> menor-mayor -> V - I = 4, lo sumo al total (1544).
Terminó la cadena, total = 1544.
Espero haberme explayado bien. :S