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.
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":
- 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.
- Inicialmente é verificado se o valor pago é suficiente para o pagamento da conta.
- 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:
Veja também:
- Separando a Parte Inteira e a Parte Fracionária de Valores do Tipo Real
- Calculando o Troco em uma Aplicação Java
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.