Olá pessoal. Tenho que fazer um exercício como descrito no título, que converta números romanos em decimal, usando a linguagem Pascal.
Assuntos que já vi: Manipulando Strings, REPEAT, FOR, WHILE, CASE e IF.
Sei que o maior número possível a ser formado será 3999 (MMMCMXCIX), que tem 9 caracteres.
Creio que a chave do programa está em conseguir definir quando terei que subtrair ou somar tal valor. Ex: IV = 4 e VI = 6, XC = 90 e CX = 110.
A posição e a quantidade de caracteres é o que define, pelo que entendi.
Dúvidas:
1) Lógica: será isso mesmo de verificar o tamanho do algarismo, e fazer:
IF length(algarismo) = 1 then WRITELN('O algarismo é...) ~ continuação ~~
ELSE
Begin
IF length(algarismo) = 2 then
Begin
IF algarismo[2] > algarismo[1] then algarismo := algarismo[2] - algarismo[1] ELSE algarismo := algarismo [1] - algarismo [2]
...
(no caso, será apenas 1, 5, 10, 50, 100, 500, 1000 os valores possíveis, já que são os únicos de 1 algarismo.)
O "algarismo[1]" seleciona a primeira letra da variável algarismo, que foi definida como uma string. Da mesma forma o [2].
2)
Begin
writeln('Digite o número em algarismos romanos:');
readln(alg);
M := 1000;
D := 500;
I := 1;
V := 5;
X := 10;
L := 50;
C := 100;
IF length(alg) = 1 then writeln('O número em decimal é ',alg,'.');
readln;
End.
No código acima, o valor continua sendo exibido em romano (ou seja, ele exibe o mesmo valor que eu digitei.) Como faço para passar a valer o valor em decimal? Ex: Digitei X, é para mostrar 10, porém programa ainda mostra X.
3) Há alguma lógica que funcione melhor para este programa, com os assuntos que eu aprendi?
Desculpem-me pelo grande número de perguntas, porém não achei nenhum tópico com dúvidas parecidas.
Desde já, agradeço.
___
Tabela com alguns números, para consulta: