Blad petli for

0

Witam.
Doszcz czesto gdy stosuje petle for delphi dziala w dziwny sposob.
Na przyklad przy petli

 for i:=1 to 4 do

odlicza od 4 do 1, a dla

for i:=4 downto 1 do

odlicza od -4 do 1
Mam nadzieje ze bedziecie mi mogli pomoc bo to bardzo irytujace
(rozwiazuje problem rozbijajac kod na

var i:integer;
label 1;

begin
i :=1;
1:
//intrukcje
i:=i+1
if not(i>4) then goto 1;
end;
0

a przeszkadza Ci to w czymś? Źle liczy albo coś źle pokazuje?
To jest efekt działania optymalizatora - prościej (szybciej) jest komputerowi zliczyć od 4 do 1 niż od 1 do 4

0

Przeszkadza, program z tego powodu zle dziala. Gdyby nie przeszkadzalo to bym nawet nie zauwazyl :] Zakladam ze mozna to jakos wylaczayc. W jaki sposob?

0
  1. podaj cały kod pętli, dane wejściowe, oczekiwany wynik i wynik jaki zwraca program
  2. jak już móiłem to zasługa optymalizatora - wyłącz go
0

jeśli ta zmienna jest wykorzystywana w pętli, to chyba kompilator nie powinien optymalizowac w ten sposob.

0

Fragment programu:

var
ruch, i : integer;
pom :string;
zazo: array [1..4,1..4] of integer;

begin

pom := IntToStr( zazo[ruch,1]);
for i := 2 to 4 do
if zazo[ruch,i] <> 0 then
pom := pom + IntToStr(zazo[ruch,i]);

end;

Gdy ustawie sobie czujke na zmienna i to w tym fragmencie zlicza mi od 4 do 2.

Czasem petla dziala bez bledu, a czasem sie psuje i dlatego przy wiekszych programach sprawia problem wychwycenie tego i naprawa (zwlaszcza jak nie wiesz co powoduje bledy).

0

ale w tej pętli nie ma znaczenia czy pętla leci od 4 do 2 czy od 2 do 4 - wynik zawsze będzie taki sam

TeWuX - jeśli zmiana kolejności pętli nie zmieni wyniku to optymalizator zmienia ją na downto

0

Wybacz mi ale lepiej od ciebie wiem ze ma znaczenie.
Jesli bede mial zemienna np. [1,2,3] i bede jej kolejne elementy wkladal do innej zmiennej to czy w niej znadzie sie '123' czy '321' ma znaczenie.

0

nie zauważyłem, że pom to string
w takim wypadku optymalizator nie powinien zmieniać nic w pętli - wyłącz optymalizacje i powinno być ok

0

Dzieki za pomoc, ort! to. Mam nadzieje ze to jest to i program zadziala w koncu jak trzeba :]

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