{"id":1004,"date":"2021-02-22T19:53:00","date_gmt":"2021-02-22T18:53:00","guid":{"rendered":"https:\/\/trzykody.pl\/?page_id=1004"},"modified":"2026-02-19T22:09:35","modified_gmt":"2026-02-19T21:09:35","slug":"petle","status":"publish","type":"page","link":"https:\/\/trzykody.pl\/index.php\/c\/petle\/","title":{"rendered":"P\u0119tle"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>P\u0119tla jest konstrukcj\u0105 steruj\u0105c\u0105 umo\u017cliwiaj\u0105c\u0105 wielokrotne wykonanie tego samego fragmentu kodu przy spe\u0142nieniu okre\u015blonego warunku. Bez p\u0119tli wi\u0119kszo\u015b\u0107 praktycznych program\u00f3w by\u0142aby nieefektywna lub wr\u0119cz niemo\u017cliwa do zapisania w rozs\u0105dnej formie. Mechanizm ten pozwala przetwarza\u0107 tablice, wykonywa\u0107 obliczenia iteracyjne, analizowa\u0107 dane wej\u015bciowe oraz implementowa\u0107 algorytmy numeryczne i kombinatoryczne. W kontek\u015bcie podstaw j\u0119zyk\u00f3w niskiego i \u015bredniego poziomu szczeg\u00f3lnie istotne s\u0105 P\u0119tle C\/C++ i ich rodzaje wst\u0119p do programowania.<\/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=\"#petle-w-programowaniu-jako-fundament-iteracyjnego-przetwarzania-danych-i-kontroli-przeplywu\">P\u0119tle w programowaniu jako fundament iteracyjnego przetwarzania danych i kontroli przep\u0142ywu<\/a><\/li><li class=\"\"><a href=\"#petle-c-c-i-ich-rodzaje-wstep-do-programowania-konstrukcja-while-i-kontrola-warunku-przed-wejsciem-do-ciala\">P\u0119tle C\/C++ i ich rodzaje wst\u0119p do programowania \u2013 konstrukcja while i kontrola warunku przed wej\u015bciem do cia\u0142a<\/a><ol><li class=\"\"><a href=\"#c\">C<\/a><\/li><li class=\"\"><a href=\"#c-1\">C++<\/a><\/li><li class=\"\"><a href=\"#python\">Python<\/a><\/li><\/ol><\/li><li class=\"\"><a href=\"#petle-c-c-i-ich-rodzaje-wstep-do-programowania-konstrukcja-do-while-i-gwarancja-co-najmniej-jednej-iteracji\">P\u0119tle C\/C++ i ich rodzaje wst\u0119p do programowania \u2013 konstrukcja do&#8230;while i gwarancja co najmniej jednej iteracji<\/a><\/li><li class=\"\"><a href=\"#petle-c-c-i-ich-rodzaje-wstep-do-programowania-konstrukcja-for-jako-syntetyczne-polaczenie-inicjalizacji-warunku-i-kroku\">P\u0119tle C\/C++ i ich rodzaje wst\u0119p do programowania \u2013 konstrukcja for jako syntetyczne po\u0142\u0105czenie inicjalizacji, warunku i kroku<\/a><ol><li class=\"\"><a href=\"#c-2\">C<\/a><\/li><li class=\"\"><a href=\"#c-3\">C++<\/a><\/li><li class=\"\"><a href=\"#python-4\">Python<\/a><\/li><\/ol><\/li><li class=\"\"><a href=\"#petle-programowanie-a-zaleznosc-miedzy-warunkiem-logicznym-i-typem-danych\">P\u0119tle: programowanie a zale\u017cno\u015b\u0107 mi\u0119dzy warunkiem logicznym i typem danych<\/a><\/li><li class=\"\"><a href=\"#petle-php-w-kontekscie-skladni-i-podobienstw-do-c\">P\u0119tle: php w kontek\u015bcie sk\u0142adni i podobie\u0144stw do C<\/a><\/li><li class=\"\"><a href=\"#petle-zagniezdzone-i-ich-znaczenie-w-algorytmach-dwuwymiarowych\">P\u0119tle zagnie\u017cd\u017cone i ich znaczenie w algorytmach dwuwymiarowych<\/a><\/li><li class=\"\"><a href=\"#instrukcje-break-i-continue-jako-mechanizmy-modyfikujace-przebieg-iteracji\">Instrukcje break i continue jako mechanizmy modyfikuj\u0105ce przebieg iteracji<\/a><\/li><li class=\"\"><a href=\"#typowe-pulapki-zwiazane-z-petlami-i-bledy-logiczne-poczatkujacych\">Typowe pu\u0142apki zwi\u0105zane z p\u0119tlami i b\u0142\u0119dy logiczne pocz\u0105tkuj\u0105cych<\/a><\/li><li class=\"\"><a href=\"#zaleznosc-miedzy-petla-a-zlozonoscia-obliczeniowa-algorytmu\">Zale\u017cno\u015b\u0107 mi\u0119dzy p\u0119tl\u0105 a z\u0142o\u017cono\u015bci\u0105 obliczeniow\u0105 algorytmu<\/a><\/li><li class=\"\"><a href=\"#uwagi-praktyczne\">Uwagi praktyczne<\/a><\/li><\/ol><\/nav><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"petle-w-programowaniu-jako-fundament-iteracyjnego-przetwarzania-danych-i-kontroli-przeplywu\">P\u0119tle w programowaniu jako fundament iteracyjnego przetwarzania danych i kontroli przep\u0142ywu<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">W modelu wykonania programu instrukcje wykonywane s\u0105 sekwencyjnie, od g\u00f3ry do do\u0142u. <strong>P\u0119tla w programowaniu<\/strong> wprowadza mo\u017cliwo\u015b\u0107 powrotu do wcze\u015bniejszej instrukcji bez u\u017cywania instrukcji skoku bezwarunkowego (np. <code>goto<\/code>). Z punktu widzenia teorii oblicze\u0144 p\u0119tla realizuje mechanizm iteracji, kt\u00f3ry wraz z instrukcj\u0105 warunkow\u0105 wystarcza do osi\u0105gni\u0119cia zupe\u0142no\u015bci Turinga.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>P\u0119tla<\/strong> sk\u0142ada si\u0119 z:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Warunku logicznego (predykatu),<\/li>\n\n\n\n<li>Cia\u0142a p\u0119tli (bloku instrukcji),<\/li>\n\n\n\n<li>Mechanizmu zmiany stanu wp\u0142ywaj\u0105cego na warunek.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">W praktyce najcz\u0119\u015bciej wyst\u0119puj\u0105 trzy podstawowe rodzaje:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>while<\/code><\/li>\n\n\n\n<li><code>do...while<\/code><\/li>\n\n\n\n<li><code>for<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Ka\u017cda z nich r\u00f3\u017cni si\u0119 momentem sprawdzania warunku oraz sposobem zapisu inicjalizacji i kroku iteracyjnego.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Iteracja oznacza jedno przej\u015bcie przez cia\u0142o p\u0119tli. Je\u015bli warunek pozostaje zawsze prawdziwy, powstaje p\u0119tla niesko\u0144czona. Jest to zar\u00f3wno narz\u0119dzie (np. w systemach wbudowanych), jak i cz\u0119sty b\u0142\u0105d pocz\u0105tkuj\u0105cych.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"petle-c-c-i-ich-rodzaje-wstep-do-programowania-konstrukcja-while-i-kontrola-warunku-przed-wejsciem-do-ciala\">P\u0119tle C\/C++ i ich rodzaje wst\u0119p do programowania \u2013 konstrukcja while i kontrola warunku przed wej\u015bciem do cia\u0142a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>P\u0119tla <code>while<\/code><\/strong> jest p\u0119tl\u0105 z warunkiem sprawdzanym przed wykonaniem cia\u0142a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sk\u0142adnia w C\/C++:<\/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\">Algorytm dzia\u0142ania:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Sprawdzenie warunku.<\/li>\n\n\n\n<li>Je\u015bli warunek jest prawdziwy (r\u00f3\u017cny od zera w C), wykonanie cia\u0142a.<\/li>\n\n\n\n<li>Powr\u00f3t do punktu 1.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad \u2013 wypisanie liczb od 0 do 4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"c\">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<h3 class=\"wp-block-heading\" id=\"c-1\">C++<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">#include &lt;iostream&gt;<br>using namespace std;int main() {<br>    int i = 0;    while (i &lt; 5) {<br>        cout &lt;&lt; i &lt;&lt; endl;<br>        i++;<br>    }    return 0;<br>}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"python\">Python<\/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\">Kluczowa obserwacja: je\u015bli <code>i<\/code> nie b\u0119dzie zwi\u0119kszane, warunek <code>i &lt; 5<\/code> nigdy nie stanie si\u0119 fa\u0142szywy i p\u0119tla b\u0119dzie niesko\u0144czona.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wa\u017cna zale\u017cno\u015b\u0107 logiczna: zmienna steruj\u0105ca musi by\u0107 modyfikowana w taki spos\u00f3b, aby prowadzi\u0107 do zako\u0144czenia p\u0119tli.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"petle-c-c-i-ich-rodzaje-wstep-do-programowania-konstrukcja-do-while-i-gwarancja-co-najmniej-jednej-iteracji\">P\u0119tle C\/C++ i ich rodzaje wst\u0119p do programowania \u2013 konstrukcja do&#8230;while i gwarancja co najmniej jednej iteracji<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">P\u0119tla <code>do...while<\/code> r\u00f3\u017cni si\u0119 tym, \u017ce warunek sprawdzany jest po wykonaniu cia\u0142a.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sk\u0142adnia w C\/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\">Schemat:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Wykonanie cia\u0142a.<\/li>\n\n\n\n<li>Sprawdzenie warunku.<\/li>\n\n\n\n<li>Je\u015bli prawdziwy \u2013 powr\u00f3t do punktu 1.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">#include &lt;stdio.h&gt;int main() {<br>    int i = 0;    do {<br>        printf(\"%d\\n\", i);<br>        i++;<br>    } while (i &lt; 5);    return 0;<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">R\u00f3\u017cnica wzgl\u0119dem <code>while<\/code> pojawia si\u0119 wtedy, gdy warunek pocz\u0105tkowo jest fa\u0142szywy. W <code>while<\/code> cia\u0142o nie wykona si\u0119 ani razu. W <code>do...while<\/code> wykona si\u0119 dok\u0142adnie raz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To rozwi\u0105zanie jest cz\u0119sto stosowane przy wczytywaniu danych, gdzie przynajmniej jedno odczytanie musi nast\u0105pi\u0107.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W Pythonie brak bezpo\u015bredniego odpowiednika <code>do...while<\/code>. Symuluje si\u0119 to poprzez:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">while True:<br>    x = int(input())<br>    if x &gt;= 0:<br>        break<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tutaj <code>break<\/code> zast\u0119puje warunek ko\u0144cowy.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"petle-c-c-i-ich-rodzaje-wstep-do-programowania-konstrukcja-for-jako-syntetyczne-polaczenie-inicjalizacji-warunku-i-kroku\">P\u0119tle C\/C++ i ich rodzaje wst\u0119p do programowania \u2013 konstrukcja for jako syntetyczne po\u0142\u0105czenie inicjalizacji, warunku i kroku<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">P\u0119tla <code>for<\/code> jest konstrukcj\u0105 zwart\u0105, w kt\u00f3rej inicjalizacja, warunek i krok znajduj\u0105 si\u0119 w jednym miejscu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sk\u0142adnia:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">for (inicjalizacja; warunek; krok) {<br>    instrukcje;<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Rozpisanie logiczne:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">inicjalizacja;<br>while (warunek) {<br>    instrukcje;<br>    krok;<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad \u2013 suma liczb od 1 do 5.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"c-2\">C<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">#include &lt;stdio.h&gt;int main() {<br>    int suma = 0;    for (int i = 1; i &lt;= 5; i++) {<br>        suma += i;<br>    }    printf(\"Suma = %d\\n\", suma);    return 0;<br>}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"c-3\">C++<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">#include &lt;iostream&gt;<br>using namespace std;int main() {<br>    int suma = 0;    for (int i = 1; i &lt;= 5; i++) {<br>        suma += i;<br>    }    cout &lt;&lt; \"Suma = \" &lt;&lt; suma &lt;&lt; endl;    return 0;<br>}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"python-4\">Python<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">suma = 0for i in range(1, 6):<br>    suma += iprint(\"Suma =\", suma)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">W Pythonie <code>for<\/code> dzia\u0142a inaczej semantycznie \u2013 iteruje po sekwencji, a nie w klasycznym sensie warunkowym. Jednak w podstawowych zastosowaniach pe\u0142ni t\u0119 sam\u0105 funkcj\u0119.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"petle-programowanie-a-zaleznosc-miedzy-warunkiem-logicznym-i-typem-danych\">P\u0119tle: programowanie a zale\u017cno\u015b\u0107 mi\u0119dzy warunkiem logicznym i typem danych<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">W j\u0119zykach C\/C++ warunek p\u0119tli jest wyra\u017ceniem ca\u0142kowitoliczbowym. Warto\u015b\u0107 0 oznacza fa\u0142sz, ka\u017cda inna \u2013 prawd\u0119. To ma konsekwencje:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">while (x) {<br>    ...<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u015bli <code>x<\/code> jest typu <code>int<\/code>, p\u0119tla dzia\u0142a dop\u00f3ki <code>x != 0<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cz\u0119sty b\u0142\u0105d:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">while (x = 5) {<br>    ...<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">To jest przypisanie, nie por\u00f3wnanie. Warunek zawsze jest prawdziwy (bo 5 \u2260 0). Powstaje p\u0119tla niesko\u0144czona.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Poprawnie:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">while (x == 5) {<br>    ...<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">W Pythonie nie ma takiego problemu, poniewa\u017c przypisanie nie jest wyra\u017ceniem logicznym.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"petle-php-w-kontekscie-skladni-i-podobienstw-do-c\">P\u0119tle: php w kontek\u015bcie sk\u0142adni i podobie\u0144stw do C<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">W PHP konstrukcje p\u0119tli s\u0105 niemal identyczne jak w C.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad <code>while<\/code> w PHP:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;?php<br>$i = 0;while ($i &lt; 5) {<br>    echo $i . \"\\n\";<br>    $i++;<br>}<br>?&gt;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad <code>for<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;?php<br>for ($i = 0; $i &lt; 5; $i++) {<br>    echo $i . \"\\n\";<br>}<br>?&gt;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">PHP r\u00f3wnie\u017c posiada <code>do...while<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">R\u00f3\u017cnica polega g\u0142\u00f3wnie na dynamicznym typowaniu. Warunek jest rzutowany na warto\u015b\u0107 logiczn\u0105 zgodnie z zasadami j\u0119zyka PHP.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"petle-zagniezdzone-i-ich-znaczenie-w-algorytmach-dwuwymiarowych\">P\u0119tle zagnie\u017cd\u017cone i ich znaczenie w algorytmach dwuwymiarowych<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">P\u0119tla zagnie\u017cd\u017cona to p\u0119tla wewn\u0105trz innej p\u0119tli.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad \u2013 tabliczka mno\u017cenia 3&#215;3 w C:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">#include &lt;stdio.h&gt;int main() {<br>    for (int i = 1; i &lt;= 3; i++) {<br>        for (int j = 1; j &lt;= 3; j++) {<br>            printf(\"%d \", i * j);<br>        }<br>        printf(\"\\n\");<br>    }    return 0;<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Liczba iteracji ca\u0142kowita to iloczyn liczby iteracji obu p\u0119tli. Je\u015bli obie maj\u0105 zakres <code>n<\/code>, z\u0142o\u017cono\u015b\u0107 wynosi O(n\u00b2).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To bezpo\u015brednio \u0142\u0105czy temat p\u0119tli z analiz\u0105 z\u0142o\u017cono\u015bci czasowej algorytm\u00f3w.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"instrukcje-break-i-continue-jako-mechanizmy-modyfikujace-przebieg-iteracji\">Instrukcje break i continue jako mechanizmy modyfikuj\u0105ce przebieg iteracji<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>break<\/code> \u2013 natychmiastowe wyj\u015bcie z p\u0119tli.<br><code>continue<\/code> \u2013 pomini\u0119cie reszty cia\u0142a i przej\u015bcie do nast\u0119pnej iteracji.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">for (int i = 0; i &lt; 10; i++) {<br>    if (i == 5)<br>        break;    printf(\"%d\\n\", i);<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Program wypisze 0\u20134.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>continue<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">for (int i = 0; i &lt; 5; i++) {<br>    if (i == 2)<br>        continue;    printf(\"%d\\n\", i);<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Wynik: 0, 1, 3, 4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nadu\u017cywanie <code>break<\/code> i <code>continue<\/code> mo\u017ce obni\u017cy\u0107 czytelno\u015b\u0107 kodu, szczeg\u00f3lnie w p\u0119tlach zagnie\u017cd\u017conych.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"typowe-pulapki-zwiazane-z-petlami-i-bledy-logiczne-poczatkujacych\">Typowe pu\u0142apki zwi\u0105zane z p\u0119tlami i b\u0142\u0119dy logiczne pocz\u0105tkuj\u0105cych<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>P\u0119tla niesko\u0144czona przez brak zmiany zmiennej steruj\u0105cej.<\/li>\n\n\n\n<li>B\u0142\u0105d zakresu (off-by-one), np. <code>i &lt;= n<\/code> zamiast <code>i &lt; n<\/code>.<\/li>\n\n\n\n<li>Modyfikowanie zmiennej steruj\u0105cej w kilku miejscach.<\/li>\n\n\n\n<li>U\u017cywanie typu <code>float<\/code> w warunku zako\u0144czenia \u2013 b\u0142\u0119dy zaokr\u0105gle\u0144.<\/li>\n\n\n\n<li>Przekroczenie zakresu tablicy w p\u0119tli.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad b\u0142\u0119du:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">for (int i = 0; i &lt;= 10; i++) {<br>    tab[i] = 0;<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u015bli tablica ma rozmiar 10, poprawny zakres to <code>0\u20139<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"zaleznosc-miedzy-petla-a-zlozonoscia-obliczeniowa-algorytmu\">Zale\u017cno\u015b\u0107 mi\u0119dzy p\u0119tl\u0105 a z\u0142o\u017cono\u015bci\u0105 obliczeniow\u0105 algorytmu<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Jedna p\u0119tla liniowa \u2192 O(n)<br>Dwie zagnie\u017cd\u017cone \u2192 O(n\u00b2)<br>Trzy \u2192 O(n\u00b3)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Zrozumienie tej zale\u017cno\u015bci jest kluczowe przy analizie wydajno\u015bci.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad: wyszukiwanie liniowe to pojedyncza p\u0119tla \u2013 O(n).<br>Sortowanie b\u0105belkowe \u2013 dwie p\u0119tle zagnie\u017cd\u017cone \u2013 O(n\u00b2).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">P\u0119tla nie jest tylko konstrukcj\u0105 sk\u0142adniow\u0105. Jest bezpo\u015brednim odzwierciedleniem kosztu obliczeniowego.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"uwagi-praktyczne\">Uwagi praktyczne<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Zawsze analizowa\u0107 warunek zako\u0144czenia przed uruchomieniem programu.<\/li>\n\n\n\n<li>Unika\u0107 skomplikowanych warunk\u00f3w logicznych w nag\u0142\u00f3wku p\u0119tli.<\/li>\n\n\n\n<li>W C\/C++ pilnowa\u0107 r\u00f3\u017cnicy mi\u0119dzy <code>=<\/code> i <code>==<\/code>.<\/li>\n\n\n\n<li>W algorytmach numerycznych unika\u0107 warunku <code>while (x != 0.0)<\/code>.<\/li>\n\n\n\n<li>W p\u0119tlach zagnie\u017cd\u017conych kontrolowa\u0107 z\u0142o\u017cono\u015b\u0107.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">P\u0119tla jest jedn\u0105 z podstawowych konstrukcji steruj\u0105cych i bez jej zrozumienia nie da si\u0119 pisa\u0107 poprawnych algorytm\u00f3w. W praktyce wi\u0119kszo\u015b\u0107 operacji na danych to iteracja w r\u00f3\u017cnych wariantach, a poprawne opanowanie mechaniki dzia\u0142ania p\u0119tli przek\u0142ada si\u0119 bezpo\u015brednio na jako\u015b\u0107 i wydajno\u015b\u0107 program\u00f3w.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>P\u0119tla jest konstrukcj\u0105 steruj\u0105c\u0105 umo\u017cliwiaj\u0105c\u0105 wielokrotne wykonanie tego samego fragmentu kodu przy spe\u0142nieniu okre\u015blonego warunku. Bez p\u0119tli wi\u0119kszo\u015b\u0107 praktycznych program\u00f3w by\u0142aby nieefektywna lub wr\u0119cz niemo\u017cliwa do zapisania w rozs\u0105dnej formie. Mechanizm ten pozwala przetwarza\u0107 tablice, wykonywa\u0107 obliczenia iteracyjne, analizowa\u0107 dane wej\u015bciowe oraz implementowa\u0107 algorytmy numeryczne i kombinatoryczne. W kontek\u015bcie podstaw j\u0119zyk\u00f3w niskiego i \u015bredniego poziomu szczeg\u00f3lnie istotne s\u0105 P\u0119tle C\/C++ i ich rodzaje wst\u0119p do programowania. P\u0119tle w programowaniu jako fundament iteracyjnego przetwarzania danych i kontroli przep\u0142ywu W modelu wykonania programu instrukcje wykonywane s\u0105 sekwencyjnie, od g\u00f3ry do do\u0142u. P\u0119tla w programowaniu wprowadza mo\u017cliwo\u015b\u0107 powrotu do wcze\u015bniejszej instrukcji bez u\u017cywania instrukcji skoku bezwarunkowego (np. goto). Z punktu widzenia teorii oblicze\u0144 p\u0119tla realizuje mechanizm iteracji, kt\u00f3ry wraz z instrukcj\u0105 warunkow\u0105 wystarcza do osi\u0105gni\u0119cia zupe\u0142no\u015bci Turinga. P\u0119tla sk\u0142ada si\u0119 z: W praktyce najcz\u0119\u015bciej wyst\u0119puj\u0105 trzy podstawowe rodzaje: Ka\u017cda z nich r\u00f3\u017cni si\u0119 momentem sprawdzania warunku oraz sposobem zapisu inicjalizacji i kroku iteracyjnego. Iteracja oznacza jedno przej\u015bcie przez cia\u0142o p\u0119tli. Je\u015bli warunek pozostaje zawsze prawdziwy, powstaje p\u0119tla niesko\u0144czona. Jest to zar\u00f3wno narz\u0119dzie (np. w systemach wbudowanych), jak i cz\u0119sty b\u0142\u0105d pocz\u0105tkuj\u0105cych. P\u0119tle C\/C++ i ich rodzaje wst\u0119p do programowania \u2013 konstrukcja while i kontrola warunku przed wej\u015bciem do cia\u0142a P\u0119tla while jest p\u0119tl\u0105 z warunkiem sprawdzanym przed wykonaniem cia\u0142a. Sk\u0142adnia w C\/C++: while (warunek) { instrukcje;} Algorytm dzia\u0142ania: Przyk\u0142ad \u2013 wypisanie liczb od 0 do 4. C #include &lt;stdio.h&gt;int main() { int i = 0; while (i &lt; 5) { printf(&#8222;%d\\n&#8221;, i); i++; } return 0;} C++ #include &lt;iostream&gt;using namespace std;int main() { int i = 0; while (i &lt; 5) { cout &lt;&lt; i &lt;&lt; endl; i++; } return 0;} Python i = 0while i &lt; 5: print(i) i += 1 Kluczowa obserwacja: je\u015bli i nie b\u0119dzie zwi\u0119kszane, warunek i &lt; 5 nigdy nie stanie si\u0119 fa\u0142szywy i p\u0119tla b\u0119dzie niesko\u0144czona. Wa\u017cna zale\u017cno\u015b\u0107 logiczna: zmienna steruj\u0105ca musi by\u0107 modyfikowana w taki spos\u00f3b, aby prowadzi\u0107 do zako\u0144czenia p\u0119tli. P\u0119tle C\/C++ i ich rodzaje wst\u0119p do programowania \u2013 konstrukcja do&#8230;while i gwarancja co najmniej jednej iteracji P\u0119tla do&#8230;while r\u00f3\u017cni si\u0119 tym, \u017ce warunek sprawdzany jest po wykonaniu cia\u0142a. Sk\u0142adnia w C\/C++: do { instrukcje;} while (warunek); Schemat: Przyk\u0142ad: #include &lt;stdio.h&gt;int main() { int i = 0; do { printf(&#8222;%d\\n&#8221;, i); i++; } while (i &lt; 5); return 0;} R\u00f3\u017cnica wzgl\u0119dem while pojawia si\u0119 wtedy, gdy warunek pocz\u0105tkowo jest fa\u0142szywy. W while cia\u0142o nie wykona si\u0119 ani razu. W do&#8230;while wykona si\u0119 dok\u0142adnie raz. To rozwi\u0105zanie jest cz\u0119sto stosowane przy wczytywaniu danych, gdzie przynajmniej jedno odczytanie musi nast\u0105pi\u0107. W Pythonie brak bezpo\u015bredniego odpowiednika do&#8230;while. Symuluje si\u0119 to poprzez: while True: x = int(input()) if x &gt;= 0: break Tutaj break zast\u0119puje warunek ko\u0144cowy. P\u0119tle C\/C++ i ich rodzaje wst\u0119p do programowania \u2013 konstrukcja for jako syntetyczne po\u0142\u0105czenie inicjalizacji, warunku i kroku P\u0119tla for jest konstrukcj\u0105 zwart\u0105, w kt\u00f3rej inicjalizacja, warunek i krok znajduj\u0105 si\u0119 w jednym miejscu. Sk\u0142adnia: for (inicjalizacja; warunek; krok) { instrukcje;} Rozpisanie logiczne: inicjalizacja;while (warunek) { instrukcje; krok;} Przyk\u0142ad \u2013 suma liczb od 1 do 5. C #include &lt;stdio.h&gt;int main() { int suma = 0; for (int i = 1; i &lt;= 5; i++) { suma += i; } printf(&#8222;Suma = %d\\n&#8221;, suma); return 0;} C++ #include &lt;iostream&gt;using namespace std;int main() { int suma = 0; for (int i = 1; i &lt;= 5; i++) { suma += i; } cout &lt;&lt; &#8222;Suma = &#8221; &lt;&lt; suma &lt;&lt; endl; return 0;} Python suma = 0for i in range(1, 6): suma += iprint(&#8222;Suma =&#8221;, suma) W Pythonie for dzia\u0142a inaczej semantycznie \u2013 iteruje po sekwencji, a nie w klasycznym sensie warunkowym. Jednak w podstawowych zastosowaniach pe\u0142ni t\u0119 sam\u0105 funkcj\u0119. P\u0119tle: programowanie a zale\u017cno\u015b\u0107 mi\u0119dzy warunkiem logicznym i typem danych W j\u0119zykach C\/C++ warunek p\u0119tli jest wyra\u017ceniem ca\u0142kowitoliczbowym. Warto\u015b\u0107 0 oznacza fa\u0142sz, ka\u017cda inna \u2013 prawd\u0119. To ma konsekwencje: while (x) { &#8230;} Je\u015bli x jest typu int, p\u0119tla dzia\u0142a dop\u00f3ki x != 0. Cz\u0119sty b\u0142\u0105d: while (x = 5) { &#8230;} To jest przypisanie, nie por\u00f3wnanie. Warunek zawsze jest prawdziwy (bo 5 \u2260 0). Powstaje p\u0119tla niesko\u0144czona. Poprawnie: while (x == 5) { &#8230;} W Pythonie nie ma takiego problemu, poniewa\u017c przypisanie nie jest wyra\u017ceniem logicznym. P\u0119tle: php w kontek\u015bcie sk\u0142adni i podobie\u0144stw do C W PHP konstrukcje p\u0119tli s\u0105 niemal identyczne jak w C. Przyk\u0142ad while w PHP: &lt;?php$i = 0;while ($i &lt; 5) { echo $i . &#8222;\\n&#8221;; $i++;}?&gt; Przyk\u0142ad for: &lt;?phpfor ($i = 0; $i &lt; 5; $i++) { echo $i . &#8222;\\n&#8221;;}?&gt; PHP r\u00f3wnie\u017c posiada do&#8230;while. R\u00f3\u017cnica polega g\u0142\u00f3wnie na dynamicznym typowaniu. Warunek jest rzutowany na warto\u015b\u0107 logiczn\u0105 zgodnie z zasadami j\u0119zyka PHP. P\u0119tle zagnie\u017cd\u017cone i ich znaczenie w algorytmach dwuwymiarowych P\u0119tla zagnie\u017cd\u017cona to p\u0119tla wewn\u0105trz innej p\u0119tli. Przyk\u0142ad \u2013 tabliczka mno\u017cenia 3&#215;3 w C: #include &lt;stdio.h&gt;int main() { for (int i = 1; i &lt;= 3; i++) { for (int j = 1; j &lt;= 3; j++) { printf(&#8222;%d &#8222;, i * j); } printf(&#8222;\\n&#8221;); } return 0;} Liczba iteracji ca\u0142kowita to iloczyn liczby iteracji obu p\u0119tli. Je\u015bli obie maj\u0105 zakres n, z\u0142o\u017cono\u015b\u0107 wynosi O(n\u00b2). To bezpo\u015brednio \u0142\u0105czy temat p\u0119tli z analiz\u0105 z\u0142o\u017cono\u015bci czasowej algorytm\u00f3w. Instrukcje break i continue jako mechanizmy modyfikuj\u0105ce przebieg iteracji break \u2013 natychmiastowe wyj\u015bcie z p\u0119tli.continue \u2013 pomini\u0119cie reszty cia\u0142a i przej\u015bcie do nast\u0119pnej iteracji. Przyk\u0142ad: for (int i = 0; i &lt; 10; i++) { if (i == 5) break; printf(&#8222;%d\\n&#8221;, i);} Program wypisze 0\u20134. continue: for (int i = 0; i &lt; 5; i++) { if (i == 2) continue; printf(&#8222;%d\\n&#8221;, i);} Wynik: 0, 1, 3, 4. Nadu\u017cywanie break i continue mo\u017ce obni\u017cy\u0107 czytelno\u015b\u0107 kodu, szczeg\u00f3lnie w p\u0119tlach zagnie\u017cd\u017conych. Typowe pu\u0142apki zwi\u0105zane z p\u0119tlami i b\u0142\u0119dy logiczne pocz\u0105tkuj\u0105cych Przyk\u0142ad b\u0142\u0119du: for (int i = 0; i &lt;= 10; i++) { tab[i] = 0;} Je\u015bli tablica ma rozmiar 10, poprawny zakres to 0\u20139. Zale\u017cno\u015b\u0107 mi\u0119dzy p\u0119tl\u0105 a z\u0142o\u017cono\u015bci\u0105 obliczeniow\u0105 algorytmu Jedna p\u0119tla liniowa \u2192 O(n)Dwie zagnie\u017cd\u017cone \u2192 O(n\u00b2)Trzy \u2192 O(n\u00b3) Zrozumienie tej zale\u017cno\u015bci jest kluczowe przy analizie wydajno\u015bci. Przyk\u0142ad: wyszukiwanie liniowe to pojedyncza p\u0119tla \u2013 O(n).Sortowanie b\u0105belkowe \u2013 dwie p\u0119tle zagnie\u017cd\u017cone \u2013 O(n\u00b2). P\u0119tla nie jest tylko konstrukcj\u0105 sk\u0142adniow\u0105. Jest bezpo\u015brednim odzwierciedleniem kosztu obliczeniowego. Uwagi praktyczne P\u0119tla jest jedn\u0105 z podstawowych konstrukcji steruj\u0105cych i bez jej zrozumienia nie da si\u0119 pisa\u0107 poprawnych algorytm\u00f3w. W praktyce wi\u0119kszo\u015b\u0107 operacji na danych to iteracja w r\u00f3\u017cnych wariantach, a poprawne opanowanie mechaniki dzia\u0142ania p\u0119tli przek\u0142ada si\u0119 bezpo\u015brednio na jako\u015b\u0107 i wydajno\u015b\u0107 program\u00f3w.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":968,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1004","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/1004","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=1004"}],"version-history":[{"count":1,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/1004\/revisions"}],"predecessor-version":[{"id":1006,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/1004\/revisions\/1006"}],"up":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/968"}],"wp:attachment":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media?parent=1004"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}