Você está na página 1de 2

Esta uma funo para calcular de modo progressivo um abono (de uma folha de

pagamento, por exemplo) sem cometer injustia. Digamos que todos os funcionrios
que ganham at R$ 299,99 recebam um abono de R$ 50,00 e acima deste valor, um
abono de R$ 30,00.
Se no aplicarmos a frmula, poder acontecer que, quem ganha, por exemplo, R$ 290,00
receber R$ 340,00 (e o correto seria ganhar R$ 324,00) passando a ganhar mais de que
quem ganhava R$ 300,00, pois este ter apenas um abono de R$ 30,00, recebendo R$
330,00. A funo a seguir corrige estas distores e pode ser aplicada num banco de dados
para diversas faixas salariais:
function Abono (S, F, A1, A2: Double) : Double;
begin
If S>=F then
begin
Result:=S+A2
end
else
begin
If S>F-A1 then
Result:=(100-(((F-S)/A1)*100))*A2/100+F
else
Result:=S+A1
end;
end;
Onde S = Salrio (No nosso exemplo R$ 290,00 ou R$ 300,00).
F = Faixa do Abono (No nosso exemplo R$ 300,00).
A1 = 1 Abono (Valor mais alto, no nosso exemplo R$ 50,00).
A2 = 2 Abono (Valor mais baixo, no nosso exemplo R$ 30,00).
Result = Retorno da funo com o calculo do novo salrio.
Para utilizar basta chamar a funo passando as variveis ou campos do banco de dados
exatamente como na ordem acima. Como exemplo, veja como ficaria o cdigo do boto
"Calcular Novo Salrio" na interface abaixo:

Figura 1. Interface de exemplo para uso da funo
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit5.Text := FloatToStr(
Abono( StrToFloat(Edit4.Text), //Salrio
StrToFloat(Edit1.Text), //Faixa
StrToFloat(Edit2.Text), //Aumento 1
StrToFloat(Edit3.Text) //Aumento 2
)
); //FloatToStr();
end;
Atenciosamente
Ronald Joseph Edmond Maliniak (GBBG)

Você também pode gostar