The first multiplication is when i = 0, so it should be ok. I am wondering though, the OP wants to calculate the factorial of 999999999. That would require a larger data type than an integer to store the result in! ;)
On Tue, Oct 27, 2020 at 1:46 PM Евгений Кадисов via lazarus < lazarus@lists.lazarus-ide.org> wrote: > The problem of your code is that the variable <answer> is not > initialized. > Regards > Evgueny > > вт, 27 окт. 2020 г. в 15:28, Santiago A. via lazarus < > lazarus@lists.lazarus-ide.org>: > >> El 18/10/2020 a las 19:18, Lars via lazarus escribió: >> >> When building a simple TTimer demo I cannot seem to get it working >> >> Any idea what the problem could be if you paste this code into your form >> with a memo? >> >> var >> TimeSpent: integer; >> >> procedure TForm2.Button1Click(Sender: TObject); >> var >> i, answer: integer; >> begin >> Timer1.enabled := false; >> TimeSpent := 0; >> Timer1.Enabled := true; >> Timer1.interval := 1; >> for i := 0 to 999999999 do >> begin >> answer := i * answer; >> end; >> >> memo1.lines.add('time spent: ' + inttostr(timespent)); >> >> end; >> >> procedure TForm2.Timer1Timer(Sender: TObject); >> begin >> inc(TimeSpent); >> end; >> >> It says >> time spent: 0 >> Whereas the time should be a lot. >> >> Regards, >> Lars >> >> >> I don't know what are you trying to do, but if you are trying to find out >> how long it takes certain process, you should try other approach. Timer is >> low precision and it is only fired by events, so you must process event's >> queue. >> >> A first and bad approach: >> >> for i := 0 to 999999999 do >> begin >> answer := i * answer; >> application.processmessages; //<-- process event queue >> end; >> >> But this is very not a very efficient way. The best is to get the start >> time, get the end time and subtract. >> >> var >> StartTime,EndTime:TDataTime; >> i, answer: integer; >> begin >> StartTime:=now; >> for i := 0 to 999999999 do >> begin >> answer := i * answer; >> end; >> EndTime:=now; >> memo1.lines.add('time spent: ' + TimeToStr(EndTime-StarTime) ); >> end; >> >> But TDateTime is not accurate at all if you are measuring short periods >> (milliseconds). >> >> EpikTimer is a component with much better precision. >> >> https://wiki.lazarus.freepascal.org/EpikTimer >> >> >> -- >> Saludos >> >> Santiago A. >> >> -- >> _______________________________________________ >> lazarus mailing list >> lazarus@lists.lazarus-ide.org >> https://lists.lazarus-ide.org/listinfo/lazarus >> > -- > _______________________________________________ > lazarus mailing list > lazarus@lists.lazarus-ide.org > https://lists.lazarus-ide.org/listinfo/lazarus >
-- _______________________________________________ lazarus mailing list lazarus@lists.lazarus-ide.org https://lists.lazarus-ide.org/listinfo/lazarus