Preciso de ajuda em um desafio de delphi.

22/11/2017

0

Pessoal, sou novo do delphi e não consegui executar um desafio que me foi proposto. Segue o código que imaginei mas queria dicas para como desenvolver essa demanda pois o meu código não rodou.

Uma loja vende DVDs por R$ 1,10 a unidade. Acima de 10 unidades, será vendido cada DVD
por R$ 1,00 a unidade adicional e acima de 20 unidades, será vendido cada unidade adicional a
R$ 0,90. Exemplo, vendendo 21 unidades deverá ser cobrado 10x1.10+10x1.00+1x0.90.
Escreva uma função (utilizando Delphi / Pascal) que receba a quantidade de DVDs a ser
vendida e retorne o valor desta venda.

--------

Program Teste ;
var

X, V1, V2, V3: real;

BEGIN
WRITE('Qual a quantidade de discos desejados?');
READLN(X);



IF (X > 0) AND (X <= 10) THEN

begin
V1:= X * 1.10;
write('O Valor de' + FloatToStr(X) + 'discos correspode a: '+ FloatToStr(V1) + 'reais');
end;


IF (X > 10) AND (X <= 20) THEN

begin
V2:= (X - 10) * 1.00 + V1;
write('O Valor de' + FloatToStr(X) + 'discos correspode a: '+ FloatToStr(V2)+ 'reais');
end;


IF (X >= 21) AND (X <= 30) THEN

begin
V3:= (X - 20) * 0.80 + V2;
write('O Valor de' + FloatToStr(X) + 'discos correspode a: '+ FloatToStr(V3)+'reais');
end;
END
Luiz Silva

Luiz Silva

Responder

Posts

25/01/2018

Jerson Boer

Olá Luiz, não sei se já resolveu, mas acho que chega ao resultado que espera.

Para execução dele adicionei na tela 1 edit + 1 button + 1 memo.

No edit informo a quantidade e realizo a checagem.

procedure TfrmCalcDVD.btnCalcularClick(Sender: TObject);
var
  Total : integer;
begin
  Total := StrToInt(edtQuantidade.Text);

  mmoResultado.Lines.Clear;

  if Total <= 10 then
    begin
      mmoResultado.Lines.Add('O Valor de' + IntToStr(Total) + ' discos correspode a: '+ FloatToStr(Total * 1.10) + ' reais');
    end
  else if Total <= 20 then
    begin
      mmoResultado.Lines.Add('O Valor de' + IntToStr(10) + ' discos correspode a: '+ FloatToStr(10 * 1.10) + ' reais');
      mmoResultado.Lines.Add('O Valor de' + IntToStr(Total - 10) + ' discos correspode a: '+ FloatToStr(Total - 10 * 1.00) + ' reais');
    end
  else
    begin
      mmoResultado.Lines.Add('O Valor de' + IntToStr(10) + ' discos correspode a: '+ FloatToStr(10 * 1.10) + ' reais');
      mmoResultado.Lines.Add('O Valor de' + IntToStr(10) + ' discos correspode a: '+ FloatToStr(10 * 1.00) + ' reais');

      if (Total - 20) <> 0 then
        mmoResultado.Lines.Add('O Valor de' + IntToStr(Total - 20) + ' discos correspode a: '+ FloatToStr((Total - 20) * 0.90) + ' reais');
    end;
end;

end.
Responder

21/06/2018

Luiz Silva

Jerson Boer,

Muito obrigado ajudou bastante. Desculpa não ter respondido antes.

Att,
Responder

01/03/2023

Bruno Gisse

Olá, peguei seu exemplo para praticar. Segue uma possível solução:

procedure TForm1.btnCalcMediaClick(Sender: TObject);
var
QtdeDVD : Integer;
Total : Double;
const
MIN_DVD = 10;
MED_DVD = 20;
PRECO_1_10 = 1.10;
PRECO_1_00 = 1.0;
PRECO_0_90 = 0.9;
begin
QtdeDVD := StrToIntDef(editQtdeDVD.Text,0);
total := 0;

if editQtdeDVD.Text <> '' then
begin
if (QtdeDVD <= MIN_DVD) then
Total := QtdeDVD * PRECO_1_10

else if (QtdeDVD < MED_DVD) then
total := (MIN_DVD * PRECO_1_10) + ((QtdeDVD - MIN_DVD) * PRECO_1_00)

else
total := (MIN_DVD * PRECO_1_10) + ((MED_DVD - MIN_DVD) * PRECO_1_00)
+ ((QtdeDVD - MED_DVD) * PRECO_0_90);

ShowMessageFmt('Total das vendas dos DVDs : R$ %.2n', [Total] );
btnLimpar.SetFocus;
end
else
begin
MessageDlg('Por favor, preencha a qtde de DVDs vendidos', mtWarning, [mbOK], 0);
editQtdeDVD.SetFocus;
end;
end;
Responder

01/03/2023

Arthur Heinrich

function Preco(QDVD : Integer):Double;
begin
  Result := QDVD*1.1 - 0.1*sign(QDVD div 11)*(QDVD-10) - 0.1*sign(QDVD div 21)*(QDVD-20);
end;

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar