Skocz do zawartości

Nadrzędność pętli - pytanie.


ampers

Pomocna odpowiedź

Witam. 

Chcę się tylko upewnić czy poprawnie rozumuję składnie i działanie pętli.

While(warunek1) // pętla nr.1
{
  While(warunek2) //pętla nr.2
  {
  }
}

Do sedna, pętla nr.1 będzie się wykonywać do czasu spełnienia warunek1 to oczywiste. Idąc dalej jeżeli zostanie spełniony warunek2 to będziemy się poruszali w pętli nr.2

I teraz moje pytanie jeżeli z jakiś powodów warunek1 nie będzie spełniony to przerwie działanie obu pętli i program poleci sobie dalej ? 

Czy może jest tak że jeżeli się poruszam w pętli nr.2 to nawet gdy warunek z pętli nr.1 przestanie być spełniany to dalej będę zapętlony w pętli nr.2 bo tam warunek2 jest prawdziwy ?

Link do komentarza
Share on other sites

@ampers witam na forum 🙂

Dnia 6.11.2022 o 08:57, ampers napisał:

I teraz moje pytanie jeżeli z jakiś powodów warunek1 nie będzie spełniony to przerwie działanie obu pętli i program poleci sobie dalej ? 

Nie, jeśli program jest w jednej pętli to nic innego nie jest sprawdzane - pomijając np. przerwania itd., ale w tak podstawowym przykładzie możemy założyć, że wykonywana jest tylko pętla numer 2. 

Dnia 6.11.2022 o 08:57, ampers napisał:

Czy może jest tak że jeżeli się poruszam w pętli nr.2 to nawet gdy warunek z pętli nr.1 przestanie być spełniany to dalej będę zapętlony w pętli nr.2 bo tam warunek2 jest prawdziwy ?

Tak, dokładnie tak będzie. Jeśli program wskoczy to jednej pętli to będzie krążył tylko w niej.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

(edytowany)

Dzięki wielkie oto mi chodziło. Zdaje sobie sprawę że to podstawy ale nieraz te podstawy sprawiają że ciężko doszukać się problemu.

A swoją drogą czy ktoś ma jakiś sprawdzony sposób na działanie pętli warunek1 nie będzie spełniony to przerwie działanie obu pętli i program poleci sobie dalej gdy jest w pętli nr.2 ? Coś w rodzaju :

While(warunek1) // pętla nr.1
{
  While(warunek2) //pętla nr.2
  {
    if(warunek1==30)
    {break;}
  }
}

Czy może są jakieś zgrabniejsze metody bo nie chcę używać jeszcze attachInterrupt.

pozdrawiam i też witam serdecznie wszystkich tutaj.

Edytowano przez ampers
Link do komentarza
Share on other sites

Z zagnieżdżonych pętli (a o takich mowa) możesz się zgrabnie wydostać za pomocą słowa kluczowego "return" użycie spowoduje zakonczenie funkcji w której się znajdujesz...więc jeśli to będzie w loop() to na początek loop() ("break" spowoduje zakończenie tylko tej jednej pętli w której się znajdujesz) 

While(warunek1) // pętla nr.1
{
  While(warunek2) //pętla nr.2
  {
    if(warunek1==30) { 
      return;
   }
  }
}

 

Edytowano przez farmaceuta
  • Pomogłeś! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Przy takiej składni dowolny warunek == flase kończy pętlę:

while ((warunek1) && (warunek2))
{
  
}

Jeśli warunki nie są obliczane wewnątrz pętli, to bez np. przerwań pętla się nie skończy.

  • Lubię! 1
  • Pomogłeś! 1
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.