{"id":1014,"date":"2021-06-15T14:29:00","date_gmt":"2021-06-15T12:29:00","guid":{"rendered":"https:\/\/trzykody.pl\/?page_id=1014"},"modified":"2026-02-19T22:30:29","modified_gmt":"2026-02-19T21:30:29","slug":"petla-while","status":"publish","type":"page","link":"https:\/\/trzykody.pl\/index.php\/c\/petle\/petla-while\/","title":{"rendered":"P\u0119tla while"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>P\u0119tla while jest jedn\u0105 z podstawowych instrukcji steruj\u0105cych przep\u0142ywem programu. S\u0142u\u017cy do wielokrotnego wykonywania fragmentu kodu tak d\u0142ugo, jak d\u0142ugo okre\u015blony warunek logiczny ma warto\u015b\u0107 prawda. W przeciwie\u0144stwie do p\u0119tli for nie wymaga z g\u00f3ry znanej liczby iteracji &#8211; decyzja o zako\u0144czeniu wykonania zale\u017cy wy\u0142\u0105cznie od warunku sprawdzanego przed ka\u017cd\u0105 kolejn\u0105 iteracj\u0105. Mechanizm ten jest prosty w budowie, ale bardzo elastyczny w zastosowaniu, dlatego P\u0119tla while stanowi fundament wielu algorytm\u00f3w iteracyjnych.<\/strong><\/p>\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>Spis tre\u015bci<\/h2><nav><ol><li class=\"\"><a href=\"#petla-while-skladnia-semantyka-dzialania-i-najprostszy-przyklad-uzycia\">P\u0119tla while &#8211; sk\u0142adnia, semantyka dzia\u0142ania i najprostszy przyk\u0142ad u\u017cycia<\/a><ol><li class=\"\"><a href=\"#najprostszy-przyklad-wypisanie-liczb-od-1-do-5\">Najprostszy przyk\u0142ad &#8211; wypisanie liczb od 1 do 5<\/a><ol><li class=\"\"><a href=\"#c-while-c\">C (while C)<\/a><\/li><li class=\"\"><a href=\"#c-while-cpp\">C++ (while cpp)<\/a><\/li><li class=\"\"><a href=\"#python\">Python<\/a><\/li><\/ol><\/li><\/ol><\/li><li class=\"\"><a href=\"#petla-while-analiza-mechanizmu-warunku-kontrola-przeplywu-i-roznice-wzgledem-for\">P\u0119tla while &#8211; analiza mechanizmu warunku, kontrola przep\u0142ywu i r\u00f3\u017cnice wzgl\u0119dem for<\/a><ol><li class=\"\"><a href=\"#roznice-wzgledem-petli-for\">R\u00f3\u017cnice wzgl\u0119dem p\u0119tli for<\/a><\/li><\/ol><\/li><li class=\"\"><a href=\"#petla-while-zastosowania-w-algorytmach-iteracyjnych-i-przetwarzaniu-danych-wejsciowych\">P\u0119tla while &#8211; zastosowania w algorytmach iteracyjnych i przetwarzaniu danych wej\u015bciowych<\/a><ol><li class=\"\"><a href=\"#wczytywanie-danych-do-momentu-spelnienia-warunku\">Wczytywanie danych do momentu spe\u0142nienia warunku<\/a><ol><li class=\"\"><a href=\"#c\">C<\/a><\/li><\/ol><\/li><li class=\"\"><a href=\"#algorytmy-numeryczne\">Algorytmy numeryczne<\/a><\/li><\/ol><\/li><li class=\"\"><a href=\"#petla-do-while-roznice-wzgledem-while-do-i-sytuacje-w-ktorych-wykonanie-ciala-musi-nastapic-przynajmniej-raz\">P\u0119tla do while &#8211; r\u00f3\u017cnice wzgl\u0119dem while do i sytuacje, w kt\u00f3rych wykonanie cia\u0142a musi nast\u0105pi\u0107 przynajmniej raz<\/a><ol><li class=\"\"><a href=\"#przyklad-menu-uzytkownika\">Przyk\u0142ad &#8211; menu u\u017cytkownika<\/a><\/li><\/ol><\/li><li class=\"\"><a href=\"#petla-while-php-zastosowanie-w-przetwarzaniu-danych-i-pracy-z-baza-danych\">P\u0119tla while php &#8211; zastosowanie w przetwarzaniu danych i pracy z baz\u0105 danych<\/a><\/li><li class=\"\"><a href=\"#typowe-bledy-logiczne-w-konstrukcji-petli-while-i-sposoby-ich-unikania\">Typowe b\u0142\u0119dy logiczne w konstrukcji p\u0119tli while i sposoby ich unikania<\/a><ol><li class=\"\"><a href=\"#1-petla-nieskonczona\">1. P\u0119tla niesko\u0144czona<\/a><\/li><li class=\"\"><a href=\"#2-blad-off-by-one\">2. B\u0142\u0105d off-by-one<\/a><\/li><li class=\"\"><a href=\"#3-warunek-zalezny-od-danych-wejsciowych-bez-walidacji\">3. Warunek zale\u017cny od danych wej\u015bciowych bez walidacji<\/a><\/li><li class=\"\"><a href=\"#4-modyfikacja-zmiennej-w-niewlasciwym-miejscu\">4. Modyfikacja zmiennej w niew\u0142a\u015bciwym miejscu<\/a><\/li><\/ol><\/li><li class=\"\"><a href=\"#zastosowania-petli-while-w-implementacji-struktur-i-algorytmow\">Zastosowania p\u0119tli while w implementacji struktur i algorytm\u00f3w<\/a><\/li><li class=\"\"><a href=\"#krotkie-uwagi-praktyczne-dotyczace-projektowania-warunkow-zakonczenia\">Kr\u00f3tkie uwagi praktyczne dotycz\u0105ce projektowania warunk\u00f3w zako\u0144czenia<\/a><\/li><\/ol><\/nav><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"petla-while-skladnia-semantyka-dzialania-i-najprostszy-przyklad-uzycia\">P\u0119tla while &#8211; sk\u0142adnia, semantyka dzia\u0142ania i najprostszy przyk\u0142ad u\u017cycia<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ka\u017cda <strong>p\u0119tla while<\/strong> sk\u0142ada si\u0119 z dw\u00f3ch element\u00f3w:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>S\u0142owa kluczowego <code>while<\/code><\/li>\n\n\n\n<li>Warunku logicznego umieszczonego w nawiasach okr\u0105g\u0142ych<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Og\u00f3lna posta\u0107:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">while (warunek) {<br>    instrukcje;<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Zasada dzia\u0142ania jest nast\u0119puj\u0105ca:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Sprawdzany jest warunek.<\/li>\n\n\n\n<li>Je\u015bli warunek jest prawdziwy (true), wykonywane jest cia\u0142o p\u0119tli.<\/li>\n\n\n\n<li>Po wykonaniu cia\u0142a p\u0119tli program wraca do punktu sprawdzenia warunku.<\/li>\n\n\n\n<li>Gdy warunek stanie si\u0119 fa\u0142szywy (false), p\u0119tla ko\u0144czy dzia\u0142anie.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Kluczowe jest to, \u017ce warunek sprawdzany jest przed wykonaniem cia\u0142a p\u0119tli. Je\u015bli ju\u017c na pocz\u0105tku jest fa\u0142szywy, kod wewn\u0105trz nie wykona si\u0119 ani razu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"najprostszy-przyklad-wypisanie-liczb-od-1-do-5\">Najprostszy przyk\u0142ad &#8211; wypisanie liczb od 1 do 5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"c-while-c\">C (while C)<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">#include &lt;stdio.h&gt;int main() {<br>    int i = 1;    while (i &lt;= 5) {<br>        printf(\"%d\\n\", i);<br>        i++;<br>    }    return 0;<br>}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"c-while-cpp\">C++ (while cpp)<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">#include &lt;iostream&gt;int main() {<br>    int i = 1;    while (i &lt;= 5) {<br>        std::cout &lt;&lt; i &lt;&lt; std::endl;<br>        i++;<br>    }    return 0;<br>}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"python\">Python<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">i = 1while i &lt;= 5:<br>    print(i)<br>    i += 1<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Schemat dzia\u0142ania jest identyczny:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>inicjalizacja zmiennej steruj\u0105cej,<\/li>\n\n\n\n<li>warunek zako\u0144czenia,<\/li>\n\n\n\n<li>modyfikacja zmiennej w ciele p\u0119tli.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u017celi zapomnimy o inkrementacji <code>i<\/code>, warunek nigdy nie stanie si\u0119 fa\u0142szywy i powstanie p\u0119tla niesko\u0144czona.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"petla-while-analiza-mechanizmu-warunku-kontrola-przeplywu-i-roznice-wzgledem-for\">P\u0119tla while &#8211; analiza mechanizmu warunku, kontrola przep\u0142ywu i r\u00f3\u017cnice wzgl\u0119dem for<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Warunek w p\u0119tli while jest wyra\u017ceniem logicznym. Mo\u017ce by\u0107:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>prostym por\u00f3wnaniem (<code>i &lt; 10<\/code>)<\/li>\n\n\n\n<li>z\u0142o\u017conym wyra\u017ceniem logicznym (<code>i &lt; 10 &amp;&amp; suma != 0<\/code>)<\/li>\n\n\n\n<li>sprawdzeniem warto\u015bci logicznej zmiennej (<code>while (flaga)<\/code>)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">W j\u0119zykach takich jak C czy C++ ka\u017cde wyra\u017cenie liczbowe mo\u017ce by\u0107 interpretowane logicznie:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>0 \u2192 fa\u0142sz<\/li>\n\n\n\n<li>warto\u015b\u0107 niezerowa \u2192 prawda<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">int x = 5;while (x) {<br>    printf(\"%d\\n\", x);<br>    x--;<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">P\u0119tla wykona si\u0119 dop\u00f3ki <code>x<\/code> jest r\u00f3\u017cne od zera.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"roznice-wzgledem-petli-for\">R\u00f3\u017cnice wzgl\u0119dem p\u0119tli for<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">P\u0119tla for ma posta\u0107:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">for (inicjalizacja; warunek; modyfikacja)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Natomiast while rozdziela te elementy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>inicjalizacja przed p\u0119tl\u0105,<\/li>\n\n\n\n<li>warunek w nag\u0142\u00f3wku,<\/li>\n\n\n\n<li>modyfikacja w ciele.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">W praktyce ka\u017cd\u0105 p\u0119tl\u0119 for mo\u017cna zapisa\u0107 jako while:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">for (int i = 0; i &lt; 10; i++)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">jest r\u00f3wnowa\u017cne:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">int i = 0;<br>while (i &lt; 10) {<br>    i++;<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">P\u0119tla while jest wygodniejsza, gdy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>liczba iteracji nie jest znana,<\/li>\n\n\n\n<li>zako\u0144czenie zale\u017cy od zdarzenia (np. wczytywania danych),<\/li>\n\n\n\n<li>warunek ma charakter dynamiczny.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"petla-while-zastosowania-w-algorytmach-iteracyjnych-i-przetwarzaniu-danych-wejsciowych\">P\u0119tla while &#8211; zastosowania w algorytmach iteracyjnych i przetwarzaniu danych wej\u015bciowych<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"wczytywanie-danych-do-momentu-spelnienia-warunku\">Wczytywanie danych do momentu spe\u0142nienia warunku<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Typowy przypadek:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>u\u017cytkownik podaje liczby,<\/li>\n\n\n\n<li>program ko\u0144czy wczytywanie po wpisaniu zera.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"c\">C<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">#include &lt;stdio.h&gt;int main() {<br>    int liczba;<br>    int suma = 0;    scanf(\"%d\", &amp;liczba);    while (liczba != 0) {<br>        suma += liczba;<br>        scanf(\"%d\", &amp;liczba);<br>    }    printf(\"Suma: %d\\n\", suma);    return 0;<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tutaj nie znamy liczby iteracji. P\u0119tla dzia\u0142a dop\u00f3ki warunek jest spe\u0142niony.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"algorytmy-numeryczne\">Algorytmy numeryczne<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad: przybli\u017canie pierwiastka metod\u0105 Newtona.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Schemat:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>zaczynamy od przybli\u017cenia,<\/li>\n\n\n\n<li>iterujemy a\u017c r\u00f3\u017cnica mi\u0119dzy kolejnymi przybli\u017ceniami b\u0119dzie ma\u0142a.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Python:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">x = 2.0<br>eps = 0.0001<br>a = 10.0while abs(x * x - a) &gt; eps:<br>    x = 0.5 * (x + a \/ x)print(x)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Warunek nie zale\u017cy od licznika, lecz od dok\u0142adno\u015bci oblicze\u0144.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"petla-do-while-roznice-wzgledem-while-do-i-sytuacje-w-ktorych-wykonanie-ciala-musi-nastapic-przynajmniej-raz\">P\u0119tla do while &#8211; r\u00f3\u017cnice wzgl\u0119dem while do i sytuacje, w kt\u00f3rych wykonanie cia\u0142a musi nast\u0105pi\u0107 przynajmniej raz<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">P\u0119tla do while (w niekt\u00f3rych opisach: while do) r\u00f3\u017cni si\u0119 od klasycznej p\u0119tli while kolejno\u015bci\u0105 sprawdzania warunku.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sk\u0142adnia w C i C++:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">do {<br>    instrukcje;<br>} while (warunek);<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Najwa\u017cniejsza r\u00f3\u017cnica:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>warunek sprawdzany jest po wykonaniu cia\u0142a p\u0119tli,<\/li>\n\n\n\n<li>cia\u0142o wykona si\u0119 zawsze co najmniej jeden raz.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"przyklad-menu-uzytkownika\">Przyk\u0142ad &#8211; menu u\u017cytkownika<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">#include &lt;stdio.h&gt;int main() {<br>    int wybor;    do {<br>        printf(\"1 - Opcja A\\n\");<br>        printf(\"2 - Opcja B\\n\");<br>        printf(\"0 - Wyjscie\\n\");<br>        scanf(\"%d\", &amp;wybor);<br>    } while (wybor != 0);    return 0;<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tutaj p\u0119tla do while ma sens, bo menu musi zosta\u0107 pokazane przynajmniej raz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W C++ zapis jest identyczny. W Pythonie nie ma wbudowanej konstrukcji p\u0119tla do while. Mo\u017cna j\u0105 symulowa\u0107:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">while True:<br>    wybor = int(input(\"Podaj liczbe (0 konczy): \"))<br>    if wybor == 0:<br>        break<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Warunek zako\u0144czenia realizowany jest przez <code>break<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"petla-while-php-zastosowanie-w-przetwarzaniu-danych-i-pracy-z-baza-danych\">P\u0119tla while php &#8211; zastosowanie w przetwarzaniu danych i pracy z baz\u0105 danych<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">W PHP konstrukcja jest taka sama:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;?php<br>$i = 1;while ($i &lt;= 5) {<br>    echo $i . \"&lt;br&gt;\";<br>    $i++;<br>}<br>?&gt;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Cz\u0119ste zastosowanie to przetwarzanie wynik\u00f3w zapytania SQL:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;?php<br>while ($wiersz = mysqli_fetch_assoc($wynik)) {<br>    echo $wiersz[\"nazwa\"] . \"&lt;br&gt;\";<br>}<br>?&gt;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">P\u0119tla dzia\u0142a dop\u00f3ki funkcja pobieraj\u0105ca rekord zwraca dane. Gdy zwr\u00f3ci <code>false<\/code>, warunek przestaje by\u0107 spe\u0142niony.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"typowe-bledy-logiczne-w-konstrukcji-petli-while-i-sposoby-ich-unikania\">Typowe b\u0142\u0119dy logiczne w konstrukcji p\u0119tli while i sposoby ich unikania<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"1-petla-nieskonczona\">1. P\u0119tla niesko\u0144czona<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">while (i &lt; 10) {<br>    printf(\"%d\\n\", i);<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Brak zmiany <code>i<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Rozwi\u0105zanie: zawsze sprawdzi\u0107, czy zmienna wp\u0142ywaj\u0105ca na warunek jest modyfikowana.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"2-blad-off-by-one\">2. B\u0142\u0105d off-by-one<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">while (i &lt;= 10)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Zamiast:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">while (i &lt; 10)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Trzeba jasno okre\u015bli\u0107, czy zakres jest domkni\u0119ty czy p\u00f3\u0142otwarty.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"3-warunek-zalezny-od-danych-wejsciowych-bez-walidacji\">3. Warunek zale\u017cny od danych wej\u015bciowych bez walidacji<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u015bli dane nie zmieni\u0105 warunku, p\u0119tla mo\u017ce dzia\u0142a\u0107 w niesko\u0144czono\u015b\u0107.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"4-modyfikacja-zmiennej-w-niewlasciwym-miejscu\">4. Modyfikacja zmiennej w niew\u0142a\u015bciwym miejscu<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Zmiana warunku powinna by\u0107 jednoznaczna i czytelna. Rozproszenie logiki utrudnia analiz\u0119 poprawno\u015bci.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"zastosowania-petli-while-w-implementacji-struktur-i-algorytmow\">Zastosowania p\u0119tli while w implementacji struktur i algorytm\u00f3w<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">P\u0119tla while jest podstaw\u0105:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>przeszukiwania list jednokierunkowych,<\/li>\n\n\n\n<li>przechodzenia po drzewach (w wersji iteracyjnej),<\/li>\n\n\n\n<li>implementacji algorytm\u00f3w BFS i DFS,<\/li>\n\n\n\n<li>algorytm\u00f3w typu \u201edop\u00f3ki nie spe\u0142niono kryterium\u201d.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad &#8211; przej\u015bcie po li\u015bcie jednokierunkowej (C):<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">struct Node {<br>    int value;<br>    struct Node* next;<br>};void printList(struct Node* head) {<br>    struct Node* current = head;    while (current != NULL) {<br>        printf(\"%d\\n\", current-&gt;value);<br>        current = current-&gt;next;<br>    }<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Warunek ko\u0144czy p\u0119tl\u0119 po doj\u015bciu do wska\u017anika NULL.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"krotkie-uwagi-praktyczne-dotyczace-projektowania-warunkow-zakonczenia\">Kr\u00f3tkie uwagi praktyczne dotycz\u0105ce projektowania warunk\u00f3w zako\u0144czenia<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Warunek powinien by\u0107 prosty i jednoznaczny.<\/li>\n\n\n\n<li>Zmienna steruj\u0105ca powinna by\u0107 widoczna w jednym miejscu.<\/li>\n\n\n\n<li>W algorytmach numerycznych nale\u017cy uwzgl\u0119dnia\u0107 tolerancj\u0119 b\u0142\u0119du.<\/li>\n\n\n\n<li>W przypadku danych zewn\u0119trznych (plik, sie\u0107, baza danych) trzeba uwzgl\u0119dni\u0107 mo\u017cliwo\u015b\u0107 b\u0142\u0119du odczytu.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Dobr\u0105 praktyk\u0105 jest mentalne prze\u015bledzenie pierwszych trzech iteracji oraz sprawdzenie, w kt\u00f3rym momencie warunek stanie si\u0119 fa\u0142szywy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">P\u0119tla while oraz jej odmiana p\u0119tla do while nale\u017c\u0105 do najbardziej podstawowych, a jednocze\u015bnie najbardziej elastycznych konstrukcji steruj\u0105cych. Zrozumienie dok\u0142adnej kolejno\u015bci sprawdzania warunku i modyfikacji stanu programu jest kluczowe dla poprawnego projektowania algorytm\u00f3w iteracyjnych i unikania b\u0142\u0119d\u00f3w logicznych.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>P\u0119tla while jest jedn\u0105 z podstawowych instrukcji steruj\u0105cych przep\u0142ywem programu. S\u0142u\u017cy do wielokrotnego wykonywania fragmentu kodu tak d\u0142ugo, jak d\u0142ugo okre\u015blony warunek logiczny ma warto\u015b\u0107 prawda. W przeciwie\u0144stwie do p\u0119tli for nie wymaga z g\u00f3ry znanej liczby iteracji &#8211; decyzja o zako\u0144czeniu wykonania zale\u017cy wy\u0142\u0105cznie od warunku sprawdzanego przed ka\u017cd\u0105 kolejn\u0105 iteracj\u0105. Mechanizm ten jest prosty w budowie, ale bardzo elastyczny w zastosowaniu, dlatego P\u0119tla while stanowi fundament wielu algorytm\u00f3w iteracyjnych. P\u0119tla while &#8211; sk\u0142adnia, semantyka dzia\u0142ania i najprostszy przyk\u0142ad u\u017cycia Ka\u017cda p\u0119tla while sk\u0142ada si\u0119 z dw\u00f3ch element\u00f3w: Og\u00f3lna posta\u0107: while (warunek) { instrukcje;} Zasada dzia\u0142ania jest nast\u0119puj\u0105ca: Kluczowe jest to, \u017ce warunek sprawdzany jest przed wykonaniem cia\u0142a p\u0119tli. Je\u015bli ju\u017c na pocz\u0105tku jest fa\u0142szywy, kod wewn\u0105trz nie wykona si\u0119 ani razu. Najprostszy przyk\u0142ad &#8211; wypisanie liczb od 1 do 5 C (while C) #include &lt;stdio.h&gt;int main() { int i = 1; while (i &lt;= 5) { printf(&#8222;%d\\n&#8221;, i); i++; } return 0;} C++ (while cpp) #include &lt;iostream&gt;int main() { int i = 1; while (i &lt;= 5) { std::cout &lt;&lt; i &lt;&lt; std::endl; i++; } return 0;} Python i = 1while i &lt;= 5: print(i) i += 1 Schemat dzia\u0142ania jest identyczny: Je\u017celi zapomnimy o inkrementacji i, warunek nigdy nie stanie si\u0119 fa\u0142szywy i powstanie p\u0119tla niesko\u0144czona. P\u0119tla while &#8211; analiza mechanizmu warunku, kontrola przep\u0142ywu i r\u00f3\u017cnice wzgl\u0119dem for Warunek w p\u0119tli while jest wyra\u017ceniem logicznym. Mo\u017ce by\u0107: W j\u0119zykach takich jak C czy C++ ka\u017cde wyra\u017cenie liczbowe mo\u017ce by\u0107 interpretowane logicznie: Przyk\u0142ad: int x = 5;while (x) { printf(&#8222;%d\\n&#8221;, x); x&#8211;;} P\u0119tla wykona si\u0119 dop\u00f3ki x jest r\u00f3\u017cne od zera. R\u00f3\u017cnice wzgl\u0119dem p\u0119tli for P\u0119tla for ma posta\u0107: for (inicjalizacja; warunek; modyfikacja) Natomiast while rozdziela te elementy: W praktyce ka\u017cd\u0105 p\u0119tl\u0119 for mo\u017cna zapisa\u0107 jako while: for (int i = 0; i &lt; 10; i++) jest r\u00f3wnowa\u017cne: int i = 0;while (i &lt; 10) { i++;} P\u0119tla while jest wygodniejsza, gdy: P\u0119tla while &#8211; zastosowania w algorytmach iteracyjnych i przetwarzaniu danych wej\u015bciowych Wczytywanie danych do momentu spe\u0142nienia warunku Typowy przypadek: C #include &lt;stdio.h&gt;int main() { int liczba; int suma = 0; scanf(&#8222;%d&#8221;, &amp;liczba); while (liczba != 0) { suma += liczba; scanf(&#8222;%d&#8221;, &amp;liczba); } printf(&#8222;Suma: %d\\n&#8221;, suma); return 0;} Tutaj nie znamy liczby iteracji. P\u0119tla dzia\u0142a dop\u00f3ki warunek jest spe\u0142niony. Algorytmy numeryczne Przyk\u0142ad: przybli\u017canie pierwiastka metod\u0105 Newtona. Schemat: Python: x = 2.0eps = 0.0001a = 10.0while abs(x * x &#8211; a) &gt; eps: x = 0.5 * (x + a \/ x)print(x) Warunek nie zale\u017cy od licznika, lecz od dok\u0142adno\u015bci oblicze\u0144. P\u0119tla do while &#8211; r\u00f3\u017cnice wzgl\u0119dem while do i sytuacje, w kt\u00f3rych wykonanie cia\u0142a musi nast\u0105pi\u0107 przynajmniej raz P\u0119tla do while (w niekt\u00f3rych opisach: while do) r\u00f3\u017cni si\u0119 od klasycznej p\u0119tli while kolejno\u015bci\u0105 sprawdzania warunku. Sk\u0142adnia w C i C++: do { instrukcje;} while (warunek); Najwa\u017cniejsza r\u00f3\u017cnica: Przyk\u0142ad &#8211; menu u\u017cytkownika #include &lt;stdio.h&gt;int main() { int wybor; do { printf(&#8222;1 &#8211; Opcja A\\n&#8221;); printf(&#8222;2 &#8211; Opcja B\\n&#8221;); printf(&#8222;0 &#8211; Wyjscie\\n&#8221;); scanf(&#8222;%d&#8221;, &amp;wybor); } while (wybor != 0); return 0;} Tutaj p\u0119tla do while ma sens, bo menu musi zosta\u0107 pokazane przynajmniej raz. W C++ zapis jest identyczny. W Pythonie nie ma wbudowanej konstrukcji p\u0119tla do while. Mo\u017cna j\u0105 symulowa\u0107: while True: wybor = int(input(&#8222;Podaj liczbe (0 konczy): &#8222;)) if wybor == 0: break Warunek zako\u0144czenia realizowany jest przez break. P\u0119tla while php &#8211; zastosowanie w przetwarzaniu danych i pracy z baz\u0105 danych W PHP konstrukcja jest taka sama: &lt;?php$i = 1;while ($i &lt;= 5) { echo $i . &#8222;&lt;br&gt;&#8221;; $i++;}?&gt; Cz\u0119ste zastosowanie to przetwarzanie wynik\u00f3w zapytania SQL: &lt;?phpwhile ($wiersz = mysqli_fetch_assoc($wynik)) { echo $wiersz[&#8222;nazwa&#8221;] . &#8222;&lt;br&gt;&#8221;;}?&gt; P\u0119tla dzia\u0142a dop\u00f3ki funkcja pobieraj\u0105ca rekord zwraca dane. Gdy zwr\u00f3ci false, warunek przestaje by\u0107 spe\u0142niony. Typowe b\u0142\u0119dy logiczne w konstrukcji p\u0119tli while i sposoby ich unikania 1. P\u0119tla niesko\u0144czona while (i &lt; 10) { printf(&#8222;%d\\n&#8221;, i);} Brak zmiany i. Rozwi\u0105zanie: zawsze sprawdzi\u0107, czy zmienna wp\u0142ywaj\u0105ca na warunek jest modyfikowana. 2. B\u0142\u0105d off-by-one while (i &lt;= 10) Zamiast: while (i &lt; 10) Trzeba jasno okre\u015bli\u0107, czy zakres jest domkni\u0119ty czy p\u00f3\u0142otwarty. 3. Warunek zale\u017cny od danych wej\u015bciowych bez walidacji Je\u015bli dane nie zmieni\u0105 warunku, p\u0119tla mo\u017ce dzia\u0142a\u0107 w niesko\u0144czono\u015b\u0107. 4. Modyfikacja zmiennej w niew\u0142a\u015bciwym miejscu Zmiana warunku powinna by\u0107 jednoznaczna i czytelna. Rozproszenie logiki utrudnia analiz\u0119 poprawno\u015bci. Zastosowania p\u0119tli while w implementacji struktur i algorytm\u00f3w P\u0119tla while jest podstaw\u0105: Przyk\u0142ad &#8211; przej\u015bcie po li\u015bcie jednokierunkowej (C): struct Node { int value; struct Node* next;};void printList(struct Node* head) { struct Node* current = head; while (current != NULL) { printf(&#8222;%d\\n&#8221;, current-&gt;value); current = current-&gt;next; }} Warunek ko\u0144czy p\u0119tl\u0119 po doj\u015bciu do wska\u017anika NULL. Kr\u00f3tkie uwagi praktyczne dotycz\u0105ce projektowania warunk\u00f3w zako\u0144czenia Dobr\u0105 praktyk\u0105 jest mentalne prze\u015bledzenie pierwszych trzech iteracji oraz sprawdzenie, w kt\u00f3rym momencie warunek stanie si\u0119 fa\u0142szywy. P\u0119tla while oraz jej odmiana p\u0119tla do while nale\u017c\u0105 do najbardziej podstawowych, a jednocze\u015bnie najbardziej elastycznych konstrukcji steruj\u0105cych. Zrozumienie dok\u0142adnej kolejno\u015bci sprawdzania warunku i modyfikacji stanu programu jest kluczowe dla poprawnego projektowania algorytm\u00f3w iteracyjnych i unikania b\u0142\u0119d\u00f3w logicznych.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1004,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1014","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/1014","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/comments?post=1014"}],"version-history":[{"count":1,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/1014\/revisions"}],"predecessor-version":[{"id":1018,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/1014\/revisions\/1018"}],"up":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/1004"}],"wp:attachment":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media?parent=1014"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}