POWRÓT NA STRONĘ SZKOŁY

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:

Tabela 1_12_2_1. Porównanie instrukcji 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
    
    Przykład pokazuje zamianę na system binarny liczby 13. Dzielimy całkowicie 13 przez 2 (podstawę systemu binarnego), resztę z dzielenia piszemy po prawej stronie kreski |, natomiast wynik piszemy pod daną liczbą. Czynność tę powtarzamy (pętla!) do chwili, gdy wynik dzielenia osiągnie zero. Wynikowa liczba będzie się składać z cyfr, które są resztami pisanymi od dołu w górę. Tak więc w tym przykładzie 1310=11012.
  • 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: