U funkciji
f2() koju si prikazao u svojoj prvoj poruci ili imas gresku u kucanju (promenljiva
f koju prinosis funkciji
Math.Floor()), ili je mozda u tome tvoj problem (ako je promenljiva
f ipak negde deklarisana i sadrzi neku vrednost na koju moze uticati pritisak tastera).
Elem, probao sam funkcije u Delphi XE (zamenivsi gorepomenuto
f sa
r, pretpostavljam da ipak tako treba), i bez obzira na pritiskanje tastera u toku rada programa
f2() mi uvek vraca 665, a
f1() vraca 664.
Razlog za ovo ponasanje je cinjenica da funkcija
Math.Floor() dolazi u tri varijante, tj. da kao parametar moze primiti promenljivu single, double ili extended tipa. Ti si u obe svoje funkcije promenljivu
r deklarisao kao double, ali dok je unutar
f2() samostalno prinosis kao parametar za
Math.Floor() (sto poziva overload varijantu koja prima parametar tipa double), u svojoj funkciji
f1() ti kao parametar za
Math.Floor() prinosis
(100) * r, sto uzrokuje da se u ovom slucaju poziva
Math.Floor() varijanta koja prima parametar tipa extended - i stoga razlika u rezultatima / preciznosti zaokruzivanja.
Ukoliko promeljivu
r u obe svoje funkcije deklarises kao extended (umesto double), obe ce vracati 665 kao rezultat. Evo jednog interesantnog linka na temu preciznoti tipova double i extended --
http://stackoverflow.com/questions/1398295/trunc-function.
p.s. Ukoliko i dalje imas problem sa razlicitim vrednostima u zavisnosti od toga da li nesto pritiskas ili ne, mozes sam debug-ovati Delphi-jeve unit-e tako sto ces ici u
Project > Options > Delphi Compiler > Compiling i stiklirati "Use debug .dcus" (unutar grupe "Debugging"). Proveri samo da ti je "Build Configuration" na vrhu postavljen na "Debug". Nakon ovoga pokreni svoj program, postavi breakpoint na linije gde pozivas
Math.Floor(), okini ih, i pritiskom na taster F7 (Trace Into) direktno ces uci u odgovarajucu funkciju unutar "Math.pas" unit-a (gde mozes dalje posmatrati desavanja i racunice, kao i trenutne vrednosti promenljivih).
Pozdrav, i javi sta si otkrio :)