Preciso de ajuda em um desafio de delphi.
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
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
Curtidas 0
Respostas
Jerson Boer
22/11/2017
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.
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.
GOSTEI 0
Luiz Silva
22/11/2017
Jerson Boer,
Muito obrigado ajudou bastante. Desculpa não ter respondido antes.
Att,
Muito obrigado ajudou bastante. Desculpa não ter respondido antes.
Att,
GOSTEI 0
Bruno Gisse
22/11/2017
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;
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;
GOSTEI 0
Arthur Heinrich
22/11/2017
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;
GOSTEI 0