Problem z Gauge

0

Witam wszystkich. Mam problem ze zrobieniem dobrego paska postępu. Może na początek fragment kodu:

if Radiobutton1.Checked then
REPEAT

L:=(A/(di+p))+Lg;
di:=i+dt*((1/L)(Umsin((omegat)+beta)-Ri)); //metoda eulera
chart1.Series[0].AddXY(t,di);
Memo1.Lines.Add('i= '+floattostr(di));
Memo2.Lines.Add('L= '+floattostr(L));
i:=di; //wzór jawny

t:=t+dt;
m:=m+1;
gauge1.progress:=m;

UNTIL t>0.15;

Załóżmy że ustawiam zmienną dt:=0.00001, wtedy program wykonuje pętlę 15000 razy i wszystko jest ok, bo taka ustawiam max wartosc progresu... Ale problem w tym że zmienna dt ma być zmienna wprowadzana przez użytkownika i kiedy jest staje się mniejsza lub wieksza to gauge juz nie dziala tak jak powinno. Prosze o pomoc.

0

Rozumiem, że dana jest wprowadzana przed pętlą?
To daj po prostu

gauge.max := dt_max;

gdzie dt_max to to wprowadzone rpzez użytkowinika, mozesz to wtedy pomnożyc przez coś, np 1000 by mieć to co chcesz...

0
gladkii20 napisał(a)
REPEAT
...
    t:=t+dt;
...
UNTIL t>0.15; 

Na wszelki wypadek zrobiłbym tak

licznik=0;
t0:=t;
repeat
    ...
    inc(licznik);
    t=t0 + licznik*dt
until t>0.15

Czasem to bardzo istotne

0

rozumiem, że t wędruje od 0 do 0.15
dla danego dt trzeba wykonać round(0.15/dt) kroków

gauge.max:= round(0.15/dt); 
m:=0; t:=0.0;
t0:=t;
repeat
    ....
    m:=m+1;
    t:=t0+m*dt
until t>0.15
0

Wielkie dzięki dla mag.dobrowolski, ostatni kodzik działa bez zarzutu:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1