Działanie pętli "While..."
Działanie pętli "While..."
1.Jak rozumiem działanie pętli "While", instrukcje zawarte wewnątrz są realizowane dopóki nie zostanie spełniony określony warunek.Dopiero po spełnieniu warunku program wychodzi z pętli wykonywane są instrukcje zapisane poniżej.
Zatem w takim przypadku (jak niżej) zmiana urządzenia "w" powinna nastąpić dopiero w momencie wjazdu loka do bloku b6.
W rzeczywistości wyjście z pętli i zmiana urządzenia "w" następuje wcześniej. Czy ja znowu coś nie zauważam?
2.Czy wyjście z pętli "While" może nastąpić przed spełnieniem warunku, jeśli wewnętrzna instrukcja w tym przypadku dot Uruchomienia Rozkładu jazdy zakończyła sie wcześniej?
Załączam też plik .plansza. Zdarzenia zapisane są dla "u4" i "u6"
Zatem w takim przypadku (jak niżej) zmiana urządzenia "w" powinna nastąpić dopiero w momencie wjazdu loka do bloku b6.
W rzeczywistości wyjście z pętli i zmiana urządzenia "w" następuje wcześniej. Czy ja znowu coś nie zauważam?
2.Czy wyjście z pętli "While" może nastąpić przed spełnieniem warunku, jeśli wewnętrzna instrukcja w tym przypadku dot Uruchomienia Rozkładu jazdy zakończyła sie wcześniej?
Załączam też plik .plansza. Zdarzenia zapisane są dla "u4" i "u6"
- Załączniki
-
- STY 2017 ver.2.plansza
- (1.92 MiB) Pobrany 187 razy
Andrzej
Re: Działanie pętli "While..."
Propozycja: wstaw w środku pędli while blok "Czekaj" z parametrem np.: 0.5sek, bo zamęczysz komputer...
Taka pętla while działa non-stop aż do zakończenia na 100% procesora nic nie robiąc...
Taka pętla while działa non-stop aż do zakończenia na 100% procesora nic nie robiąc...
Wiki: http://wiki.gbbkolejka.pl
Program do sterowania makietami: http://www.gbbkolejka.pl
Facebook: http://www.facebook.com/pages/Modelarst ... 0485039078
Program do sterowania makietami: http://www.gbbkolejka.pl
Facebook: http://www.facebook.com/pages/Modelarst ... 0485039078
Re: Działanie pętli "While..."
Moim zdaniem jest odwrotnie: pętla while wykonuje się dopóki spełniony jest warunek. Jak przestaje być spełniony, to program opuszcza pętlę.
Słowo "while" można tłumaczyć jako "podczas gdy"
Przykład:
i=0
while i<5
i=i+1
end while
Powoduje policzenie od 0 do 4. Pętla jest opuszczana, gdy i=5
PS. To co ty opisujesz w różnych językach programowania nazywa się "until", ale tego u nas nie ma.
Wiki: http://wiki.gbbkolejka.pl
Program do sterowania makietami: http://www.gbbkolejka.pl
Facebook: http://www.facebook.com/pages/Modelarst ... 0485039078
Program do sterowania makietami: http://www.gbbkolejka.pl
Facebook: http://www.facebook.com/pages/Modelarst ... 0485039078
Re: Działanie pętli "While..."
Skoro "
to przy takim ustawieniu warunku program powinien wyjść z pętli w momencie wjazdu loka do bloku b6. (zdarzenie dla urządzenia u4)
A tymczasem program w ogóle do pętli nie wchodzi. Jak zamienię warunek na "this.Engine.BlockByName("X").CurrentTrainStatus == GbbEngine.Block.TrainStatuses.StopOrMissing" to program do pętli wchodzi i opuszcza ją kiedy Rozkład jazdy zmienia status na "Stopped" pomimo, że lok do bloku b6 jeszcze nie dojechał.
"Moim zdaniem jest odwrotnie: pętla while wykonuje się dopóki spełniony jest warunek. Jak przestaje być spełniony, to program opuszcza pętlę.
to przy takim ustawieniu warunku program powinien wyjść z pętli w momencie wjazdu loka do bloku b6. (zdarzenie dla urządzenia u4)
A tymczasem program w ogóle do pętli nie wchodzi. Jak zamienię warunek na "this.Engine.BlockByName("X").CurrentTrainStatus == GbbEngine.Block.TrainStatuses.StopOrMissing" to program do pętli wchodzi i opuszcza ją kiedy Rozkład jazdy zmienia status na "Stopped" pomimo, że lok do bloku b6 jeszcze nie dojechał.
Andrzej
Re: Działanie pętli "While..."
To może ustalmy najpierw o co w ogóle chodzi w tym małym programiku.
Właczasz u4 i co ma się dziać?
Właczasz u4 i co ma się dziać?
Wiki: http://wiki.gbbkolejka.pl
Program do sterowania makietami: http://www.gbbkolejka.pl
Facebook: http://www.facebook.com/pages/Modelarst ... 0485039078
Program do sterowania makietami: http://www.gbbkolejka.pl
Facebook: http://www.facebook.com/pages/Modelarst ... 0485039078
Re: Działanie pętli "While..."
Uruchamiany jest Rozkład jazdy "3-3>". Po wjechaniu loka do bloku b6 ma się zmienić urządzenie "w". Wiem, że można zapisać zdarzenie bezpośrednio w bloku, ale mnie zależy na użyciu pętli while.
Andrzej
Re: Działanie pętli "While..."
Załączam jeszcze plik .plansza byś mógł to prześledzić
- Załączniki
-
- STY 2017 ver.2.plansza
- (1.93 MiB) Pobrany 206 razy
Andrzej
Re: Działanie pętli "While..."
1. Wyrzuć uruchamianie Rozkładu Jazdy przed pętle. Wystarczy uruchomić raz, a nie milion razy w pętli
2. W petli wstaw opóźnienie (np.: 1sek albo 0.1 sek), bo inaczej komputer ci się niepotrzebnie grzeje
3. Warunek spróbuj taki:
PS. Zainstaluj nowszą wersję, bo dodałem funkcję "this.IsNull" aby łatwo było sprawdziać, czy obiekt jest pusty.
2. W petli wstaw opóźnienie (np.: 1sek albo 0.1 sek), bo inaczej komputer ci się niepotrzebnie grzeje
3. Warunek spróbuj taki:
Kod: Zaznacz cały
this.IsNull(this.Engine.BlockByName("b6").CurrentTrain)
Wiki: http://wiki.gbbkolejka.pl
Program do sterowania makietami: http://www.gbbkolejka.pl
Facebook: http://www.facebook.com/pages/Modelarst ... 0485039078
Program do sterowania makietami: http://www.gbbkolejka.pl
Facebook: http://www.facebook.com/pages/Modelarst ... 0485039078
Re: Działanie pętli "While..."
Piotrze,
Po zmianie warunku pętla działa poprawnie.
Poprzednie rozwiązania: [ this.Engine.BlockByName("X").CurrentTrainStatus == GbbEngine.Block.TrainStatuses.StopOrMissing oraz this.Engine.BlockByName("x").CurrentTrainStatus != GbbEngine.Block.TrainStatuses.StopOrMissing] nie do końca funkcjonowały dobrze.
Bardzo dziękuję.
Po zmianie warunku pętla działa poprawnie.
Poprzednie rozwiązania: [ this.Engine.BlockByName("X").CurrentTrainStatus == GbbEngine.Block.TrainStatuses.StopOrMissing oraz this.Engine.BlockByName("x").CurrentTrainStatus != GbbEngine.Block.TrainStatuses.StopOrMissing] nie do końca funkcjonowały dobrze.
Bardzo dziękuję.
Andrzej
Re: Działanie pętli "While..."
Jeszcze spostrzeżenie. Warunek "this.IsNull(this.Engine.BlockByName("b6").CurrentTrain)" działa tylko wtedy kiedy lok jest przypisany do bloku. Warunek nie działa gdy lok jest rzeczywiście w bloku (blok zajety) ale nie jest przypisany. Mnie to na razie nie przeszkadza.
Andrzej