Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

infolivee

[Resolvido] Transformacao

Recommended Posts

O que você já fez? Qual são suas dúvidas? Já há um tópico semelhante ao seu com a idéia de solução neste fórum mesmo, dê uma pesquisada.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que você já fez? Qual são suas dúvidas? Já há um tópico semelhante ao seu com a idéia de solução neste fórum mesmo, dê uma pesquisada.

 

[]'s

 

 

 

Ja pesquisei, mas so tem falando da conta matematica.

Quero que me ajudem a passar esse ai pra condicoes ifs pois ainda nao aprendi funcoes e nem arrays.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas o que você já fez ou tentou fazer? Se o que espera é o código pronto, então devo mover seu tópico para a área de serviços.... lá é a área indicada para contratar alguém pra desenvolver sistemas.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas o que você já fez ou tentou fazer? Se o que espera é o código pronto, então devo mover seu tópico para a área de serviços.... lá é a área indicada para contratar alguém pra desenvolver sistemas.

 

[]'s

 

 

voce olhou o codigo postado acima ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

voce olhou o codigo postado acima ?

 

 

Infelizmente, eu como muitos colegas que acessam o fórum, trabalho em uma empresa com uma política que restringe o acesso a certos tipos de sites, de modo que em horário comercial é impossível acessar sites para downloads de códigos e afins. Logo, quando pergunto o que já fez é devido a isto... ou seja, não há como eu visualizar o conteúdo do link acima.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption := DecimalToRomano(StrToInt(Edit1.Text))
end;

function TForm1.DecimalToRomano(Decimal: Longint): string;
const
  Numeros: array[1..13] of Integer =
    (1, 4, 5, 9, 10, 40, 50, 90, 100,
    400, 500, 900, 1000);
  Romanos: array[1..13] of string =
    ('I', 'IV', 'V', 'IX', 'X', 'XL',
    'L', 'XC', 'C', 'CD', 'D', 'CM', 'M');
var
  i: Integer;
begin
  for i := 13 downto 1 do
    while (Decimal >= Numeros[i]) do
    begin
      Decimal := Decimal - Numeros[i];
      Result  := Result + Romanos[i];
    end;
end;

 

tenho esse esquema ai com a funcao e com o vetor...

 

mas nao me lembro como posso passar isso pra if , como comecar ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode trabalhar com comandos como DIV e MOD para pegar os valores e jogar isto em variáveis.... por exemplo...

 

1450 DIV 1000 = 1

1450 MOD 1000 = 450

 

Os valores que for calculando, você pode jogar em variáveis auxiliares... no seu código, você tem dois arrays que contém os valores em decimal e romano que vai precisar para montar seu resultado final... vou por um começo aqui para você analisar....

 

var iControleLaco,
      iValorInicial,
      iResto, 
      iQtde : Integer;
      sRomano : String;
begin
      iValorInicial := 1450;
      sRomano := EmptyStr;
      iQtde  := iValorInicial DIV 1000;
      iResto := iValorInicial MOD 1000;
      if iQtde > 0 then
      begin
           iControleLaco := 0;
           while iControleLaco < Qtde do
           begin
                sRomano := sRomano + 'M';
                inc(iControleLaco);
           end;
      end;
      
      if iResto = 900 then
          sRomano := sRomano + 'CM'
      else if iResto = 500 then
                sRomano := sRomano + 'D'
      else
            ....
end;

Essa seria uma das formas... eu usaria provavelmente o case para o controle e um outro laço de repetição, mas estou pondo da forma mais simples aqui pra ajudar...

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, ai é questão de adaptar as suas necessidades... pra pegar o dado do edit, você poderia substituir esta linha.

 

iValorInicial := 1450; 

Por esta.

 

iValorInicial := StrToInt(Edit1.text); 

E o retorno estaria na variável sRomanos... era só por o label.caption:= sRomanos no fim do processo... note que o código está incompleto, cabe a você tentar montar o resto dele.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

seguinte, estava editando o codigo aqui, e fiz o seguinte.

 

peguei essa parte da condicao if e fui fazendo...

Fiz com o os valores 400,100,90,50,40,10,5,4,1...

 

Esses numeros estao certos, mostrando corretamente...

Mas como vou fazer pra quando o cara digitar 15 ? ele concatenar as letras ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poste o código que montou que fica mais fácil ajudar.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites


 

procedure TForm1.Button1Click(Sender: TObject);

var icontrolelaco, ivalorinicial, iresto, iqtde : integer;

sRomano : String;

begin

iValorInicial := strtoint(ed_numero.Text);

sromano := EmptyStr;

iqtde := ivalorinicial div 1000;

iresto := ivalorinicial mod 1000;

if iqtde > 0 then

begin

