Jump to content

Archived

This topic is now archived and is closed to further replies.

infolivee

[Resolvido] Transformacao

Recommended Posts

Bom, pode ter um erro na lógica do seu código nos if's... execute um debug passo a passo no código que montou ai e vai encontrar o erro.... qualquer coisa posta o código todo ai.

 

[]'s

Share this post


Link to post
Share on other sites

Bom, pode ter um erro na lógica do seu código nos if's... execute um debug passo a passo no código que montou ai e vai encontrar o erro.... qualquer coisa posta o código todo ai.

 

[]'s

 

 

anem, essa parte do numero 9 ta f***..

ja tentei um monte de coisas mas nada deu certo...

 

seraa que eu vo ter que criar uma condicao pra ver so se eh o numero 9 ???

Share this post


Link to post
Share on other sites

Até onde sei vai sim, porque o 9 romano, pelo que lembro, é IX não é? Ou seja, exige um teste especial para o número neste caso...

 

[]'s

Share this post


Link to post
Share on other sites

Até onde sei vai sim, porque o 9 romano, pelo que lembro, é IX não é? Ou seja, exige um teste especial para o número neste caso...

 

[]'s

 

 

isso mesmo...

ai teria que colocar ele antes da condicao do 10 ?

Share this post


Link to post
Share on other sites

Seria melhor testar na ordem de grandeza, vindo do maior para o menor ... isto é, teste o 10, depois o 9, depois o 5 para ai chegar nos entre 1 e 4. Qualquer coisa posta o código completo ai pra vermos.

 

[]'s

Share this post


Link to post
Share on other sites

so que como ta usando mod e div, nao sei se seria.

 

if (resto >=9) and (iresto <10)
... continuacao...

 

 

 

Seria no meio desse ai ne .

 

if (iresto >= 10) and (iresto < 50) then
        begin
             iqtde  := iresto div 10;
             iresto := iresto mod 10;
             if iqtde > 0 then
             begin
                   icontrolelaco := 0;
                   while icontrolelaco < iqtde do
                   begin
                         sromano := sromano + 'X';
                         icontrolelaco:=icontrolelaco+1;
                   end;
             end;
        end;
        if (iresto >= 5) and (iresto < 10) then
        begin
             iqtde  := iresto div 5;
             iresto := iresto mod 5;
             if iqtde > 0 then
             begin
                   icontrolelaco := 0;
                   while icontrolelaco < iqtde do
                   begin
                         sromano := sromano + 'V';
                         icontrolelaco:=icontrolelaco+1;
                   end;
             end;
        end;

Share this post


Link to post
Share on other sites

Este trecho está errado....

 

        if (iresto >= 5) and (iresto < 10) then 
        begin 
             iqtde  := iresto div 5; 
             iresto := iresto mod 5; 
             if iqtde > 0 then 
             begin 
                   icontrolelaco := 0; 
                   while icontrolelaco < iqtde do 
                   begin 
                         sromano := sromano + 'V'; 
                         icontrolelaco:=icontrolelaco+1; 
                   end; 
             end; 
        end;

Você não precisa de um laço de repetição para valores iguais a 5 e 9, visto que eles só podem ser computados uma vez.... então, o certo seria usar if's simples....

 

        if (iresto = 9) then 
        begin 
             iresto := iresto - 9; 
             sromano := sromano + 'IX';
        end;
        if (iresto >= 5) and (iresto < 9) then 
        begin 
             iresto := iresto - 5; 
             sromano := sromano + 'V';
        end;

Saindo desse bloco, se fosse 9 o valor, o iresto zeraria... se fosse 8, o iresto sairia com valor 3. Você deve avaliar antes de usar comandos a real necessidade dos mesmos.

 

[]'s

Share this post


Link to post
Share on other sites

Este trecho está errado....

 

        if (iresto >= 5) and (iresto < 10) then 
        begin 
             iqtde  := iresto div 5; 
             iresto := iresto mod 5; 
             if iqtde > 0 then 
             begin 
                   icontrolelaco := 0; 
                   while icontrolelaco < iqtde do 
                   begin 
                         sromano := sromano + 'V'; 
                         icontrolelaco:=icontrolelaco+1; 
                   end; 
             end; 
        end;

Você não precisa de um laço de repetição para valores iguais a 5 e 9, visto que eles só podem ser computados uma vez.... então, o certo seria usar if's simples....

 

        if (iresto = 9) then 
        begin 
             iresto := iresto - 9; 
             sromano := sromano + 'IX';
        end;
        if (iresto >= 5) and (iresto < 9) then 
        begin 
             iresto := iresto - 5; 
             sromano := sromano + 'V';
        end;

Saindo desse bloco, se fosse 9 o valor, o iresto zeraria... se fosse 8, o iresto sairia com valor 3. Você deve avaliar antes de usar comandos a real necessidade dos mesmos.

 

[]'s

 

 

 

 

ahh simm, agora entendi .

Muito obrigadoo !

Share this post


Link to post
Share on other sites

Vai ter que montar as condições de acordo com as regras para geração do arábico...

 

[]'s

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.