Jump to content
Fórum Script Brasil
  • 0

Dificuldades Em Manipular Variavéis


Guest Ricardo Lorente
 Share

Question

Guest Ricardo Lorente

Bom dia a todos,

Sou novato em programação porém muito perssistente e estou precisando de ajuda para fazer um programa onde tenho um determinado valor de um produto e uma determinada porcentagem de desconto que será aplicada mês a mês automaticamente (depreciação). Mas para teste queria fazé-la minuto a minuto.

Tenho 3 Dbedits, 'valor' 'porcentagem' e 'resultado'

var

Form1: TForm1;

mês : string; //variavel que guarda o mês

valor,i: integer; //variavel que vai guardar o valor

por : integer; //variavel da porcentagem

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

Table1.insert; // 'Botão' nada haver com o problema

end;

procedure TForm1.DBEdit3Click(Sender: TObject);

begin

mês:=formatdatetime('n',now); //variavel recebendo mês (no caso min só para fazer teste)

valor:=StrToInt(dbValor.Text); // recebe o valor e a porcentagem

por := strtoint(dbPor.Text);

valor:= valor-(valor div 100 * por);

dbResultado.text:=inttostr(valor); //mostra a depreciação

end;

end.

Tudo isso funciona ele faz a depreciação, porém queria fazer algum processo onde o valor seria depreciado minuto a minuto até chegar ao valor '0', alguém pode me ajudar?? aceito críticas e sugestões...pois, quero aprender

Obrigado.

Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0
Guest --Jonas --

Por que não usa um For ou um timer ???

exemplo:

var 
    cont : integer;

begin

for cont := 1 to 50 do  ///  coloque um numero que o resultado chegue a zero
   begin

       mês:=formatdatetime('n',now); //variavel recebendo mês (no caso min só para fazer teste) 
       valor:=StrToInt(dbValor.Text); // recebe o valor e a porcentagem
       por := strtoint(dbPor.Text);

       valor:= valor-(valor div 100 * por); 

       dbResultado.text:=inttostr(valor); //mostra a depreciação
    end; 

end;

Link to comment
Share on other sites

  • 0
Guest Ricardo Lorente

Até ai tudo bem mas como uso um timer para executar essa rotina uma vez a cada minuto?

e como o count vai saber que precisa ser acrescido de um para refazer novamente a depreciação no minuto seguinte??

Link to comment
Share on other sites

  • 0
Guest --Jonas --

Dentro do timer fica assim:

defina o iterval do timer = 60000 que corresponde a 1 minuto; neste caso não precisa do contador cont, o proprio timer sera o contador de tempo.

procedure TForm1.Timer1Timer(Sender: TObject);
begin
    mês:=formatdatetime('n',now); //variavel recebendo mês (no caso min só para fazer teste)
    valor:=StrToInt(dbValor.Text); // recebe o valor e a porcentagem
    por := strtoint(dbPor.Text);

    valor:= valor-(valor div 100 * por);

    dbResultado.text:=inttostr(valor); //mostra a depreciação

    if valor = 0 then  // quando o valor chegar a zero ele para 
       begin
          Timer1.Enabled := false;
          exit;
       end;
end;

Link to comment
Share on other sites

  • 0
Guest Ricardo Lorente

Eu fiz isso que você me disse, porém, ele deprecio somente um vez

Ex.: 500 - 5% = 475 e não continua... Mesmo com o timer ativo...

O que faço pra ele continuar a depreciação até chegar a 0??

Obrigado...

Link to comment
Share on other sites

  • 0
Guest --Jonas --
Eu fiz isso que você me disse, porém, ele deprecio somente um vez

Ex.: 500 - 5% = 475 e não continua... Mesmo com o timer ativo...

O que faço pra ele continuar a depreciação até chegar a 0??

Obrigado...

você quer de minuto a minuto, então tem que esperar o proximo minuto para ele te dar a resposta; se aparentemente ele parou na primeira vez pode ser que o valor não esteja sendo alterado .... para reduzir o tempo, mude o interval para 1000 e veja se valor chega a zero ( vai mudar a cada segundo ) faça este mudança para saber o valor de 'valor' .... o timer so sera parado se o valor for zero caso contrario ele continuara executando

procedure TForm1.Timer1Timer(Sender: TObject);
begin
    mês:=formatdatetime('n',now); //variavel recebendo mês (no caso min só para fazer teste)
    valor:=StrToInt(dbValor.Text); // recebe o valor e a porcentagem
    por := strtoint(dbPor.Text);

    valor:= valor-(valor div 100 * por);
    showmessage(floattostr(valor));

    dbResultado.text:=inttostr(valor); //mostra a depreciação

    if valor = 0 then  // quando o valor chegar a zero ele para 
       begin
          Timer1.Enabled := false;
          exit;
       end;
end;

Link to comment
Share on other sites

  • 0
Guest Ricardo Lorente

Obrigado Jonas pela ajuda já tentei todas essas possíbilidades e descobri meu erro, era de lógica o Timer funcionou normalmente, porém mudei um pouco as coisas no meu projeto para ficar mais ágil, ao invés de depreciar uma vez por mês quero depreciar tudo de uma com um click no botão vez, ex:

valor: 100 porcentagem: 10

Depreciação: //um DBGrid mostrando a depreciação linha a linha.

Valor

linha1 100

linha2 90

linha3 81

etc...

como não sei vou tentar chutar um exemplo do que gostaria de fazer:

var

i,u : integer;

for i = 0 to 100 do

begin

dbline(u).text:= resultado; //variável que guarda o valor da conta;

u:= u+1;

end;

//quer dizer cada linha do DBGrid recebe o valor da variável resultado.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.6k
×
×
  • Create New...