• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Death_Skull

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

6 mensagens neste tópico

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,  :-[

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora