Pętle while
Poznaną już pętlę for
, najczęściej stosujemy z licznikem - pierwsze wyrażenie inicjuje stan początkowy licznika, warunek sprawdza stan aktualny licznika, natomiast drugie wyrażenie definiuje zmianę stanu licznika. Jak więc widzimy, taka postać określa z góry liczbę obiegów pętli. Często jednak zdarzają się sytuacje, kiedy musimy zastosować pętlę, nie wiedząc ile razy się ona wykona. Wystarczy wtedy określić warunek wykonania kolejnego obiegu pętli. Najprostszą pętlą sprawdzającą taki warunek jest while (warunek) instrukcja
, gdzie instrukcja
, może być pojedynczą instrukcją (w tym także pętlą) lub blokiem instrukcji. Rzuca się w oczy podobieństwo tej pętli do instrukcji if (warunek) instrukcja
:
if
z pętlą while
Instrukcja warunkowa if | Pętla while |
---|---|
Jeżeli warunek nie jest spełniony, to istrukcja nie wykona się ani razu |
Tak samo - jeżeli warunek nie jest spełniony, to istrukcja nie wykona się ani razu |
Jeżeli warunek jest spełniony, to istrukcja wykona się jeden raz |
Istrukcja jest wykonywana w pętli - dopiero wartość false warunku, kończy działanie pętli |
Działanie pętli while
najlepiej prześledzić wykonując ćwiczenia.
Ćwiczenie 1_12_2_1. Wszystkie liczby, mniejsze od danej liczby
Wyświetl po przecinkach, wszystkie liczby całkowite nieujemne, mniejsze od liczby wysłanej formularzem. Kod PHP realizujący, to zadanie:
<?php
$a=$_POST['liczba'];//odbieramy liczbę wysłaną formularzem
$m=0;//najmniejsza liczba nieujemna
echo 'Kolejne liczby całkowite mniejsze od '.$a.', to: <br />';
while ($m<$a)//pętla wykona się dla tego warunku
{
echo $m.', ';
$m++;
}
?>
Ćwiczenie 1_12_2_2. Liczba pokazana w odwrotnej kolejności cyfr
Liczbę całkowitą wysłaną formularzem, wyświetl w odwrotnej kolejności cyfr. Kod PHP realizujący, to zadanie:
<?php
$a=$_POST['liczba'];//odbieramy liczbę wysłaną formularzem
echo "Liczba $a napisana w odwrotnej kolejności cyfr, to ";
while ($a>0)
{
echo $a%10;//reszta z dzielenia przez 10 jest zawsze ostatnią cyfrą
$a=floor($a/10);//"odcinamy" ostatnią cyfrę liczby
/* floor() funkcja wbudowana zaokrąglająca liczbę rzeczywistą do
części całkowitej - np. echo floor(4.3); wyświetli 4,
echo floor(9.999);wyświetli 9*/
}
?>
Ćwiczenie 1_12_2_3. Zamiana liczby zapisanej w systemie dziesiętnym na dowolny inny system
Liczbę całkowitą nieujemną wysłaną formularzem, wyświetl w notacji wybranego systemu - dwójkowego, ósemkowego, itd. Przykładowy kod PHP realizujący, to zadanie:
<?php
1) function cyfra($wartosc)
2) {
3) $cyfry='0123456789ABCDEF';
4) return $cyfry[$wartosc];
5) }
6)
7) $liczba=$_POST['liczba'];
8) $podstawa=$_POST['podstawa'];
9)
10) if ($liczba==0) echo '0';
11) else if ($podstawa<2 || $podstawa>16) echo 'Podstawa musi być liczbą z przedziału 2..16 ';
12) else
13) {
14) echo $liczba.'<sub>10</sub> = ';
15) $nowa_liczba='';
16) while ($liczba>0)
17) {
18) $nowa_liczba.=cyfra($liczba%$podstawa);
19) $liczba=floor($liczba/$podstawa);
20) }
21) echo strrev($nowa_liczba).'<sub>'.$podstawa.'</sub>';
22) }
?>
Pokazany kod wymaga wytłumaczenia:
-
Do zamiany liczby z systemu dziesiętnego na dowolny inny wykorzystano następującą metodę:
13 | 1 6 | 0 3 | 1 1 | 1 0
-
Działanie funkcji
cyfra($wartosc)
zozumiesz, po zapoznaniu się z tablicami i operacjami wykonywanymi na stringach. Ta funkcja jest po to, aby reszty o wartości większej jak 9, zapisać w postaci odpowiednich liter: A, B, C, ...itd. - Zakładamy, że liczby możemy zamieniać na dowolny system o podstawie 2..16.
- Funkcja wbudowana
strrev()
odwraca kolejność znaków w stringu.
Jeżeli zapomniałeś jak przygotować i gdzie zapisywać pliki testowe: