While

Juhas

Instrukcja While ... Do (nazywana petlą "dopóki")

Zastosowanie pętli while ... do jest wykorzystywane w powtarzajacych się instrukcjach. W instrukcji while ... do warunek jest sprawdzany przed jej wykonaniem, a działanie kończy się w przypadku zwrócenia fałszu (czyli False) przez porównywane wyrażenie.

Postać instrukcji przedstawia się następująco:

while {Warunek do spełnienia} do
  { instrukcje }

Napiszmy prosty program prezentujący zastosowanie tej pętli, którego działanie polega na pobieraniu hasła dostępu przedstawiony jest poniżej. Jeżeli hasło będzie błędne, pętla zostanie wykonana po raz drugi; jeżeli hasło będzie poprawne ? nastąpi zakończenie działania programu:

program WhileLoop;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  Password : String; // deklaracja zmiennej

begin

  while Password <> 'delphi' do
  begin
    Writeln('Podaj hasło...');
    Readln(Password);
  end;

  Writeln('Hasło poprawne!');
  Readln;
end.

Omówię pokrótce działanie tego programu. Na samym początku umieszczamy warunek:

while Password <> 'delphi' do

Za jego pomocą sprawdzamy, czy zmienna Password jest różna od delphi ? jeżeli tak, następuje wykonanie instrukcji pętli znajdującej się w bloku Begin..End. Jeżeli wpisane hasło jest niepoprawne, wykonywana zostaje kolejna iteracja. W przeciwnym przypadku pętla kończy swoje działanie.

Należy pamiętać, że pętla while nie zwiększa tzw. licznika, jak to robi pętla For. Musimy o tym pamiętać sami.

Po co stosować pętle while?

  1. Pętla while (w odróżnieniu od for) sprawdza warunek logiczny. Czyli jeśli warunek jest prawdziwy, to wykonaj iterację
  2. Pętla while (w odróżnieniu od Repeat..Until) sprawdza warunek na samym początku, wniosek z tego taki, że nie zawsze się wykona, np:
begin
//...jakiś kod
 zmienna := true;
//...jakiś inny kod
 while zmienna=false do
   begin
     if a<>b then a:=a+1;
     if a=50 then zmienna:=true;
   end;
end;

W połączeniu z pętla while możemy stosować operatory logiczne, jak np. Not:

while not {warunek} do { instrukcje } 

Zobacz też:

1 komentarz

Hmm... Trochę niezbyt trafiony ten pierwszy przykład. W takiej sytuacji najlepszą do zastosowania jest pętla for. Przykład powinien być tak skonstruowany, by przedstawiać sytuację, w której pętla while jest najwygodniejsza, a nie taki przykład na siłę.
P.S. Od czego są linki? Po to Coyote oparty jest o system w stylu Wiki, by każde słowo kluczowe, jakie tylko się da było linkiem do odpowiedniego arta (nawet, jeśli w chwili obecnej nie istnieje!).