Bardzo dobrze wychwycone! Kod 3 idealnie odwzorowuje logikę algorytmu przedstawioną na schemacie blokowym. Pętla while sprawdza warunek y != 100 i dopóki jest spełniony, wykonuje instrukcję y = a + b. Zarówno przebieg pętli, jak i wyjście z niej odpowiadają dokładnie temu, co prezentuje ten diagram blokowy – czyli wykonujemy przypisanie y = a + b, jeśli warunek jest prawdziwy, a gdy przestaje być, wychodzimy z pętli. Takie podejście jest bardzo typowe w programowaniu, nie tylko w szkolnych zadaniach, ale też w praktyce, gdy musimy powtarzać akcję do momentu spełnienia konkretnego warunku. Moim zdaniem, dobrze jest tutaj zauważyć, że pętle while są preferowane, gdy nie znamy z góry liczby powtórzeń, a warunek wejścia ma być sprawdzany przed każdym przebiegiem – to klasyczna konstrukcja w językach takich jak C, Java czy Python. Tego typu algorytmy można spotkać choćby podczas obsługi wejścia użytkownika (np. powtarzaj pytanie, aż użytkownik poda poprawną wartość) albo w sterowaniu urządzeniami, gdy czekamy na określony sygnał wejściowy. Warto też pamiętać, że w profesjonalnym kodzie dobrze jest dbać o czytelność i jednoznaczność takich fragmentów – a ten kod właśnie taki jest. Swoją drogą, czasem warto dodać jeszcze zabezpieczenia, by uniknąć tzw. nieskończonej pętli, ale tutaj, jak widać, intencja jest jasna i zgodna ze standardami branżowymi.
Zdarza się, że pozornie zbliżone konstrukcje programistyczne mogą wprowadzić w błąd przy interpretacji algorytmów blokowych. Spójrzmy na przedstawione odpowiedzi. Kod 1 wykorzystuje pojedynczy warunek if, przez co operacja przypisania y = a + b zachodzi tylko raz, jeśli warunek jest spełniony, i na tym się kończy – nie ma tu powtarzania, a przecież schemat blokowy wyraźnie wskazuje na wielokrotne wykonywanie działania tak długo, jak długo y jest różne od 100. Podobnie Kod 4 – to właściwie taki sam przypadek z inną kolejnością, ale nadal nie ma tu powtarzania akcji, czyli pętli. Kod 2 wydaje się być blisko idei pętli, bo mamy konstrukcję do...while, ale niestety warunek pętli jest odwrócony: while (y == 100). W efekcie kod wykona instrukcję tylko wtedy, gdy y na początku równa się 100, co jest sprzeczne z logiką schematu – a chodzi przecież o kontynuację dla y różnego od 100. Częstym błędem jest tutaj nieuwzględnienie różnicy między pętlami z warunkiem wejścia (while) a wyjścia (do...while). W praktyce, w środowiskach rzeczywistych, takie drobne pomyłki mogą prowadzić do poważnych problemów, np. pętla w ogóle się nie wykona, mimo że powinna realizować określoną akcję wielokrotnie. Moim zdaniem, warto w takich przypadkach po prostu rozrysować sobie przebieg działania krok po kroku – to pomaga uniknąć typowych pułapek myślowych. Kluczowe jest rozumienie, że kod odpowiadający schematowi blokowemu z warunkiem powtarzania powinien zawsze wykorzystywać pętlę z poprawnie sformułowanym warunkiem powtarzania – właśnie tak, jak w Kodzie 3.