{"id":1139,"date":"2021-03-15T22:47:00","date_gmt":"2021-03-15T21:47:00","guid":{"rendered":"https:\/\/trzykody.pl\/?page_id=1139"},"modified":"2026-02-20T22:25:40","modified_gmt":"2026-02-20T21:25:40","slug":"petla-while","status":"publish","type":"page","link":"https:\/\/trzykody.pl\/index.php\/c-2\/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 konstrukcji steruj\u0105cych przep\u0142ywem programu. Pozwala wielokrotnie wykonywa\u0107 okre\u015blony blok kodu tak d\u0142ugo, jak spe\u0142niony jest zadany warunek logiczny. Konstrukcja ta wyst\u0119puje praktycznie we wszystkich j\u0119zykach imperatywnych i proceduralnych, a jej poprawne rozumienie jest kluczowe dla pracy z algorytmami iteracyjnymi, przetwarzaniem danych wej\u015bciowych, obs\u0142ug\u0105 zdarze\u0144 oraz implementacj\u0105 wielu klasycznych metod obliczeniowych. W praktyce bardzo wiele struktur algorytmicznych mo\u017cna zbudowa\u0107 w oparciu o P\u0119tla while.<\/strong><\/p>\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>Spis tre\u015bci<\/h2><nav><ul><li class=\"\"><a href=\"#petla-while-definicja-formalna-semantyka-wykonania-oraz-rola-w-modelu-obliczen-imperatywnych\">P\u0119tla while &#8211; definicja formalna, semantyka wykonania oraz rola w modelu oblicze\u0144 imperatywnych<\/a><\/li><li class=\"\"><a href=\"#petla-while-skladnia-i-zachowanie-w-jezykach-c-c-oraz-python-z-uwzglednieniem-roznic-semantycznych\">P\u0119tla while &#8211; sk\u0142adnia i zachowanie w j\u0119zykach C, C++ oraz Python z uwzgl\u0119dnieniem r\u00f3\u017cnic semantycznych<\/a><ul><li class=\"\"><a href=\"#skladnia-w-c\">Sk\u0142adnia w C<\/a><\/li><li class=\"\"><a href=\"#skladnia-w-c-1\">Sk\u0142adnia w C++<\/a><\/li><li class=\"\"><a href=\"#skladnia-w-pythonie\">Sk\u0142adnia w Pythonie<\/a><\/li><\/ul><\/li><li class=\"\"><a href=\"#petla-while-mechanizmy-sterowania-przeplywem-break-continue-petle-nieskonczone-i-wariant-z-warunkiem-dynamicznym\">P\u0119tla while &#8211; mechanizmy sterowania przep\u0142ywem: break, continue, p\u0119tle niesko\u0144czone i wariant z warunkiem dynamicznym<\/a><ul><li class=\"\"><a href=\"#instrukcja-break\">Instrukcja break<\/a><\/li><li class=\"\"><a href=\"#instrukcja-continue\">Instrukcja continue<\/a><\/li><li class=\"\"><a href=\"#petla-sterowana-zdarzeniem\">P\u0119tla sterowana zdarzeniem<\/a><\/li><\/ul><\/li><li class=\"\"><a href=\"#inwariant-petli-i-poprawnosc-algorytmiczna-w-kontekscie-konstrukcji-while\">Inwariant p\u0119tli i poprawno\u015b\u0107 algorytmiczna w kontek\u015bcie konstrukcji while<\/a><\/li><li class=\"\"><a href=\"#roznice-miedzy-while-a-for-z-punktu-widzenia-kontroli-iteracji-i-czytelnosci-algorytmu\">R\u00f3\u017cnice mi\u0119dzy while a for z punktu widzenia kontroli iteracji i czytelno\u015bci algorytmu<\/a><\/li><li class=\"\"><a href=\"#typowe-bledy-logiczne-w-konstrukcjach-while-oraz-problemy-z-warunkiem-zakonczenia\">Typowe b\u0142\u0119dy logiczne w konstrukcjach while oraz problemy z warunkiem zako\u0144czenia<\/a><ul><li class=\"\"><a href=\"#1-petla-nieskonczona-przez-brak-modyfikacji-zmiennej\">1. P\u0119tla niesko\u0144czona przez brak modyfikacji zmiennej<\/a><\/li><li class=\"\"><a href=\"#2-blad-graniczny-off-by-one\">2. B\u0142\u0105d graniczny (off-by-one)<\/a><\/li><li class=\"\"><a href=\"#3-zmienna-modyfikowana-w-zlym-miejscu\">3. Zmienna modyfikowana w z\u0142ym miejscu<\/a><\/li><\/ul><\/li><li class=\"\"><a href=\"#zlozonosc-czasowa-algorytmow-opartych-na-while-oraz-analiza-liczby-iteracji\">Z\u0142o\u017cono\u015b\u0107 czasowa algorytm\u00f3w opartych na while oraz analiza liczby iteracji<\/a><\/li><li class=\"\"><a href=\"#zastosowania-praktyczne-petli-while-w-algorytmach-klasycznych\">Zastosowania praktyczne p\u0119tli while w algorytmach klasycznych<\/a><\/li><li class=\"\"><a href=\"#uwagi-praktyczne-dotyczace-czytelnosci-bezpieczenstwa-i-stabilnosci-kodu-z-uzyciem-while\">Uwagi praktyczne dotycz\u0105ce czytelno\u015bci, bezpiecze\u0144stwa i stabilno\u015bci kodu z u\u017cyciem while<\/a><\/li><\/ul><\/nav><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"petla-while-definicja-formalna-semantyka-wykonania-oraz-rola-w-modelu-obliczen-imperatywnych\">P\u0119tla while &#8211; definicja formalna, semantyka wykonania oraz rola w modelu oblicze\u0144 imperatywnych<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Na poziomie semantycznym p\u0119tla <code>while<\/code> jest konstrukcj\u0105 steruj\u0105c\u0105 typu pre-test loop. Oznacza to, \u017ce warunek zako\u0144czenia sprawdzany jest przed ka\u017cd\u0105 iteracj\u0105. Je\u015bli warunek jest fa\u0142szywy ju\u017c na pocz\u0105tku, cia\u0142o p\u0119tli nie zostanie wykonane ani razu.<\/p>\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\">Schemat dzia\u0142ania:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Obliczenie warto\u015bci wyra\u017cenia logicznego.<\/li>\n\n\n\n<li>Je\u015bli wynik to prawda (warto\u015b\u0107 niezerowa w C, <code>True<\/code> w Pythonie), wykonywany jest blok instrukcji.<\/li>\n\n\n\n<li>Po zako\u0144czeniu bloku sterowanie wraca do punktu sprawdzenia warunku.<\/li>\n\n\n\n<li>Proces powtarza si\u0119 a\u017c do momentu, gdy warunek przyjmie warto\u015b\u0107 fa\u0142sz.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Z punktu widzenia teorii oblicze\u0144 p\u0119tla <code>while<\/code> jest wystarczaj\u0105ca do zbudowania pe\u0142nej mocy obliczeniowej modelu imperatywnego. Wystarczy instrukcja przypisania, warunek oraz p\u0119tla <code>while<\/code>, aby zdefiniowa\u0107 dowolny algorytm obliczalny (w sensie maszyny Turinga).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Istotne jest zrozumienie, \u017ce:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>warunek jest wyra\u017ceniem,<\/li>\n\n\n\n<li>jego warto\u015b\u0107 jest obliczana przy ka\u017cdej iteracji,<\/li>\n\n\n\n<li>stan programu zmienia si\u0119 wewn\u0105trz cia\u0142a p\u0119tli.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Brak zmiany zmiennych wp\u0142ywaj\u0105cych na warunek prowadzi do p\u0119tli niesko\u0144czonej.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"petla-while-skladnia-i-zachowanie-w-jezykach-c-c-oraz-python-z-uwzglednieniem-roznic-semantycznych\">P\u0119tla while &#8211; sk\u0142adnia i zachowanie w j\u0119zykach C, C++ oraz Python z uwzgl\u0119dnieniem r\u00f3\u017cnic semantycznych<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"skladnia-w-c\">Sk\u0142adnia w C<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">#include &lt;stdio.h&gt;int main() {<br>    int i = 0;    while (i &lt; 5) {<br>        printf(\"%d\\n\", i);<br>        i++;<br>    }    return 0;<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">W j\u0119zyku C:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>warunek jest dowolnym wyra\u017ceniem liczbowym,<\/li>\n\n\n\n<li>warto\u015b\u0107 0 oznacza fa\u0142sz,<\/li>\n\n\n\n<li>ka\u017cda warto\u015b\u0107 r\u00f3\u017cna od 0 oznacza prawd\u0119.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Nie istnieje osobny typ logiczny w klasycznym C (C89). W C99 pojawi\u0142 si\u0119 <code>_Bool<\/code>, ale konstrukcja <code>while<\/code> nadal opiera si\u0119 na interpretacji warto\u015bci liczbowych.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"skladnia-w-c-1\">Sk\u0142adnia w C++<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">#include &lt;iostream&gt;int main() {<br>    int i = 0;    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<p class=\"wp-block-paragraph\">W C++ istnieje typ <code>bool<\/code>, jednak zasada dzia\u0142ania p\u0119tli pozostaje identyczna. Wyra\u017cenie jest konwertowane do typu logicznego.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"skladnia-w-pythonie\">Sk\u0142adnia w Pythonie<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">i = 0while i &lt; 5:<br>    print(i)<br>    i += 1<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">R\u00f3\u017cnice:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>brak nawias\u00f3w okr\u0105g\u0142ych wok\u00f3\u0142 warunku,<\/li>\n\n\n\n<li>blok definiowany przez wci\u0119cie,<\/li>\n\n\n\n<li>warunek musi by\u0107 wyra\u017ceniem logicznym (cho\u0107 liczby te\u017c s\u0105 interpretowane w kontek\u015bcie prawdy\/fa\u0142szu).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">W Pythonie:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>0, 0.0, pusty ci\u0105g, pusta lista \u2192 False,<\/li>\n\n\n\n<li>inne warto\u015bci \u2192 True.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"petla-while-mechanizmy-sterowania-przeplywem-break-continue-petle-nieskonczone-i-wariant-z-warunkiem-dynamicznym\">P\u0119tla while &#8211; mechanizmy sterowania przep\u0142ywem: break, continue, p\u0119tle niesko\u0144czone i wariant z warunkiem dynamicznym<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"instrukcja-break\">Instrukcja break<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Przerywa dzia\u0142anie p\u0119tli natychmiast.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">int i = 0;while (1) {<br>    if (i == 5) {<br>        break;<br>    }<br>    printf(\"%d\\n\", i);<br>    i++;<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Python:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">i = 0while True:<br>    if i == 5:<br>        break<br>    print(i)<br>    i += 1<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">P\u0119tla <code>while(1)<\/code> w C jest klasycznym sposobem tworzenia p\u0119tli niesko\u0144czonej.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"instrukcja-continue\">Instrukcja continue<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Powoduje przej\u015bcie do kolejnego sprawdzenia warunku bez wykonywania dalszej cz\u0119\u015bci cia\u0142a p\u0119tli.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">int i = 0;while (i &lt; 10) {<br>    i++;<br>    if (i % 2 == 0) {<br>        continue;<br>    }<br>    printf(\"%d\\n\", i);<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Python:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">i = 0while i &lt; 10:<br>    i += 1<br>    if i % 2 == 0:<br>        continue<br>    print(i)<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"petla-sterowana-zdarzeniem\">P\u0119tla sterowana zdarzeniem<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Cz\u0119sty przypadek: przetwarzanie danych a\u017c do spe\u0142nienia warunku wej\u015bciowego.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">int x;while (scanf(\"%d\", &amp;x) == 1) {<br>    printf(\"Wczytano: %d\\n\", x);<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Warunek jest zale\u017cny od funkcji wej\u015bcia. P\u0119tla ko\u0144czy si\u0119 przy b\u0142\u0119dzie lub EOF.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"inwariant-petli-i-poprawnosc-algorytmiczna-w-kontekscie-konstrukcji-while\">Inwariant p\u0119tli i poprawno\u015b\u0107 algorytmiczna w kontek\u015bcie konstrukcji while<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Inwariant p\u0119tli to warunek logiczny, kt\u00f3ry:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>jest prawdziwy przed pierwsz\u0105 iteracj\u0105,<\/li>\n\n\n\n<li>pozostaje prawdziwy po ka\u017cdej iteracji,<\/li>\n\n\n\n<li>wraz z negacj\u0105 warunku p\u0119tli implikuje poprawno\u015b\u0107 rozwi\u0105zania.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad: obliczanie silni.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Python:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">n = 5<br>i = 1<br>wynik = 1while i &lt;= n:<br>    wynik *= i<br>    i += 1print(wynik)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Inwariant:<br>Po ka\u017cdej iteracji <code>wynik<\/code> zawiera warto\u015b\u0107 <code>i-1<\/code> silni.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Analiza:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Pocz\u0105tkowo: i = 1, wynik = 1 \u2192 0! = 1 (zgodne).<\/li>\n\n\n\n<li>Ka\u017cdy krok zachowuje zale\u017cno\u015b\u0107.<\/li>\n\n\n\n<li>Po wyj\u015bciu: i = n+1, wi\u0119c wynik = n!.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Bez my\u015blenia w kategoriach inwariantu trudno formalnie uzasadni\u0107 poprawno\u015b\u0107.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"roznice-miedzy-while-a-for-z-punktu-widzenia-kontroli-iteracji-i-czytelnosci-algorytmu\">R\u00f3\u017cnice mi\u0119dzy while a for z punktu widzenia kontroli iteracji i czytelno\u015bci algorytmu<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>while<\/code> stosuje si\u0119 wtedy, gdy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>liczba iteracji nie jest znana z g\u00f3ry,<\/li>\n\n\n\n<li>zako\u0144czenie zale\u017cy od warunku dynamicznego,<\/li>\n\n\n\n<li>iteracja zale\u017cy od wej\u015bcia zewn\u0119trznego.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><code>for<\/code> stosuje si\u0119 gdy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>zakres iteracji jest z g\u00f3ry okre\u015blony,<\/li>\n\n\n\n<li>licznik jest naturalnym mechanizmem sterowania.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Ka\u017cd\u0105 p\u0119tl\u0119 <code>for<\/code> mo\u017cna zapisa\u0107 jako <code>while<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">for (int i = 0; i &lt; 5; i++) {<br>    printf(\"%d\\n\", i);<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">R\u00f3wnowa\u017cnik:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">int i = 0;<br>while (i &lt; 5) {<br>    printf(\"%d\\n\", i);<br>    i++;<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>while<\/code> jest bardziej og\u00f3lna. <code>for<\/code> jest wygodniejsza przy iteracjach licznikowych.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"typowe-bledy-logiczne-w-konstrukcjach-while-oraz-problemy-z-warunkiem-zakonczenia\">Typowe b\u0142\u0119dy logiczne w konstrukcjach while oraz problemy z warunkiem zako\u0144czenia<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"1-petla-nieskonczona-przez-brak-modyfikacji-zmiennej\">1. P\u0119tla niesko\u0144czona przez brak modyfikacji zmiennej<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">int i = 0;while (i &lt; 5) {<br>    printf(\"%d\\n\", i);<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Zmienne steruj\u0105ce musz\u0105 by\u0107 modyfikowane.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"2-blad-graniczny-off-by-one\">2. B\u0142\u0105d graniczny (off-by-one)<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">i = 0<br>while i &lt;= 5:<br>    print(i)<br>    i += 1<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Czy zakres mia\u0142 obejmowa\u0107 5 czy nie?<br>Takie b\u0142\u0119dy s\u0105 bardzo cz\u0119ste.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"3-zmienna-modyfikowana-w-zlym-miejscu\">3. Zmienna modyfikowana w z\u0142ym miejscu<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Zmiana kolejno\u015bci instrukcji mo\u017ce zmieni\u0107 wynik algorytmu.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"zlozonosc-czasowa-algorytmow-opartych-na-while-oraz-analiza-liczby-iteracji\">Z\u0142o\u017cono\u015b\u0107 czasowa algorytm\u00f3w opartych na while oraz analiza liczby iteracji<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Czas wykonania zale\u017cy od liczby iteracji.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad liniowy:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">i = 0<br>while i &lt; n:<br>    i += 1<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Liczba iteracji = n<br>Z\u0142o\u017cono\u015b\u0107: O(n)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad logarytmiczny:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">n = 1000while n &gt; 1:<br>    n = n \/\/ 2<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ka\u017cda iteracja dzieli przez 2.<br>Liczba iteracji \u2248 log\u2082(n).<br>Z\u0142o\u017cono\u015b\u0107: O(log n)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad kwadratowy:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">i = 0<br>while i &lt; n:<br>    j = 0<br>    while j &lt; n:<br>        j += 1<br>    i += 1<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Z\u0142o\u017cono\u015b\u0107: O(n\u00b2)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Analiza p\u0119tli <code>while<\/code> zawsze sprowadza si\u0119 do policzenia liczby wykona\u0144 cia\u0142a p\u0119tli.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"zastosowania-praktyczne-petli-while-w-algorytmach-klasycznych\">Zastosowania praktyczne p\u0119tli while w algorytmach klasycznych<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Algorytm Euklidesa<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">C:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">int a = 48;<br>int b = 18;while (b != 0) {<br>    int temp = b;<br>    b = a % b;<br>    a = temp;<br>}printf(\"NWD = %d\\n\", a);<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Wyszukiwanie liniowe<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Python:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">tab = [3, 7, 2, 9]<br>i = 0<br>szukane = 2<br>znaleziono = Falsewhile i &lt; len(tab):<br>    if tab[i] == szukane:<br>        znaleziono = True<br>        break<br>    i += 1<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Symulacje iteracyjne (np. metoda Newtona)<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">P\u0119tla dzia\u0142a do osi\u0105gni\u0119cia dok\u0142adno\u015bci.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"uwagi-praktyczne-dotyczace-czytelnosci-bezpieczenstwa-i-stabilnosci-kodu-z-uzyciem-while\">Uwagi praktyczne dotycz\u0105ce czytelno\u015bci, bezpiecze\u0144stwa i stabilno\u015bci kodu z u\u017cyciem while<\/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 modyfikowana w jednym miejscu.<\/li>\n\n\n\n<li>Warto unika\u0107 skomplikowanych wyra\u017ce\u0144 logicznych.<\/li>\n\n\n\n<li>W systemach wbudowanych p\u0119tle niesko\u0144czone wymagaj\u0105 \u015bwiadomego projektowania.<\/li>\n\n\n\n<li>Nale\u017cy uwa\u017ca\u0107 na przepe\u0142nienie liczb ca\u0142kowitych w warunku.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Dobr\u0105 praktyk\u0105 jest r\u0119czne prze\u015bledzenie pierwszych kilku iteracji na kartce.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">P\u0119tla while jest konstrukcj\u0105 fundamentaln\u0105, prost\u0105 sk\u0142adniowo, ale wymagaj\u0105c\u0105 precyzyjnego my\u015blenia o stanie programu, warunku zako\u0144czenia oraz liczbie iteracji. Jej poprawne zrozumienie jest podstaw\u0105 analizy algorytm\u00f3w i budowania stabilnych program\u00f3w.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>P\u0119tla while jest jedn\u0105 z podstawowych konstrukcji steruj\u0105cych przep\u0142ywem programu. Pozwala wielokrotnie wykonywa\u0107 okre\u015blony blok kodu tak d\u0142ugo, jak spe\u0142niony jest zadany warunek logiczny. Konstrukcja ta wyst\u0119puje praktycznie we wszystkich j\u0119zykach imperatywnych i proceduralnych, a jej poprawne rozumienie jest kluczowe dla pracy z algorytmami iteracyjnymi, przetwarzaniem danych wej\u015bciowych, obs\u0142ug\u0105 zdarze\u0144 oraz implementacj\u0105 wielu klasycznych metod obliczeniowych. W praktyce bardzo wiele struktur algorytmicznych mo\u017cna zbudowa\u0107 w oparciu o P\u0119tla while. P\u0119tla while &#8211; definicja formalna, semantyka wykonania oraz rola w modelu oblicze\u0144 imperatywnych Na poziomie semantycznym p\u0119tla while jest konstrukcj\u0105 steruj\u0105c\u0105 typu pre-test loop. Oznacza to, \u017ce warunek zako\u0144czenia sprawdzany jest przed ka\u017cd\u0105 iteracj\u0105. Je\u015bli warunek jest fa\u0142szywy ju\u017c na pocz\u0105tku, cia\u0142o p\u0119tli nie zostanie wykonane ani razu. Og\u00f3lna posta\u0107: while (warunek) { instrukcje;} Schemat dzia\u0142ania: Z punktu widzenia teorii oblicze\u0144 p\u0119tla while jest wystarczaj\u0105ca do zbudowania pe\u0142nej mocy obliczeniowej modelu imperatywnego. Wystarczy instrukcja przypisania, warunek oraz p\u0119tla while, aby zdefiniowa\u0107 dowolny algorytm obliczalny (w sensie maszyny Turinga). Istotne jest zrozumienie, \u017ce: Brak zmiany zmiennych wp\u0142ywaj\u0105cych na warunek prowadzi do p\u0119tli niesko\u0144czonej. P\u0119tla while &#8211; sk\u0142adnia i zachowanie w j\u0119zykach C, C++ oraz Python z uwzgl\u0119dnieniem r\u00f3\u017cnic semantycznych Sk\u0142adnia w C #include &lt;stdio.h&gt;int main() { int i = 0; while (i &lt; 5) { printf(&#8222;%d\\n&#8221;, i); i++; } return 0;} W j\u0119zyku C: Nie istnieje osobny typ logiczny w klasycznym C (C89). W C99 pojawi\u0142 si\u0119 _Bool, ale konstrukcja while nadal opiera si\u0119 na interpretacji warto\u015bci liczbowych. Sk\u0142adnia w C++ #include &lt;iostream&gt;int main() { int i = 0; while (i &lt; 5) { std::cout &lt;&lt; i &lt;&lt; std::endl; i++; } return 0;} W C++ istnieje typ bool, jednak zasada dzia\u0142ania p\u0119tli pozostaje identyczna. Wyra\u017cenie jest konwertowane do typu logicznego. Sk\u0142adnia w Pythonie i = 0while i &lt; 5: print(i) i += 1 R\u00f3\u017cnice: W Pythonie: P\u0119tla while &#8211; mechanizmy sterowania przep\u0142ywem: break, continue, p\u0119tle niesko\u0144czone i wariant z warunkiem dynamicznym Instrukcja break Przerywa dzia\u0142anie p\u0119tli natychmiast. C: int i = 0;while (1) { if (i == 5) { break; } printf(&#8222;%d\\n&#8221;, i); i++;} Python: i = 0while True: if i == 5: break print(i) i += 1 P\u0119tla while(1) w C jest klasycznym sposobem tworzenia p\u0119tli niesko\u0144czonej. Instrukcja continue Powoduje przej\u015bcie do kolejnego sprawdzenia warunku bez wykonywania dalszej cz\u0119\u015bci cia\u0142a p\u0119tli. C: int i = 0;while (i &lt; 10) { i++; if (i % 2 == 0) { continue; } printf(&#8222;%d\\n&#8221;, i);} Python: i = 0while i &lt; 10: i += 1 if i % 2 == 0: continue print(i) P\u0119tla sterowana zdarzeniem Cz\u0119sty przypadek: przetwarzanie danych a\u017c do spe\u0142nienia warunku wej\u015bciowego. int x;while (scanf(&#8222;%d&#8221;, &amp;x) == 1) { printf(&#8222;Wczytano: %d\\n&#8221;, x);} Warunek jest zale\u017cny od funkcji wej\u015bcia. P\u0119tla ko\u0144czy si\u0119 przy b\u0142\u0119dzie lub EOF. Inwariant p\u0119tli i poprawno\u015b\u0107 algorytmiczna w kontek\u015bcie konstrukcji while Inwariant p\u0119tli to warunek logiczny, kt\u00f3ry: Przyk\u0142ad: obliczanie silni. Python: n = 5i = 1wynik = 1while i &lt;= n: wynik *= i i += 1print(wynik) Inwariant:Po ka\u017cdej iteracji wynik zawiera warto\u015b\u0107 i-1 silni. Analiza: Bez my\u015blenia w kategoriach inwariantu trudno formalnie uzasadni\u0107 poprawno\u015b\u0107. R\u00f3\u017cnice mi\u0119dzy while a for z punktu widzenia kontroli iteracji i czytelno\u015bci algorytmu while stosuje si\u0119 wtedy, gdy: for stosuje si\u0119 gdy: Ka\u017cd\u0105 p\u0119tl\u0119 for mo\u017cna zapisa\u0107 jako while. C: for (int i = 0; i &lt; 5; i++) { printf(&#8222;%d\\n&#8221;, i);} R\u00f3wnowa\u017cnik: int i = 0;while (i &lt; 5) { printf(&#8222;%d\\n&#8221;, i); i++;} while jest bardziej og\u00f3lna. for jest wygodniejsza przy iteracjach licznikowych. Typowe b\u0142\u0119dy logiczne w konstrukcjach while oraz problemy z warunkiem zako\u0144czenia 1. P\u0119tla niesko\u0144czona przez brak modyfikacji zmiennej int i = 0;while (i &lt; 5) { printf(&#8222;%d\\n&#8221;, i);} Zmienne steruj\u0105ce musz\u0105 by\u0107 modyfikowane. 2. B\u0142\u0105d graniczny (off-by-one) i = 0while i &lt;= 5: print(i) i += 1 Czy zakres mia\u0142 obejmowa\u0107 5 czy nie?Takie b\u0142\u0119dy s\u0105 bardzo cz\u0119ste. 3. Zmienna modyfikowana w z\u0142ym miejscu Zmiana kolejno\u015bci instrukcji mo\u017ce zmieni\u0107 wynik algorytmu. Z\u0142o\u017cono\u015b\u0107 czasowa algorytm\u00f3w opartych na while oraz analiza liczby iteracji Czas wykonania zale\u017cy od liczby iteracji. Przyk\u0142ad liniowy: i = 0while i &lt; n: i += 1 Liczba iteracji = nZ\u0142o\u017cono\u015b\u0107: O(n) Przyk\u0142ad logarytmiczny: n = 1000while n &gt; 1: n = n \/\/ 2 Ka\u017cda iteracja dzieli przez 2.Liczba iteracji \u2248 log\u2082(n).Z\u0142o\u017cono\u015b\u0107: O(log n) Przyk\u0142ad kwadratowy: i = 0while i &lt; n: j = 0 while j &lt; n: j += 1 i += 1 Z\u0142o\u017cono\u015b\u0107: O(n\u00b2) Analiza p\u0119tli while zawsze sprowadza si\u0119 do policzenia liczby wykona\u0144 cia\u0142a p\u0119tli. Zastosowania praktyczne p\u0119tli while w algorytmach klasycznych C: int a = 48;int b = 18;while (b != 0) { int temp = b; b = a % b; a = temp;}printf(&#8222;NWD = %d\\n&#8221;, a); Python: tab = [3, 7, 2, 9]i = 0szukane = 2znaleziono = Falsewhile i &lt; len(tab): if tab[i] == szukane: znaleziono = True break i += 1 P\u0119tla dzia\u0142a do osi\u0105gni\u0119cia dok\u0142adno\u015bci. Uwagi praktyczne dotycz\u0105ce czytelno\u015bci, bezpiecze\u0144stwa i stabilno\u015bci kodu z u\u017cyciem while Dobr\u0105 praktyk\u0105 jest r\u0119czne prze\u015bledzenie pierwszych kilku iteracji na kartce. P\u0119tla while jest konstrukcj\u0105 fundamentaln\u0105, prost\u0105 sk\u0142adniowo, ale wymagaj\u0105c\u0105 precyzyjnego my\u015blenia o stanie programu, warunku zako\u0144czenia oraz liczbie iteracji. Jej poprawne zrozumienie jest podstaw\u0105 analizy algorytm\u00f3w i budowania stabilnych program\u00f3w.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1135,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1139","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/1139","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=1139"}],"version-history":[{"count":1,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/1139\/revisions"}],"predecessor-version":[{"id":1140,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/1139\/revisions\/1140"}],"up":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/1135"}],"wp:attachment":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media?parent=1139"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}