Ĺadny brzuch
Witam
A więc mam taki problem robie sobie program do pewnej gry ktory ma za zadanie policzyc miedyz innymi ilosc doświadczenia które mozemy zdobyć w ciągu godziny
procedura wyglaa tak:
var ExpGodzina: Integer; ....... procedure TGlowna.Timer4Timer(Sender: TObject); begin //Liczenie ExpGodzina := ZdobytyExp / Czas1 * 3600; //Wyswietlanie ExpNaGodzine.Caption := IntToStr(ExpGodzina); end;
Czas jest liczony w oddzielnym timerze ktory odsieaz sie co sekunde i zwieksza wartosc czas o 1. Timer wywoluje sie co minute czyli w pierwszej minucie przy ZdobytyExp rownym 18 wynik wedlug kalkulatora jest 1080 a komputera 1098 natomiast przy 36 jest to 2197 zamiast 2160.
Moze mi ktos wytlumaczyć co jest zle i wrazieczego poprawić kod
Integer sie dzieli za pomoca div
Chyba ze ZdobytyExp i Czas1 sa typu zmiennoprzecinkowego...
@up
gdy zmienie to w ten sposob
var ExpGodzina: Double; ....................... procedure TGlowna.Timer4Timer(Sender: TObject); begin //Liczenie ExpGodzina := ZdobytyExp / Czas1 * 3600; //Wyswietlanie ExpNaGodzine.Caption := FloatToStr(ExpGodzina); end;
przy zdobytyexp = 18 to wyswietla mi 1098,30508474576
a nie moge dzielić przez div gdys jest to dzielenie bez reszty i w wypadku zdobytegoexpa = np 18 to 18 div 60 * 3600 da mi 0 czyli jescze gorszy wynik:(
Jesli czas1 i zdobytyexp sa typu double, to expgodzina niech bedzie integer i:
var ExpGodzina: integer; ....................... procedure TGlowna.Timer4Timer(Sender: TObject); begin //Liczenie ExpGodzina := round (ZdobytyExp / Czas1) * 3600; //Wyswietlanie ExpNaGodzine.Caption := IntToStr(ExpGodzina); end;
Moze teraz jest dobrze ? Aha -
http://4programmers.net/Delphi/Mod //reszta z dzielenia
http://4programmers.net/Delphi/Div //dzielenie integer
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
A więc mam taki problem robie sobie program do pewnej gry ktory ma za zadanie policzyc miedyz innymi ilosc doświadczenia które mozemy zdobyć w ciągu godziny
procedura wyglaa tak:
var ExpGodzina: Integer; ....... procedure TGlowna.Timer4Timer(Sender: TObject); begin //Liczenie ExpGodzina := ZdobytyExp / Czas1 * 3600; //Wyswietlanie ExpNaGodzine.Caption := IntToStr(ExpGodzina); end;
Czas jest liczony w oddzielnym timerze ktory odsieaz sie co sekunde i zwieksza wartosc czas o 1. Timer wywoluje sie co minute czyli w pierwszej minucie przy ZdobytyExp rownym 18 wynik wedlug kalkulatora jest 1080 a komputera 1098 natomiast przy 36 jest to 2197 zamiast 2160.
Moze mi ktos wytlumaczyć co jest zle i wrazieczego poprawić kod
Integer sie dzieli za pomoca div
Chyba ze ZdobytyExp i Czas1 sa typu zmiennoprzecinkowego...
@up
gdy zmienie to w ten sposob
var ExpGodzina: Double; ....................... procedure TGlowna.Timer4Timer(Sender: TObject); begin //Liczenie ExpGodzina := ZdobytyExp / Czas1 * 3600; //Wyswietlanie ExpNaGodzine.Caption := FloatToStr(ExpGodzina); end;
przy zdobytyexp = 18 to wyswietla mi 1098,30508474576
a nie moge dzielić przez div gdys jest to dzielenie bez reszty i w wypadku zdobytegoexpa = np 18 to 18 div 60 * 3600 da mi 0 czyli jescze gorszy wynik:(
Jesli czas1 i zdobytyexp sa typu double, to expgodzina niech bedzie integer i:
var ExpGodzina: integer; ....................... procedure TGlowna.Timer4Timer(Sender: TObject); begin //Liczenie ExpGodzina := round (ZdobytyExp / Czas1) * 3600; //Wyswietlanie ExpNaGodzine.Caption := IntToStr(ExpGodzina); end;
Moze teraz jest dobrze ? Aha -
http://4programmers.net/Delphi/Mod //reszta z dzielenia
http://4programmers.net/Delphi/Div //dzielenie integer