Składnia języka » Instrukcje warunkowe

Case

  • 2010-10-31 18:27
  • 8 komentarzy
  • 1278 odsłon
  • Oceń ten tekst jako pierwszy
case - słowo kluczowe rozpoczynające właściwą instrukcję warunkową

Słowo case wraz z of tworzą instrukcję warunkową (case..of). Może być używana jako
zamiennik instrukcji warunkowych If ... Then. Stosuje się ją w przypadku mało efektywnego wykorzystania instrukcji if ... then, tzn. gdy należy sprawdzić większą liczbę możliwych warunków.

Instrukcja case ma to do siebie, że działa jedynie na typach wyliczeniowych jak Char, Byte, Integer, Cardinal itp., nie można jej na przykład użyć aby sprawdzić zawartość zmiennej typu String.

Składnia instrukcji Case ... Of:

case wyrażenie of
  wybór 1: (kod);
  ...
  wybór n: (kod);
  else
  (kod)
end;


Przykład użycia instrukcji Case ... Of:

case RadioGroup1.ItemIndex of
  0: IdFTP1.TransferType := ftAscii;
  1: IdFTP1.TransferType := ftBinary;
end;


Zakresy


Dużą zaletą instrukcji case..of jest możliwość sprawdzania wartości ?od ? do?. Przykładowo, jeżeli wartość zmiennej Mandat zawiera się między 10 a 15, zostanie wykonana konkretna czynność. Oto przykład takiego programu:

program Foo;
 
{$APPTYPE CONSOLE}
 
var
  Mandat : Integer;
 
begin
  Randomize;
  Mandat := Random(50)+1; // dodajemy 1, aby nie zostało wylosowane 0
 
  case Mandat of
    1..10: Writeln('E, 10 zł. Może jeszcze zapłacę?');
    11..20: Writeln('20 zł ? nie będę miał na chleb!');
    21..50: Writeln('50 zł ? Panie władzo... może dogadamy się w inny sposób?');
  end;
 
  Readln;
end.


Dzięki zastosowaniu zakresów pierwsza instrukcja zostanie zrealizowana w przypadku, gdy zmienna Mandat będzie miała wartość od 1 do 10.

Kilka instrukcji


W instrukcji case..of możemy również zawierać, więcej niż jedną instrukcję dla każdej wartości lub zakresu wartości zmiennej. Aby to zrobić instrukcja case..of wymaga od nas umieszczenia kodu w bloku begin..end. Oto przykład takiej konstrukcji:

program Foo_2;
 
{$APPTYPE CONSOLE}
 
var
  Mandat : Integer;
 
begin
  Randomize;
  Mandat := Random(50)+1; // dodajemy 1, aby nie zostało wylosowane 0
 
  case Mandat of
    1..10: Writeln('E, 10 zł. Może jeszcze zapłacę?');
    11..20: Writeln('20 zł ? nie będę miał na chleb!');
    21..50:
    begin 
      Writeln('50 zł ? Panie władzo... może dogadamy się w inny sposób?');
      Writeln('Co ja powiem żonie?');
    end;
  end;
 
  Readln;
end.


W powyższym kodzie w przypadku wystąpnia ostatniego z podanych zakresów wykonają się dwie instrukcje.

Słowo kluczowe else w instrukcji case..of


Słowo kluczowe else umożliwia nam zareagowanie gdy żaden ze sprawdzanych warunków nie zostanie spełniony. Po słowie kluczowym else zapisujemy instrukcje, które mają się wykonać w przypadku gdy zmienna przyjmie inną, nieprzewidzianą wartość. Oto przykład takiego zapisu:

program Foo_3;
 
{$APPTYPE CONSOLE}
 
var
  Mandat : Integer;
 
begin
  Randomize;
  Mandat := Random(100)+1; // dodajemy 1, aby nie zostało wylosowane 0
 
  case Mandat of
    1..10: Writeln('E, 10 zł. Może jeszcze zapłacę?');
    11..20: Writeln('20 zł ? nie będę miał na chleb!');
    21..50:
    begin
      Writeln('50 zł ? Panie władzo... może dogadamy się w inny sposób?');
      Writeln('Co ja powiem żonie?');
    end; //<-- ten średnik nie jest konieczny
    else Writeln('Tym razem tylko pouczenie.'); //po else nie stawiamy dwukropka
  end;
 
  Readln;
end.


Zobacz też:

8 komentarzy

Patryk27 2010-01-22 19:49

@lankusiek:
Spróbuj tak:

//TYLKO JEŻELI: I < 0
I := I + (I * 2); //Odwrócenie liczby (tak na szybko myślałem)
Case I Of
 5: Writeln('-5'); //Ponieważ cyfra była odwrócona: 5 = -5
 //Itd...
End;
I := I - (I * 2); //Odwrócenie liczby (spowrotem)

Oczywiście I to Integer, Extended, Float, itp.

lankusiek 2009-06-18 23:06

A co z wartościami ujemnymi ?
i:integer;
begin
case i of
-1..-99: funkcja1;

tak się niestety nie da:/

Marooned 2006-10-18 19:19

Domyśliłem się 5s później ale jako od dawna nie delfiarz, arta nie tykałem ;)

Berus123 2006-10-18 17:58

Case costam of
1: Begin
     funkcja1;
     funkcja2;
    End;
2:funkcja3;
end;

Marooned 2006-10-18 05:52

Wszędzie na sieci [nawet u nas] jest przykład z jedną instrukcją dla każdego wyboru. A co, jak chcę tam dać więcej? Niestety, jak to w Pascalu bywa, intuicja tu zawodzi, bo takie coś nie działa:

case costam of
  1: funkcja1; funkcja2;
  2: funkcja3;
end;

Jojersztajner 2006-08-30 10:17

<quote>

    21..50: Writeln('50 zł ? Panie władzo... może dogadamy się w inny sposób?');
</quote>
łapówka? :D

Przydałoby się też napisać o rekordach-uniach - tam też jest wykorzystywane case.

Adam.Pilorz 2005-12-20 22:53

Jak dla mnie, to brakuje tu jeszcze else. W instrukcji Case można użyć else tak jak w innych językach np. default czy tym podobnych.

rk7771 2005-12-20 22:09

Dobre poprawki !