L9. Instrukcja warunkowa Case.

Transkrypt

L9. Instrukcja warunkowa Case.
Instrukcja warunkowa Case.
Instrukcja wyboru jest strukturą sterowania. Realizacja instrukcji tej jednak wymusza pewne ograniczenia ilościowe.
Istnienie tego problemu sprawiło, Ŝe w Turbo Pascalu instrukcja wyboru jest udogodnieniem czysto notacyjnym, a nie strukturą
sterowania o szczególnie atrakcyjnych właściwościach operacyjnych. W przypadku tym procesor wykonuje ten sam ciąg
rozkazów, a kolejność elementów listy wyboru ma wpływ na sprawność programu.
Przypadkiem w programowaniu jest konieczność podjęcia kilku decyzji. W takich sytuacjach pomocna jest instrukcja
„Case”, jak równieŜ „if”, ale wówczas cierpi na tym czytelność programu. Instrukcja „Case” jest instrukcją warunkową, w której
podstawą podjęcia decyzji nie musi być wyraŜenie logiczne (jak w instrukcji „if”), lecz moŜe być dowolne wyraŜenie typu
porządkowego. Odpowiednio więcej jest teŜ moŜliwości wyboru.
Instrukcja ta posiada następującą składnię:
CASE wyraŜenie OF
wartość1 : Instrukcja1;
wartość2 : Instrukcja2;
...
END;
lub
CASE wyraŜenie OF
wartość1 : Intrsukcja1;
wartość2 : Instrukcja2;
...
ELSE Instrukcja3
End;
Działanie jej jest następujące: zostanie obliczone lub wpisane z klawiatury [wyraŜenie] i jeśli jest ono równe [wartość1]
zostanie wykonana [Instrukcja1], Jeśli wartość wyraŜenia jest równe [wartość2], zostanie wykonana [instrukcja2] itd. Jeśli
wynikiem wyraŜenia nie jest Ŝaden z podanych poniŜej wartości zostanie wykonana instrukcja znajdująca się po opcjonalnym
parametrze ELSE.
Po słowie kluczowym „Case” występuje wyraŜenie typu porządkowego np.
- znakowego
- całkowitego
- logicznego
W zaleŜności od tego jaką wartość przyjmuje wyraŜenie zostanie wykonana ta instrukcja, która jest poprzedzona wartością
równą temu wyraŜeniu. Jeśli dla kilku róŜnych wartości wyraŜenia ma zostać wykonana ta sama instrukcja to przed
dwukropkiem naleŜy umieścić te wartości oddzielając je przecinkami.
CASE z OF
`w`,
`n`,
ELSE
END;
{ z- jest typu Char}
`W`: Writeln (`wysoki`);
`N`: Writeln (`niski`);
Writeln (`nijaki`);
Instrukcja Case, która słuŜy do zastąpienia kodu, w którym została uŜyta funkcja If:
Program DuzoIfow;
Var
Wybor : ShortInt;
Begin
WriteLn('Menu:');
WriteLn(' 1. Otwórz plik');
WriteLn(' 2. Zapisz plik');
WriteLn(' 3. Przetwarzaj');
WriteLn(' 4. Zakończ');
Write('Twój wybór [1-4]: ');
ReadLn(Wybor);
If (Wybor=1) Then WriteLn('Wybrałeś 1 - Otwórz.');
If (Wybor=2) Then WriteLn('Wybrałeś 2 - Zapisz.');
If (Wybor=3) Then WriteLn('Wybrałeś 3 - Przetwarzaj.');
If (Wybor=4) Then WriteLn('Wybrałeś 4 - Zakończ.');
If (Wybor<1) Or (Wybor>4) Then
WriteLn('Nie wybrałeś niczego z listy :(');
End.
Takim:
Program BezIfow;
Var
Wybor : ShortInt;
Begin
WriteLn('Menu:');
WriteLn(' 1. Otwórz plik');
WriteLn(' 2. Zapisz plik');
WriteLn(' 3. Przetwarzaj');
WriteLn(' 4. Zakończ');
Write('Twój wybór [1-4]: ');
ReadLn(Wybor);
Case (Wybor) Of
1 : WriteLn('Wybrałeś 1 - Otwórz.');
2 : WriteLn('Wybrałeś 2 - Zapisz.');
3 : WriteLn('Wybrałeś 3 - Przetwarzaj.');
4 : WriteLn('Wybrałeś 4 - Zakończ.');
Else WriteLn('Nie wybrałeś niczego z listy :(');
End; { Koniec instrukcji Case }
End.
Warto zapamiętać sobie tę konstrukcje, bo niejednokrotnie pomoŜe nam w uczynieniu kodu bardziej przejrzystym (i
wydajniejszym).
ZADANIA DO WYKONANIA.
Zadanie 1.
Stwórz program wykonujący podstawowe działania matematyczne (+ - * /), wybrane przez uŜytkownika.
Zadanie 2.
Napisz program, ocena, który dla parametrów całkowitych zwraca ocenę słownie tzn., 1-niedostateczny, 2-dopuszczający, ale np.
0 lub - 7 nie ma takiej oceny.