Jump to content

Converter Numeração Arabe para Numeração Romana


Death_Skull
 Share

Recommended Posts

Boas!

Tenho um projecto para uma cadeira (introdução à programação), na qual temos de construir um conversor que permita transformar um numero introduzido pelo utilizador em numeração romana. Declararei dois vectrores um onde estavam os numeros arabes ( 1, 4, 5, 9,10,40,50,90,100,400,500,1000) e outro vector onde estavam os seus correspondentes em numeração romana ( 'I', 'IV', 'V', 'IX', 'X', 'XL', 'L', 'XC', 'C', 'CD', 'D', 'CM', 'M' ), depois pedia que fosse introduzido um numero pelo utilizado,

write ('introduza um numero ');
read (numero);
     digito:=numero mod 10;
     sdigito:= numero div 10;
     romano:= sdigito;

agora o meu problema esta relacionado com a conversão propriamente dita, ou seja imaginemos que o numero introduzido é 6? o romano vai ser 6, mas o 6 não esta contemplado no vector, como é que posso fazer para que o programa possa associar o seis a VI que é a soma entre 5 +1? desculpem a pergunta de noob,  ?

Link to comment
Share on other sites

Boas,

Acho que podes fazer algo do tipo:

  • Associar I a 1
  • Se o numero for maior que 0 e menor que 4, o numero de i's que vão aparecer é igual ao numero em numeração árabe
  • Se o valor for 4 então aparece o simbolo desse valor + 1 (neste caso 4+1=5=V) com o I atrás (-1)
  • Seguir o raciocínio para os restantes

Isto são apenas ideias (que podem não ser as mais correctas).

Espero ter ajudado.

Cumps,

Link to comment
Share on other sites

Primeiro acho que não é nenhuma pergunta de noob e não tens de pedir desculpa... 🙂

Assim à primeira vista o que eu faria era o seguinte: tentar subtrair o maior número que tens no vector. Caso o número a subtrair fosse maior que o originalmente introduzido pelo utilizador passava ao número imediatamente menor. Á medida que fazes isto vais guardando noutro vector o número de vezes que encontras cada número. No fim basta veres quantos tens de cada e pela ordem que foste guardando sabes os números que tens de mostrar.

Isto foi muito confuso, agora não tenho muito tempo e paciência para explicar, mas depois vou tentar pensar melhor sobre o assunto.

<3 life

Link to comment
Share on other sites

Experimenta a seguinte aproximação por divisões e subtrações.

Ao preencher o numero romano tens de achar a letra que vaz usar, para fazer isso deves dividir por constantes basicas, começando por baixo, até achar a divisão que tenha resultado <= 3. Só interessa a parte positiva.

Para achar a seguinte letra deves subtrair o valor da letra que achaste ao valor inicial que tinhas, ficando com o proximo valor para a proxima letra. Se o resultado da divisão for negativo deves colocar a letra que tem o valor anterior antes da letra que já tinhas. LOL complicado?

As peças básicas são I V X L C D M etc.

Vai 1 exemplos:

Inicio:

444

444/C = 4.44 // <=3? não descarta, passa ao seguinte:

444/D = 0.888 // <=3? sim então começamos com D -->  D

444-D = -56 // negativo? sim então a letra abaixo de D é C --> CD

444-CD=44 // negativo? não passa a encontrar letra

44/X=4.4 // <=3? não descarta, passa ao seguinte:

44/L=0.88 // <=3? sim então --> CD L

44-L=-6 // negativo? sim, então a letra abaixo de L é X --> CDXL

44-XL=4 // negativo? não passa a letra

4/V=0.8 // <=3? sim então --> CDXL V

4-V=-1 // negativo? sim, letra abaxo I --> CDXLIV

4-IV=0 Finalizou...

Compreendido?

Quando o resultado da subtração é 2 ou 3 tens de usar XX ou LLL etc, conforma a situação. O resultado da divisão dá a pista para o numero de letras a usar.

Experimenta para mais numero e vê se resulta.

Eu experimentei e pareceu-me bem.

Aqui há coisa de 2 anos fazia umas malhas de croché, depois fartei-me e fui para informática!

Link to comment
Share on other sites

Amanha falamos... parece-me ter conseguido um melhor, tenho de confirmar.

E o anterior tem um problema (pelo menos 1), não contempla a regra romana que impede de usar simbolos repetidos que não sejam multiplos de 10. Tipo VVV para representar 15.

Aqui há coisa de 2 anos fazia umas malhas de croché, depois fartei-me e fui para informática!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.