5. PHP – pętle oraz składnia alternatywna


Pętle

Instrukcje, które pozwalają wielokrotnie powtórzyć fragment programu nazywają się iteracjami lub pętlami. Pętle posiadają alternatywne składnie struktur sterujących – pierwszy nawias klamrowy pętli zamieniamy na : i zamiast ostatniego } piszemy odpowiednio endwhile;, endfor; lub endforeach;

Pętle for… i foreach…

Budowa pętli for wygląda następująco

for( inicjalizacja zmiennych; sprawdzenie warunku; modyfikacja zmiennych) 
{
   instrukcja1;
   instrukcja...;
}

Przykład 1: Napisz skrypt, który wyświetli 100 kolejnych liczb całkowitych począwszy od 3.

for ($i = 3; $i <= 100; $i++) 
{ 
	$text= $i; 
	if ($i < 100) $text.= ', '; //oddzielamy kolejne liczby przecikami, z wyjątkiem ostatniej
	echo $text; 
}

Przykład 2: Napisz skrypt, obliczający n! (n silnia).

$n = 5; 
if($n==0) echo $silnia=1; //$n jest równe zero, więc zwracamy jeden 
if($n==1) echo $silnia=1; //$n jest równe jeden, zwracamy jeden 
if($n>1) 
{ 
   $silnia= 1; 
   for($i=2; $i<=$n; $i++) 
   {
       $silnia *= $i; 
   } 
   echo $silnia; 
}

Przykład 3: Napisz skrypt, który za pomocą znaków * (gwiazdki) narysuje trójkąt.

define('X', 15); //liczba musi być nieparzysta
echo '<pre>';
for ($w = 1; $w <= X; $w++)
{
	for ($k = 1; $k <= X + $w; $k++)
	{
		if ($k == X + $w) echo "\n"; else
		if ($k > X - $w && $k < X + $w) echo '*';   
		else echo ' ';
	}
}
echo '</pre>';

Przykład 4: Napisz skrypt wyświetlający ciąg Fibonacciego i wypisz wartość ostatniego elementu.

$n = 10;  
if($n<=2) echo($n.' elementem ciagu Fibonacciego jest 1');
else
{
	$f1=0; //wartość pierwszego elementu
	$f2=1; //wartość drugiego elementu
	$temp; //zmienna pomocnicza
	for($i=2;$i<=$n;$i++)
	{
		$fn=$f1+$f2;
		$f1=$f2;
		$f2=$fn;
		echo $fn; if($i<$n) echo ' ';
	}
	echo(';<br>'.$n.' elementem ciagu Fibonacciego jest '.$f2);
}

Pętla for może operować na literach, zakres literowy jest podobny jak podział kolumn w Excelu

for ($i = 'a'; $i <= 'z'; $i++) 
{ 
echo $i.' '; 
}

Pętla for może mieć postać nieskończoną:

$i=1;
for (;;) { echo "<br/>wykonuję się ".$i++." raz";
if($i==11) break; }

Pętla for może przyjmować wiele warunków, będą one wykonywane po sobie

for ($i = 1, $j = 0; $i <= 10; $j += $i, print "i wynosi = $i, a j = $j<br/>", $i++);

Możemy z pętli wyciągnąć warunki:

for ($i = 1; ; $i++) {
    if ($i > 10) {
        break;
    }
    echo $i;
}

Pętla foreach służy do wykonywania operacji na kolejnych elementach tablicy.

$tablica=array('a' => 'jabłko', 'b' => 'banan', 'c' => 'gruszka');
foreach ($tablica as $wart) 
{ 
	echo $wart.'<br>'; 
}

jeżeli chcemy operować również na indeksach, możemy je pobrać:

$tablica=array('a' => 'jabłko', 'b' => 'banan', 'c' => 'gruszka');
foreach ($tablica as $klucz=>$wart) 
{ 
	echo $klucz.'->'.$wart.'<br>'; 
}

Pętle while…

Przykład 1: Wyświetl wszystkie liczby całkowite nieujemne, mniejsze od podanej liczby.

$x = 10; 
$min = 0; //najmniejsza liczba nieujemna
echo 'Liczby całkowite mniejsze od '.$x.', to: <br />';
while ($min < $x) //pętla wykona się dla tego warunku
{
   echo $min; if($min<$x-1) echo ' ';
   $min++;
}

Przykład 2: Napisz skrypt wyznaczający NWD (największy wspólny dzielnik).

$x = 15; 
$y = 10; 
$a=$x;
$b=$y;
while($a!=$b)
{
	if($a>$b) $a-=$b;
	else $b-=$a;
} 
$nwd = $a; // lub b - obie zmienne przechowują wynik NWD(a,b)       
echo('Dla a='.$x.' i b='.$y.' NWD = '.$nwd);

