Jump to content

[Resolvido] Como faço para separar um número grande com pontos - Pascalzim


Recommended Posts

Posted

Com uma variável string de apoio, inicializada a nada (s:=''), usas um ciclo FOR...DOWNTO...DO para percorreres a string onde tens o numero grande do fim para o inicio.

Depois vais passando caracter a caracter de uma string para a outra, com o pormenor que:

Se i (variável de controlo do FOR) MOD 3 for 0, além do caracter mete também um '.'.

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Posted

Faz assim, esquece o downto. É mais fácil de outra maneira:

Analisa este código. Toma atenção aos comentários.

var
  valor,aux:String;
  i:Integer;

begin
  valor:='12345678';  // Valor de exemplo

  Aux:='';  // Variável auxiliar inicializada

  for i:=1 to length(valor) do     // Executa o FOR o número de caracteres que tem a string valor
     begin
        // Passa para a variável Aux caracter a caracter.
        // O Length(Valor)+1 - i é para inverter os valores, passando efectivamente do último para o primeiro
        Aux:=Valor[Length(Valor)+1 - i] + Aux;  //Junta cada caracter da string valor à string Aux, um de cada vez

        // Se i mod 3 for 0, acrescenta o '.', desde que o i não seja o último da série (primeiro caracter, graças à inversão.
        // Isto impede que o . seja acrescentado por exemplo no número 123 (sem o i<>length(valor), ficaria .123 e não 123
        if (i mod 3=0) and (i<>length(valor))
           then Aux:='.'+Aux;
     end;

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Posted

Eu acrescentei esse código no seu código, mas o valor não ficou pontuado, ficou normal 12345678.

Esse código já está pronto, ou você me mostrou o caminho para estudar ele e fazer o resto?

grato!

     begin
      writeln(valor);
      end;
Posted

O código era apenas um exemplo, sim... Mas está pronto a funcionar.

E não precisa muito para veres que em lado nenhum eu retorno o valor pontuado à variável "valor".

O valor já formatado ficou na Aux, pelo que, ou mostras essa, ou tens de passar o conteúdo de aux para a variável valor.

  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Posted

No FreePascal até tens uma função que faz isso automaticamente...

Agora, no PZim... Até pode haver, mas desconheço!

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

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
×
×
  • 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.