icontrolelaco := 0;

while icontrolelaco < iqtde do

begin

sromano := sromano + 'M';

inc(icontrolelaco);

end;

end;

 

if iresto = 900 then

sromano := sromano + 'CM'

else if iresto = 500 then

sromano := sromano + 'D'

else if iresto = 400 then

sromano := sromano + 'CD'

else if iresto = 100 then

sromano := sromano + 'C'

else if iresto = 90 then

sromano := sromano + 'XC'

else if iresto = 50 then

sromano := sromano + 'L'

else if iresto = 40 then

sromano := sromano + 'XL'

else if iresto = 10 then

sromano := sromano + 'X'

else if iresto = 5 then

sromano := sromano + 'V'

else if iresto = 4 then

sromano := sromano + 'IV'

else if iresto = 1 then

sromano := sromano + 'I';

 

 

lbl_resp.Caption := sRomano;

end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vejo que você ainda não entendeu direito a idéia que tentei passar de como funciona a rotina... pelo menos o começo que eu postei...

 

No começo da aplicação, eu fiz pra você o código para pegar quantas unidades de milhar você tem no valor lido, usando um laço de repetição para jogar o valor certo?

 

      iValorInicial := strtoint(ed_numero.Text); 
      sromano := EmptyStr; 
      iqtde  := ivalorinicial div 1000; 
      iresto := ivalorinicial mod 1000; 
      if iqtde > 0 then 
      begin 
           icontrolelaco := 0; 
           while icontrolelaco < iqtde do 
           begin 
                sromano := sromano + 'M'; 
                inc(icontrolelaco); 
           end; 
      end; 

Partindo disto, imaginei que você fosse aplicar o mesmo conceito para o resto do código... no segundo if, eu tinha posto valores fixos só pra dar idéia de como você poderia montar alguns retornos, mas não quer dizer que você não vá ter que efetuar outras operações de divisão como fiz no primeiro if em alguns momentos... vou postar como seria +/- a solução até retornar as centenas para você entender... teste com um valor como 1800 por exemplo de entrada.

 

procedure TForm1.Button1Click(Sender: TObject); 
var icontrolelaco, ivalorinicial, iresto, iqtde : integer; 
      sRomano : String; 
begin 
      iValorInicial := strtoint(ed_numero.Text); 
      sromano := EmptyStr; 
      iqtde  := ivalorinicial div 1000; 
      iresto := ivalorinicial mod 1000; 
      if iqtde > 0 then 
      begin 
           icontrolelaco := 0; 
           while icontrolelaco < iqtde do 
           begin 
                sromano := sromano + 'M'; 
                inc(icontrolelaco); 
           end; 
      end; 
      if iresto > 0 then
      begin
         if iresto >= 900 then
         begin
              sromano := sromano + 'CM';
              iresto := iresto - 900;
        end;
        if iresto >= 500 then
        begin
             sRomano := sRomano + 'D';
             iresto := iresto - 500; //Desconta 500
        end;
        if (iresto >= 400) and (iresto <500) then
        begin
             sRomano := sRomano + 'CD';
             iresto := iresto - 400; //Desconta 400
        end;
    
        if (iresto >= 100) and (iresto < 400) then
        begin
             iqtde  := iresto div 100; 
             iresto := iresto mod 100; 
             if iqtde > 0 then 
             begin 
                   icontrolelaco := 0; 
                   while icontrolelaco < iqtde do 
                   begin 
                         sromano := sromano + 'C'; 
                         inc(icontrolelaco); 
                   end; 
             end; 
        end;
     
       <continuam os testes com os valores menores>
    
      end;    
      lbl_resp.Caption := sRomano; 
end;

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

posso trocar:

inc(icontrolelaco);

por

icontrolelaco:=controlelaco+1
???

 

 

esse EmptyStr eh um tipo de conversao ?

sromano := EmptyStr;

Amigo, dica prática pra pesquisar comandos no delphi: selecione o comando e dê F1 rsrsrsrs....

 

Mas sobre os dois códigos que questionou, segue as respostas...

 

O comando inc faz o mesmo que por um contador := contador + 1.... ele dá um incremento de 1 na variável.

 

O EmptyStr joga numa string um valor vazio (Empty).

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, dica prática pra pesquisar comandos no delphi: selecione o comando e dê F1 rsrsrsrs....

 

Mas sobre os dois códigos que questionou, segue as respostas...

 

O comando inc faz o mesmo que por um contador := contador + 1.... ele dá um incremento de 1 na variável.

 

O EmptyStr joga numa string um valor vazio (Empty).

 

[]'s

 

 

Ok, muito obrigado pela dica.

 

Agora vou tentar a conversao de ROMANO para ARABICO.

 

So fazer o inverso ne ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.