Pretendo demonstrar neste artigo uma aplicação Delphi para calcular o troco no pagamento de uma conta. Como resultado será apresentado também o valor inteiro do troco dividido em notas de R$ 100,00 - R$ 50,00 - R$ 20,00 - R$ 10,00 - R$ 5,00 - R$ 2,00 e R$ 1,00, respectivamente. E ainda, a parte fracionária do troco será dividida em moedas de R$ 0,50 - R$ 0,25 - R$ 0,10 - R$ 0,05 e R$ 0,01, respectivamente.

Formulário Principal

Observe que as caixas de textos explicativos utilizadas na figura apresentam a ordem sequencial e o nome do componente, a página da sua localização e as propriedades que devem ser alteradas com os respectivos valores.

Troco em uma Aplicação Delphi
Troco em uma Aplicação Delphi

Implementação

Função que calcula e retorna o troco dividido em notas e moedas usando como parâmetros de entrada: "conta" = valor da conta; e, "pago" = valor pago.


function calculaTroco(conta, pago: real): String;
const      nota: array[1..7] of integer = (100, 50, 20, 10, 5, 2, 1);
       centavos: array[1..5] of integer = (50, 25, 10, 5, 1);
var      troco: real;
    i, vlr, ct: integer;
             s: string;
begin
  if (pago < conta)
     then calculaTroco := 'Pagamento insuficiente, faltam R$ ' +
            FloatToStr(conta - pago)
  else begin
         troco := pago - conta;
         s := 'Troco = R$ ' + FloatToStr(troco);
         s := s + #13#10 + #13#10;
// definindo as notas do troco (parte inteira)
         vlr := trunc(troco);
         i := 1;
         while (vlr <> 0) do
         begin
           ct := vlr div nota[i]; // calculando a qtde de notas
           if (ct <> 0)
              then begin
                     s := s + IntToStr(ct) +
                       ' nota(s) de R$ ' + IntToStr(nota[i]) + #13#10;
                     vlr := vlr mod nota[i]; // sobra
                   end;
           i := i + 1; // próxima nota
         end;

         s := s + #13#10;
// definindo as moedas do troco (parte fracionária)
         vlr := round(frac(troco) * 100);
         i := 1;
         while (vlr <> 0) do
         begin
           ct := vlr div centavos[i]; // calculando a qtde de moedas
           if (ct <> 0)
              then begin
                     s := s + IntToStr(ct) + ' moeda(s) de ' +
                       IntToStr(centavos[i]) + ' centavo(s)' + #13#10;
                     vlr := vlr mod centavos[i]; // sobra
                   end;
           i := i + 1; // próxima moeda
         end;

         calculaTroco := s;
       end;
end;

Evento "onClick" do botão "Troco".


procedure TForm1.Button1Click(Sender: TObject);
var conta, pago: real;
begin
  Memo1.Clear;
  try
    conta := StrToFloat(Edit1.Text);
    pago := StrToFloat(Edit2.Text);

    Memo1.Lines.Add(calculaTroco(conta, pago));
  except
    ShowMessage('Erro: dados informados inválidos !!!');
  end;
end;

Entendendo o algoritmo da função "calculaTroco":

  1. Os vetores "nota" e "centavos" representam os valores das notas e centavos, respectivamente, usados nos cálculos das quantidades individuais na divisão do troco.
  2. Inicialmente é verificado se o valor pago é suficiente para o pagamento da conta.
  3. A divisão do troco é realizada em duas partes:
    a) dividindo a parte inteira do troco (trunc) da maior nota (R$ 100,00) para a menor nota (R$ 1,00) até zerar o valor inteiro do troco. O operador div é usado para calcular a quantidade de notas já o operador mod foi utilizado na expressão que calcula a sobra.
    b) dividindo a parte fracionária do troco (frac) da maior moeda (R$ 0,50) para a menor moeda (R$ 0,01) até zerar o valor fracionário do troco. Novamente os operadores div e mod são utilizados nas expressões que fazem a divisão da parte fracionária do troco em moedas.

Executando a Aplicação

Informar o valor da conta, o valor pago e pressionar o botão "Troco" e o seguinte resultado poderá ser exibido:

Troco em uma Aplicação Delphi
Troco em uma Aplicação Delphi.

Veja também:

Links Úteis

  • Um bate-papo sobre o Delphi:
    O Delphi está em constante evolução e com ele podemos criar aplicações desktop, servidores de aplicações, aplicativos móveis, entre outros.
  • Enums no Java:
    Aprenda nesse microexemplo como criar e utilizar enums no Java. Confira como esse poderoso recurso permite a definição de um conjunto limitado de valores para uma variável.

Saiba mais sobre Delphi ;)

  • Começando no Delphi:
    Neste Guia de Referência você encontrará o conteúdo que precisa para iniciar seus estudos em Delphi, uma plataforma para desenvolvimento de aplicativos completa, principalmente para soluções desktop e mobile.
  • Curso de Delphi para Iniciantes:
    Este curso como o nome sugere é destinada a todas as pessoas que desejam aprender a desenvolver utilizando o Delphi como ferramenta de desenvolvimento e linguagem de programação.
  • Todos os cursos de Delphi:
    Confira os cursos que a DevMedia preparou para você se tornar um programador Delphi completo. Aprenda a desenvolver aplicações desktop, web e mobile utilizando o VCL, FireMonkey, FireDac e mais.