среда, 30 октября 2013 г.

Оператор Case

  Если оператор If и конструкция If then else, - предназначены для выбора одного из двух действий, то оператор Case
и конструкция Case of else - предназначены для выбора одного из любого количества вариантов. Перевести конструкцию Case... of... else... на русский язык, можно примерно так: Вариант... из... иначе... Понять что это все означает, нам поможет следующий пример. Работаем мы скажем с компонентом RadioGroup, со вкладки Standart и нам нужно, так его настроить, чтобы при выборе одной из скажем шести позиций c 1 по 5, переменная с принимала значения от 10 до 14, а при выборе шестой, срабатывало else и переменной присваивалось значение, скажем - 5.

   Для этого:

1) Кидаем на форму компоненты Label и RadioGroup;

2) Выбираем свойство Items у компонента RadioGroup, где прописываем позиции, от одного до шести, а свойство ItemIndex устанавливаем в 0, так-как нумерация строк в компоненте начинается с нуля;

3) Создаем обработчик событий RadioGroup1Click на RadioGroup где записываем следующее: 

var 
c:Integer; 
begin 
case Radiogroup1.ItemIndex of  
0: c:=10; 
1: c:=11; 
2: c:=12; 
3: c:=13; 
4: c:=14; 
else 
c:=5; 
end; 
Label1.Caption:=IntToStr(c); 
end; 

  Запускаем проект и наблюдаем, что если мы выбираем окошки с 1 по 5, для с присваивается значения от 10 до 14 соответственно, а если окошко 6 тогда 5. Прокомментировать происходящее можно примерно так, допустим мы установили галочку в четвертом по счету окошке:

1) В начале анализируется выражение стоящее за оператором Вариант (Case), это Radiogroup1.ItemIndex;

2) Затем просматривается ряд констант Из (of) этого оператора это: 0: c:=10; 1: c:=11; 2: c:=12; 3: c:=13; 4: c:=14; 

3) Если константа равная значению (какое именно из всех шести позиций - OnClick ) найдена, выполняется оператор стоящий за константой, в нашем случае c:=13;

4) Если константа равная значению (какое именно из всех шести позиций - OnClick ) не найдена, обработка передается оператору else - c:=5; В этом можно легко убедиться выделив шестое по счету окошко.

5) И только за тем обработчик выполняет действие Label1.Caption:=IntToStr(c); отображая содержимое переменной - с. Кстати, так же как и в If then else, применение слова else здесь - не является обязательным. При его отсутствии, когда ключу выбора нет соответствия, Case - просто прекращает работу. Еще один момент относительно синтаксиса. Если для нескольких вариантов нужно выполнять один и тот же оператор, то эти варианты можно перечислить через запятую. Давайте для закрепления материала, рассмотрим еще один не большой примерчик, где все это и разберем. Напишем программку, которая по нажатию клавиши Button будет определять четное или не четное число введено в Edit (ввод чисел от 1-10), выдавая при этом соответствующее сообщение. Для этого:

1) Кидаем на нашу форму два компонента Edit и Button;

2) В событии OnClick Button пишем наш код:

var 
a:Integer; 
begin
a:=StrToInt(Edit1.Text); 
Case a of // Анализруем a; 
0: ShowMessage('Ноль это ноль'); //Если a = 0, вывести сообщение - "Ноль - это ноль"; 
2,4,6,8,10: ShowMessage('Внимание!!! Введено четное число'); {Если a = 2 или 4 или 6 или 8 или 9 или 10, вывести сообщение - "Введено четное число";} 
1,3,5,7,9: ShowMessage('Внимание!!! Введено не четное число'); {Если a = 1 или 3 или 5 или 7 или 8 или 9, вывести сообщение - "Введено не четное число";}
end; 
end;

  Запускаем программу, вводим в наш Edit любое число от одного до десяти и нажимаем кнопку. Если вы внимательно изучили данную статью, то комментарии я думаю будут излишни. Теперь придумайте какой нибудь свой примерчик, и для пользы дела поэкспериментируйте с Case самостоятельно.

Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.