Pętle do… while…

Przykład 1: Napisz skrypt wyświetlający wszystkie liczby całkowite od zera do danej liczby.

$x = 15; 
$min = 0;
do
{
    echo $min; if($min<$x) echo ' ';
    $min++;
}
while ($min <= $x);

Zatrzymywanie pętli i skryptu

Działanie pętli lub skryptu możemy przerwać w dowolnej chwili lub możemy pominąć część instrukcji do wykonania:

  • instrukcja break; powoduje natychmiastowe wyjście z pętli
  • instrukcja continue; powoduje przeskoczenie do następnego obiegu pętli
  • instrukcja exit; powoduje zakończenie wykonywania skryptu

Przerywanie działania pętli za pomocą instrukcji break;

for ($i = 3; $i <= 100; $i++) 
{ 
    $text= $i; 
    if ($i <= 90) echo $text.' '; else break; //wypisze liczby tylko do 90ciu
}
echo '<br>ta instrukcja zostanie wykonana';

Przeskok do następnej iteracji (obiegu pętli) za pomocą instrukcji continue;

for ($i = 1; $i <= 100; $i++) 
{ 
    if ($i % 2 == 0) echo $i; else continue;
    if ($i < 100) echo ', ';
}

Przerywanie wykonywania skryptu za pomocą instrukcji exit;

for ($i = 3; $i <= 10; $i++) 
{ 
$text= $i; 
if ($i <= 9) echo $text.' '; else exit; //wypisze liczby tylko do 90ciu
}
echo '<br>ta instrukcja nie zostanie wykonana';

Zadania do samodzielnego wykonania:

Zadanie 1 (dla klas, które miały już HTMLa): Za pomocą pętli for stwórz tabelę w HTML składająca się z 2 wierszy i 10 kolumn.

Zadanie 1 (dla klas, które nie miały HTMLa): Za pomocą pętli for wypisz na ekranie dowolne znaki, tak aby układały się w 2 wiersze po 10 znaków.

Zadanie 2: Za pomocą pętli for, while i do… while napisz skrypt, który będzie zwiększał zmienną $i od 1 do 100 o 2, a następnie zmniejszał ją do 1 o 4.

Zadanie 3: Napisz skrypt, który dla zmiennej $n=10 i $n>0 będzie ją zmniejszał o 1 i wypisywał: wartości kwadratów zmiennej $n; następnie wartości kwadratów zmiennej $n dla $n parzystych.

Zadanie 4: Za pomocą pętli for, while i do… while napisz skrypt, który wypisze ilość iteracji pętli dla zmiennej $i<=10. Tam gdzie to możliwe zastosuj $i++, ++$i, $i- -, – -$i.

Zadanie 5: Napisz skrypt, który sprawdzi, czy podana liczba jest liczbą pierwszą.

Zadanie 6: Za pomocą pętli for stwórz tabliczkę mnożenia wg przykładu:

3

Zadanie 7: Napisz skrypt, który za pomocą znaków * (gwiazdki) narysuje kwadrat. Gwiazdki leżące na obwodzie mają mieć kolor niebieski, a gwiazdki leżące na przekątnych zielone.

Zadanie 8: Napisz skrypt, który po podaniu przez użytkownika promienia koła, za pomocą znaków * (gwiazdki), narysuje je.

Zadanie 9: Oblicz ilość bloków z jakich został zbudowany sześcian o boku długości 6.

Zadanie 10: Wyświetl kolejno liczby od 1 do 10 (każda w nowej linii). Wykorzystaj pętle for

Zadanie 11: Wyświetl liczby malejąco od 10 do 0. Użyj pętli for.

Zadanie 12: Wyświetl kolejno liczby od 10 do 0 z krokiem 0,5. Użyj pętli for.

Zadanie 13: Wyświetl: „PHP1 PHP2 PHP3 PHP4 PHP5 PHP6 PHP7 PHP8 PHP9 PHP10”. Użyj pętli while

Zadanie 14: Napisz skrypt z użyciem pętli do…while wyświetlający następującą listę:

• Element nr 1

• Element nr 2

• Element nr 3

• Element nr 4

Zadanie 15: Napisz skrypt sumujący wszystkie liczby nieparzyste z przedziału od 0 do 10. Użyj instrukcji continue.

Zadanie 16: Napisz skrypt wyświetlający: “1-2-3-5-6-7-8-9”. Użyj dowolnej pętli i instrukcji przerywającej (wykluczono wartość 4).

Zadanie 17: Napisz skrypt wyświetlający szachownicę.