SoloCodigo

Programación General => Pascal => Mensaje iniciado por: gangister en Viernes 26 de Agosto de 2005, 22:24

Título: Manejo De Cadenas
Publicado 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
Título: Re: Manejo De Cadenas
Publicado por: Alpha_ en Sábado 24 de Septiembre de 2005, 23:19
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