pętla FOR (skad ten wynik ? )

0

Mam cos takiego :

procedure TForm1.Button1Click(Sender: TObject);
var j,f,d:integer;
begin

for j:=1 to 5 do
begin
f:=j;
end;
d:=j ;
showmessage('d='+inttostr(d)+'f(wewnatrz petli)='+inttostr(f));
end;

dlaczego wyszlo ze d=6 a f=5 ??? czy niepowinny byc takie same ??

[???]

0

to usun enda pomiedzy

f:=j;
d:=j;

procedure TForm1.Button1Click(Sender: TObject);
var j,f,d:integer;
begi
 for j:=1 to 5 do
 begin
   f:=j;
 d:=j ;
 end;
 showmessage('d='+inttostr(d)+'f(wewnatrz petli)='+inttostr(f));
end;
0

to usun enda pomiedzy

f:=j;
d:=j;

Ależ ja wiem co zrobić żeby f=d tylko jak chce wiedziec dlaczego sie tak dzieje ze te wyniki sa rozne ?
Nie dziwi Cie to ze d jest rozne od f ??

0

Ale właśnie. Przecież powinno być to samo. Dlaczego tak się dzieje?? :-|

0

A nie wyskoczyło ci przypadkiem coś takiego:
[Warning] Unit1.pas(34): FOR-Loop variable 'j' may be undefined after loop
???

Chodzi o to że zmienna licznikowa może mieć po zakończeniu pętli wartość nieokreśloną (w praktyce o 1 większą od endloop). Wynika to z tego że pętla for działa mniej więcej w taki sposób:

procedure for(beginloop, endloop, var j: Integer); 
label 1;
begin
j:=beginloop;
1: {tutaj następuje wykonanie zawartości pętli}
Inc(j);
if j>endloop then exit else goto 1;
end;

:-)

0

Wynika to z tego że pętla for działa mniej więcej w taki sposób:
(...)

Bingo! Właśnie dlatego warto uczyć się assemblera.

0

Chodzi o to że zmienna licznikowa może mieć po zakończeniu pętli wartość nieokreśloną (w praktyce o 1 większą od endloop).

Czy ona zawsze bedzie o 1 wieksza ??
czy to jest pewne ??

...pytam bo zrobilbym sobie d:=j-1; i bedzie tak jakby bylo w petli.

0

Czy ona zawsze bedzie o 1 wieksza ??
czy to jest pewne ??

Nie! Helpa czytaj!
for counter := initialValue to finalValue do statement
{...}
After the for statement terminates (provided this was not forced by a break or an exit procedure), the value of counter is undefined.

0

Dzieki wszystkim !!
Poszukam innej drogi w moim algorytmie, ta ze stosowaniem zmiennej definiowanej w petli for jest malo bezpieczna.
Choć to dziwne że wszystko wskazzuje na to że powinna wyskakiwać całkowicie dowlona liczba , a wychodzi zawsze (na tyle prob co wykonalem ) o 1 większa.

:-/

0

Choć to dziwne że wszystko wskazzuje na to że powinna wyskakiwać całkowicie dowlona liczba , a wychodzi zawsze (na tyle prob co wykonalem ) o 1 większa.

To może zależeć od sposobu optymalizacji danej pętli przez Delphi. Generalnie wychodzi +1 z powodów podanych powyżej, ale istnieje możliwość, że po pętli miejsce (np rejestr), w którym był licznik, zostanie przez kompilator użyte do czego innego. I wtedy klops.

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