Селектор в case инструкции множественного выбора это

«Программы без ошибок можно написать
двумя способами, но работает — третий»
Алан Джей Перлис

Приветствую вас на нашем очередном занятии. Сегодня урок будет посвящен оператору варианта Case.
Оператор Case — это оператор множественного ветвления. То есть в зависимости от некоторого условия может быть выполнено одно из многочисленных продолжений программы. Рассмотрим структуру оператора Case, а затем я поясню на бытовом примере, как это работает.

Case <селектор> of
    <константа 1> : <оператор 1>;
    <константа 2> : <оператор 2>;
    .............................
    <константа N> : <оператор N>;
    else <оператор>
end;

где Case — зарезервированное слово (от англ. «выбор», «вариант»);
<селектор> — выражение, исходя из значения которого будет выбран оператор из списка для дальнейшего выполнения;
of — зарезервированное слово (от англ. «из»);
<константа> — константа выбора;
<оператор> — любые операторы языка Pascal, в том числе может быть составной или пустой операторы;
else — зарезервированное слово (от англ. «иначе»). Если ни одна из констант не подошла к селектору, то будут выполнены операторы, следующие за else. Блок else не обязателен, поэтому если его нет, оператор case завершит свою работу, так и не выполнив ни одного оператора из списка;
end — зарезервированное слово (от англ. «конец»), завершение оператора варианта.

Разберем работу оператора Case на примере. Каждый из вас, прежде чем выйти на улицу одевает одежду. Выбор этой одежды во многом зависит от температуры на улице. Если на термометре -15, то вы наденете куртку, брюки и сапоги. А если на улице +20, ваш выбор будет состоять из майки, шорт и сандалий. Представьте, что термометр с его показаниями температуры — это своего рода <селектор> в программе. В роли <констант> выступают градусы цельсия, а в роли <операторов> ваш гардероб. Тогда программу, которая выбирает гардероб в зависимости от температуры, можно записать следующим образом:

program garderob;
var
   temperatura:integer;
begin
     write('Температура = ');
     read(temperatura);
     case temperatura of
      -24..-15 : writeln('Шапка-ушанка, фуфайка, ватные штаны, валенки');
      -14..0 : writeln('Шапка, теплая куртка, штаны, ботинки');
      1..10 :  writeln('Куртка, штаны, ботинки');
      11..17 : writeln('Ветровка, джинсы, кроссовки');
      18..25 : writeln('Кепка, майка, сандалии');
      26..35 : writeln('Плавки, маска, ласты');
      else writeln('Лучше остаться дома')
     end;
end.

Пользователь вводит значение температуры, если это значение расположено в интервале от -24 до +35 градусов цельсия, то программа находит среди констант ту, которая равна введенному значению, и выводит на экран список гардероба, соответствующий этой температуре. Если введенное значение температуры лежит за пределом от -24 до +35, то на экран выводится сообщение из блока else — ‘Лучше остаться дома’.

Несколько важных замечаний

  • Тип селектора должен быть ординальным. То есть он может быть любого типа, кроме вещественного Real (более подробно о типах данных читай здесь);
  • Тип константы должен совпадать с типом селектора. То есть, если у вас селектор имеет тип integer, то и константы выбора должны быть типа integer;
  • Каждое из постоянных значений должно быть сопоставлено самое большее с одним оператором. То есть, говоря простым языком, константы не должны повторяться;
  • Константы выбора НЕ являются метками. То есть на них нельзя ссылаться в операторе перехода goto (об этом операторе будет отдельный урок).

Примеры ошибочного написания оператора Case:

Пример №1 — селектор не может иметь тип real

program one;
var
   x:real;
begin
     read(x);
     case x of
     1 : writeln('one');
     2 : writeln('two');
     3 : writeln('three');
     4 : writeln('four');
     end;
end.

Пример №2 — тип констант не совпадает с типом селектора:

program two;
var
   x:integer;
begin
     read(x);
     case x of
     'A' : writeln('one');
     'B' : writeln('two');
     'C' : writeln('three');
     'D' : writeln('four');
     end;
end.

Пример №3 — повторение константы (константа 2 встречается два раза в списке):

program three;
var
   x:integer;
begin
     read(x);
     case x of
     1,2 : writeln('one');
     2,3 : writeln('two');
     4 : writeln('three');
     5..7 : writeln('four');
     end;
end.

Кстати, в этом примере наглядно показано, что <константа> может быть не только простым числом, но и представлять собой некий диапазон. Запись диапазона происходит следующим образом: <начало>..<конец> Также <константа> может быть задана перечисляемым списком. Такой список записывается через запятую, например (при x:integer):

case x of
  0, 1, 2 : <операторы 1>;
  3, 4, 5 : <операторы 2>;
  6, 9, 15 : <операторы 3>;
end;

через запятую и в одинарных кавычках (при x:char):

case x of
  'A', 'B', 'C' : <операторы 1>;
  'D', 'E', 'F' : <операторы 2>;
  'Monday', 'Tuesday', 'Wednesday' : <операторы 3>;
end;

Это все, о чем я хотел вам сегодня рассказать. Надеюсь, материал был понятен. Для закрепления навыков обязательно посетите раздел Практика, в нем собраны задачи по разным темам и даны готовые решения. Если возникли какие-то вопросы, не стесняйтесь задавать их, контакты для связи со мной находятся здесь. Если вопросов нет — жду вас на следующем уроке. Всего доброго!

В предыдущем примере, в программе
контроля веса, множественный выбор был
реализован при помощи вложенных одна
в другую инструкций if.
Та­кой подход не всегда удобен,
особенно в том случае, если количество
вари­антов хода программы велико.

В языке Delphi
есть инструкция case,
которая позволяет эффективно реали­зовать
множественный выбор. В общем виде она
записывается следующим образом:

case
Селектор
of

список1:
begin

{
инструкции
1 }

end;

список2:
begin

{
инструкции
2
}

end;

списокN:
begin

{
инструкции
N
}

end;

else

begin

{
инструкции
}

end;

end;

где:

селектор
выражение, значение
которого определяет дальнейший ход
выполнения программы (т. е. последовательность
инструкций, которая будет выполнена);

списокN
список констант.
Если константы представляют собой
диапа­зон чисел, то вместо списка
можно указать первую и последнюю
кон­станту диапазона, разделив их
двумя точками. Например, список 1, 2, 3,
4, 5, 6 может быть заменен диапазоном
1..6.

Выполняется инструкция
case
следующим образом:

1. Сначала вычисляется значение
выражения-селектора.

2. Значение выражения-селектора
последовательно сравнивается с
кон­стантами из списков констант.

3. Если значение выражения совпадает
с константой из списка, то выпол­няется
соответствующая этому списку группа
инструкций. На этом вы­полнение
инструкции case завершается.

4. Если значение выражения-селектора
не совпадает ни с одной констан­той
из всех списков, то выполняется
последовательность инструкций, следующая
за else.

Синтаксис инструкции case
позволяет не писать else
и соответствующую
последовательность инструкций. В этом
случае, если значение выражения не
совпадает ни с одной константой из всех
списков, то выполняется сле­дующая
за case
инструкция программы. На рис. 5.6 приведен
алгоритм, реализуемый инструкцией
case.

Рис. 5.6. Алгоритм, реализуемый инструкцией
Case

Ниже приведены примеры инструкции
case.

case
n_day of

1,2,3,4,5:
day:=’Рабочий день.’;

б:
day: =’Суббота!’;

7:
day:=’Воскресенье!’;

end;

case
n_day of

1..5:
day:=’Рабочий день.’;

6:
day:=’Суббота!’;

7:
day:=’Воскресенье!’;

end;

case
n_day of

6:
day:=’Суббота!’;

7:
day: = ‘Воскресенье!’;

else
day:=’Рабочий день.’;

end;

В качестве примера использования
инструкции case рассмотрим
програм­му, которая пересчитывает
вес из фунтов в килограммы. Программа
учиты­вает, что в разных странах
значение фунта разное. Например, в
России фунт равен 409,5 граммов, в Англии
– 453,592 грамма, а в Германии, Дании и
Исландии фунт весит 500 граммов.

В диалоговом окне программы, изображенном
на рис. 5.7, для выбора стра­ны используется
список Страна.

Рис. 5.7. Форма окна программы Пример
использования
case

Для выбора названия страны используется
список – компонент ListBox.
Значок компонента ListBox
находится на вкладке Standard.
До­бавляется список к форме приложения
точно так же, как и другие компо­ненты,
например, командная кнопка или поле
редактирования. В табл. 5.6 приведены
свойства компонента ListBox.

Таблица 5.6

Свойства компонента ListBox

Свойство

Определяет

Name

Имя компонента. В программе
используется для доступа к свойствам
компонента

Items

Элементы списка

ItemIndex

Номер выбранного элемента
списка. Номер первого элемента списка
равен нулю

Left

Расстояние от левой границы списка
до левой границы формы

Top

Расстояние от верхней
границы списка до верхней границы
формы

Height

Высоту поля списка

Width

Ширину поля списка

Font

Шрифт, используемый для
отображения элементов списка

ParentFont

Признак наследования свойств шрифта
родительской

формы

Наибольший интерес представляют
свойства items
и itemIndex.
Свойство items
содержит элементы списка. Свойство
itemIndex
задает номер выбранного элемента
списка. Если ни один из элементов не
выбран, то значение свойства равно
минус единице. Список может быть
сформирован во время создания формы
или во время работы программы.

Для формирования списка во время
создания формы надо в окне Object

Inspector
выбрать свойство items
и щелкнуть на кнопке запуска редактора
строк (рис. 5.8). В открывшемся диалоговом
окне String
List
Editor
(рис. 5.9) нужно вве­сти список, набирая
каждый элемент списка в отдельной
строке. После ввода очередного элемента
списка для перехода к новой строке
необходи­мо нажать клавишу <Enter>.
После ввода последнего элемента клавишу
<Enter>
нажимать не надо. Завершив ввод списка,
следует щелкнуть на кнопке ОК.

Рис.5.8. Кнопка запуска редактора строк

Рис.5.9. Окно редактора строк

В табл. 5.7 перечислены компоненты формы
приложения с указанием их назначения,
а в табл. 5.8 при­ведены значения
некоторых свойств этих компонентов,
используемых при работе приложения

Таблица 5.7

Компоненты формы

Компонент

Назначение

ListBox1

Для выбора страны, для которой надо
выполнить

пересчет

Edit1

Для ввода веса в фунтах

Label1,Label2,
Label3

Для вывода пояснительного текста о
назначении

полей
ввода

Label4

Для вывода результата пересчета

Button1

Для активизации процедуры пересчета
веса из

фунтов
в килограммы

Таблица
5.8

Значения свойств компонентов

Свойство

Значение

Form1.Caption

Пример использования
case

Edit1.Text

Label1.Caption

Выберите страну, введите
количество фунтов и щелкните на
кнопке Вычислить

Label2.Caption

Страна

Label3.Caption

Фунтов

Button1.Caption

Вычислить

Процедура пересчета, которая выполняется
в результате щелчка на команд­ной
кнопке Вычислить, умножает вес в
фунтах на коэффициент, равный количеству
килограммов в одном фунте. Значение
коэффициента определя­ется по номеру
выбранного из списка элемента [3].

В программе
используются две процедуры обработки
событий:

procedure
TForm1.FormCreate(Sender: TObject);

begin

{

ListBox1.items.add(‘Россия’);

ListBox1.items.add(‘Австрия’);

ListBox1.items.add(‘Англия’);

ListBox1.items.add(‘Германия’);

ListBox1.items.add(‘Дания’);

ListBox1.items.add(‘Исландия’);

ListBox1.items.add(‘Италия’);

ListBox1.items.add(‘Нидерланды’);

}

ListBox1.itemindex:=0;

end;

procedure
TForm1.Button1Click(Sender: TObject);

var

funt:real;
// вес в фунтах

kg:real;
// вес в килограммах

k:real;
// коэффициент пересчета

begin

k:=0;

case
ListBox1.ItemIndex of

0:
k:=0.4059; // Россия

1:
k:=0.453592;// Англия

2:
k:=0.56001; // Австрия

3..5,7:k:=0.5;
// Германия, Дания, Исландия, Нидерланды

6:
k:=0.31762; // Италия

end;

funt:=StrToFloat(Edit1.Text);

kg:=k*funt;

label4.caption:=Edit1.Text+
‘ фунт. — ‘

+
FloatToStrF(kg,ffFixed,6,3)+ ‘ кг.’;

end;

Следует обратить внимание на процедуру
обработки события FormCreate,
которое происходит в момент создания
формы (форма создается автомати­чески
при запуске программы). Эту процедуру
можно использовать для инициализации
переменных программы, в том числе и для
добавления эле­ментов в список. В
приведенном тексте программы инструкции
создания списка закомментированы, т.
к. список был создан при помощи редактора
строк во время создания формы.

Рассмотрим еще один пример использования
инструкции case.
При выводе числовой информации с
поясняющим текстом возникает проблема
согласо­вания выводимого значения
и окончания поясняющего текста.

Например, в зависимости от числового
значения поясняющий текст к де­нежной
величине может быть: «рубль», «рублей»
или «рубля» (123 рубля, 20 рублей, 121 рубль).
Очевидно, что окончание поясняющего
слова опре­деляется последней цифрой
числа, что отражено в табл. 5.9.

Таблица
5.9

Зависимость окончания текста от
последней цифры числа

Цифра

Поясняющий текст

0, 5, 6, 7, 8, 9

Рублей

1

Рубль

2,3,4

Рубля

Приведенное в таблице правило имеет
исключение для чисел, оканчивающихся
на 11, 12, 13, 14. Для них поясняющий текст
должен быть «рублей». Диалоговое окно
программы приведено на рис. 5.10.

Рис. 5.10. Диалоговое окно программы

Поясняющий
текст формирует процедура обработки
события OnKeyPress:

procedure
TForm1.Edit1KeyPress(Sender:TObject;var Key:Char);

var

n
: integer; // число

r
: integer; // остаток от
деления n на 10

text:
string[10]; // формируемый
поясняющий текст

begin

if
Key = chr(VK_RETURN) then

begin

n
:= StrToInt(Edit1.Text);

if
n > 100

then
r:=n mod 100;

if
( r >= 11) and ( r <= 14)

then

text:=’
рублей’

else

begin

r:=
n mod 10;

case
r of

1:
text:=’ рубль’;

2
.. 4: text:=’ рубля’;

else
text:=’ рублей’;

end;

end;

Label2.Caption
:= IntToStr(n)+ text;

end;

end;

Приведём пример полезных процедур, в
которых используется case.
Это процедуры обработки событий
KeyPress. Примеры
процедур запрета ввода недопустимых
символов для программы расчёта дохода
по вкладу. Первая процедура определяет
допустимость ввода символов, составляющих
целое число. Вторая – число вещественного
типа.

//
нажатие в поле срок

procedure
TForm1.Edit3KeyPress(Sender:TObject;var Key:Char);

begin

case
Key of

‘0’
.. ‘9’,#8:
; // цифры и <Backspace>

//перевод
фокуса управления на кнопку вычисления
стоимости

#13:
Button1.SetFocus { Summa(Edit3)} ;

else
Key := Chr(0); // символ
не
отображать

end;

end;

//
нажатие клавиши в поле Сумма

procedure
TForm1.Edit1KeyPress(Sender:TObject;var Key:Char);

begin

case
Key of

‘0’
.. ‘9’, #8 : ; //цифры и <Backspace>

#13:
Form1.Edit2.SetFocus; // <Enter>

‘.’,
‘,’:

begin

if
Key = ‘.’

then
Key:=’,’;

if
Pos(‘,’,Edit1.Text) <> 0

then
Key:=
Chr(0);

end;

else
// все остальные символы запрещены

Key
:= Chr(0);

end;

end;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

01.case

02.Селектор

03.of

04.список!:

05.begin

06.

07.

08.

09.

10.

11.end;

12.списокn:

13.begin

14.

15.end;

16.else

17.begin

18.

19.end;

20.end;

где: П Селектор — выражение, значение которого определяет дальнейший ход выполнения программы (т. е. последовательность инструкций, которая будет выполнена);

Управляющие структуры языка Delphi 99П Список n — список констант. Если константы представляют собой диапазон чисел, то вместо списка можно указать первую и последнюю константу диапазона, разделив их двумя точками. Например, список 1, 2, 3,4, 5, 6 может быть заменен диапазоном 1..6.

Выполняется инструкция case следующим образом:

  1.  Сначала вычисляется значение выражения-селектора.
  2.  Значение выражения-селектора последовательно сравнивается с кон-стантами из списков констант.
  3.  Если значение выражения совпадает с константой из списка, то выпол-няется соответствующая этому списку группа инструкций. На этом вы-полнение инструкции case завершается.
  4.  Если значение выражения-селектора не совпадает ни с одной констан-той из всех списков, то выполняется последовательность инструкций,следующая за else.

Синтаксис инструкции сазе позволяет не писать else и соответствующуюпоследовательность инструкций. В этом случае, если значение выраженияне совпадает ни с одной константой из всех списков, то выполняется следующая за case инструкция программы.

Ниже приведены примеры инструкции саsе: 

02.case n_day of

03.1,2,3,4,5: dау:='Рабочий день.'

04.6: day: = 'Суббота! ' ;

05.7: dау:='Воскресенье! ' ;

06.end;

07.case n_day of

08.1..5: dау:='Рабочий день.';

09.6: dау: = 'Суббота! ' ,-

10.7: dау:='Воскресенье! ' ;

11.end;

12.case n_day of

13.6: day: =' Суббота! ' ;

14.7: day:='Воскресенье!';

15.else day:='Рабочий день!' ;

16.end;

Помоги проекту! Расскажи друзьям об этом сайте:

Не редко встречаются такие задачи, где действие должно выполняться в зависимости от значения некоторого условия.

Реализовать это в программе без оператора выбора будет не так-то просто, хотя и не невозможно.

Поэтому знание и умение использовать оператор выбора Case важно в багаже знаний любого программиста.

Для начало определим, чем же является оператор вариантов ( выбора ).

Оператор выбора или вариантов Case

Оператор выбора Case – это форма условного оператора (А условные оператор, как нам уже известно, используется в разветвляющихся вычислительных процессах), используемая для множественного выбора.

Иногда оператор Case называют еще оператором множественного выбора. Верны оба названия. Суть от них не меняется.

Оператор выбора на блок-схеме

Оператор выбора Case

Основы оператора выбора Case

Определимся с основными понятиями, изображенными на блок-схеме.

Селектор – это переменная или выражение порядкового типа данных.

Может быть сложно для понимания, что такое порядковый тип данных, хотя это понятие схоже с математическим в некотором роде.

Порядковый тип данных – к нему относятся типы данных, каждому из значений которого, можно поставить соответственный порядковый номер.

К порядковому типу данных не относиться только вещественный тип (real).

Case <Селектор> Of 
  <Метка 1> : <Оператор 1> ;
  <Метка 2> : <Оператор 2> ;
  . . . . . . . . . . . .  ;
  <Метка N> : <Оператор N  ;
End;

В качестве меток используется одно из значений селектора.

Это значит, что селектор каким-то образом изменяет свое значение, а эти значения уже известны, и они уже присвоены меткам. В таком случае значение селектора совпадает с какой-либо меткой, и затем выполняется действие, указанное после метки.

Если действие должно выполняться при нескольких значениях селектора ( оператора case ), то допускается перечисление этих меток через запятую. ( Т.е. для одинаковых действий )

В операторе 
case можно использовать служебное слово else, если не выполняется ни одно действие по заданному значению селектора.

Case <Селектор > Of 
  <Метка 1> : <Оператор 1> ;
  <Метка 2> : <Оператор 2> ;
  . . . . . . . . . . . .. ;
  <Метка N> : <Оператор N>
  Else <Оператор N+1> ;
End;

Если после метки стоит не одни оператор, а несколько, то они заключаются в операторные скобки (begin end ;)

Предоставляю вашему вниманию задачу на вычисление суммы цифр в числе. Часто встречается такое условие в лабораторных работах.

Алгоритмическая структура ветвления программируется в языке Pascal с
помощью условного оператора.

Условный оператор позволяет проверить некоторое условие и в зависимости от
результатов проверки выполнить то или иное действие.

Таким образом, условный оператор – это средство ветвления вычислительного
процесса.

Условный оператор позволяет выбрать одно из двух действий. Существует 2
вида условного оператора:

1) if <условие> then <оператор
1> — неполная форма;

2) if <условие> then < оператор 1> else < оператор 2> — полная форма;

где if, then, else
зарезервированные слова («если», «то», «иначе»); оператор 1,оператор 2 – любые операторы языка Pascal.

Операторы бывают простые и составные.

Простой оператор состоит из одного оператора.

Если при некотором условии надо выполнить определенную последовательность
операторов, то их объединяют в один составной оператор. Составные операторы
заключаются в операторные скобки begin и end.

Условный оператор будет иметь вид:

if условие then begin …… end else begin …… end.

Пример.
Составить программу, определяющую наименьшее значение из двух чисел.

Program Minimum; Var a, b, min : real; begin writeln('Введите два числа'); write('a='); readln(a); write('b='); readln(b); if a< b then min:=a ELSE min:=b; writeln ('Минимальное из двух чисел ',min); end.

Вложенные операторы
ветвления

Когда после ключевых слов then или else
вновь используются условные операторы, они называются вложенными.
Число вложений может быть произвольно, при этом действует правило:else всегда относится к ближайшему оператору if, для которого ветка else еще не
указана, однако это можно изменить с помощью операторных скобок.


Оператор множественного ветвления (оператор выбора)

Условный оператор позволяет при выполнении программы выбирать одно из двух
возможных действий. Если же необходимо сделать много взаимоисключающих
проверок, то удобней воспользоваться оператором множественного ветвления
(оператор выбора).

Оператор выбора является обобщением условного оператора: он дает
возможность выполнить один из нескольких операторов в зависимости от
значения некоторого выражения, называемого селектором.

В общем случае оператор имеет вид:

case <селектор> of <метка 1>:<оператор 1>; <метка 2>:; ............................ <метка N>:<оператор N> else <оператор (n+1)>; end;

где case (выбор), of (из ), end (конец) – зарезервированные слова;

СЕЛЕКТОР – переменная или выражение порядкового типа;

ОПЕРАТОР – любой оператор языка, в том числе и составной;

МЕТКА – список значений выражения СЕЛЕКТОР или одно его значение.

Тип МЕТКИ совпадает с типом СЕЛЕКТОРА и состоит из любого числа отделенных
друг от друга запятыми констант или диапазонов, за которыми следует
двоеточие, например:

case berdsight of 'C','c': curlews := curlews+1; 'H','h': herons := herons+1; 'E','e': egrets := egrets+1; 'T','t': terns := terns+1; end;

Диапазоны записываются как две константы, отделенные друг от друга
разделителем диапазона ‘..’. MЕТКА ВАРИАНТА – необычная метка: это не
обязательно целое число, она не описывается в разделе label, на нее нельзя
ссылаться в операторе goto.

ОПЕРАТОР, который следует за МЕТКОЙ, выполняется, если значение СЕЛЕКТОРА
равно одной из констант или если он лежит внутри одного из диапазонов. В
противном случае будет выполняться оператор, следующий за case.

Селектор иногда называют ключом выбора.

Пример.
Определить день недели по его номеру.

program day; var n: integer; Begin write('введите число 1–7 n= '); readln(n); case n of 1: writeln('понедельник '); 2: writeln('вторник '); 3: writeln('среда '); 4: writeln('четверг '); 5: writeln('пятница '); 6: writeln('суббота '); 7: writeln('воскресенье'); else writeln('дня недели с номером ', n,' нет'); end; end

Следует помнить, что все константы из списка выбора должны быть различны.

Любому из операторов списка выбора может предшествовать не одна, а
несколько констант выбора, разделенных запятыми. Например, следующая
программа при вводе одного из символов ‘y’ или ‘Y’ выведет на экран «Да», а
при вводе ‘n’ или ‘N’ – слово «Нет».

Пример
программы с использованием Case of с несколькими переменными.

Program P1; Var ch: char; Begin Write('Введите значение переменной: '); Readln(ch); Case ch of 'N', 'n': writeln('Да '); 'Y', 'y': writeln('Нет '); End; End.

Пример
программы, которая по заданному символу определяет, к какой группе он
относится.

Program P2; Var c: char; Begin Write('Введите символ: '); Readln(c); case c of 'A'..'Z','a'..'z': writeln ('Латинская буква'); 'А'..'Я','а'..'п','р'..'я': writeln ('Русская буква'); '0'..'9': writeln ('Цифра'); else writeln ('Другой символ'); end; end

Просмотров 2.2к. Обновлено

Урок из серии: «Язык программирования Паскаль»

В этом уроке будет рассмотрено использование оператора выбора Select Case.

На предыдущем уроке было показано, как использовать оператор If … hten для выбора одного из двух возможных продолжений алгоритма.

Если один оператор If может обеспечить выбор из двух альтернатив, то оператор выбора case позволяет сделать выбор из произвольного числа имеющихся вариантов.

С помощью операторе If … them тоже можно организовать проверку более двух условий, если использовать вложенные операторы If … then, но запись с оператором Select Case получается более компактной и более понятной.

Оператор выбора case состоит из выражения, называемого селектором (selection — выбор альтернативы) и списка операторов, каждому из которых предшествует список констант выбора (список может состоять из одной константы).

case <выражение -селектор> of
   <список 1>: <оператор 1;>
   <список 2>: <оператор 2;>
   . . .
   <список n>: <оператор n;>
[else <оператор>]
end;

Здесь ветвь else заключается в квадратные скобки, что говорит о том, что эта часть  оператора выбора не обязательна.

Алгоритм выполнения оператора выбора:

  1. Вычисляется  выражение, которое должно принимать значение, принадлежащее порядковому типу (например, оно не может быть вещественного типа).
  2. В случае если результат вычисления равен одной из перечисленных констант, то выполняется соответствующий оператор. Затем управление передается за пределы оператора выбора.
  3. Если значение выражения не совпадает ни с одной константой, то выполняется оператор, стоящий после else, если он есть, либо управление передается на оператор end и выполнение программы продолжается.

Для одной альтернативы вместо одного оператора можно указать несколько операторов, заключив их в операторные скобки.

Правила использования оператора:

  1. Тип константы должен совпадать с типом выражения
  2. В этой конструкции перед else стоит точка с запятой.
  3. Все константы в альтернативах должны быть уникальны в пределах оператора выбора (т.е. повторение констант в альтернативах не допускается).

Урок 7. Оператор выбора Сase Пример 1. По введенному номеру дня недели вывести на экран его название.

program primer7_1;
var day:byte;
begin
  writeln('Введите номер дня недели: ');
  readln(day);
  case day of
    1: writeln('Понедельник');
    2: writeln('Вторник');
    3: writeln('Среда');
    4: writeln('Четверг');
    5: writeln('Пятница');
    6: writeln('Суббота');
  else
    writeln('Воскресенье');
  end;
end.

Урок 7. Оператор выбора СaseПример 2. В восточном календаре принят 60-летний цикл, состоящий из 12-летних подциклов, обозначаемых названиями цвета: зеленый, красный, желтый, белый и черный.

В каждом подцикле годы носят названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, курицы, собаки и свиньи.

По номеру года выведите его название, если 1984 год был началом цикла — годом зеленой крысы.

Восточный календарь

program case_a;
var k, ost_12, ost_10, god_n, god_k: integer;
       color, animal: string;
begin
writeln('Введите номер года:  ');
readln(god_k);
god_n := 1984;        // Начало цикла
k:= god_k - god_n+1;  // Порядковый номер года  в цикле
ost_12:= k mod 12;
ost_10:= k mod 10;

case ost_12 of
   1: animal:='крысы';
   2: animal:='коровы';
   3: animal:='тигра';
   4: animal:='зайца ';
   5: animal:='дракона';
   6: animal:='змеи';
   7: animal:='лошади';
   8: animal:='овцы';
   9: animal:='обезьяны ';
   10: animal:='курицы';
  11: animal:= 'собаки';
  0: animal:='свиньи';
end;

case ost_10 of
   1,2: if (ost_12=3) or (ost_12=4) then color:='зеленого' else color:='зеленой';
   3,4: if (ost_12=3) or (ost_12=4) then color:='красного' else color:='красной';
   5,6: if (ost_12=3) or (ost_12=4) then color:='желтого' else color:='желтой';
   7,8: if (ost_12=3) or (ost_12=4) then color:='белого' else color:='белой ';
   9,0: if (ost_12=3) or (ost_12=4) then color:='черного' else color:='черной';
end;
writeln('Год ', color, ' ', animal);
end.

Урок 7. Оператор выбора СaseПример 3. Составьте программу, которая по заданному году и номеру месяца определяет количество дней в этом месяце.

program case_b1;
var god, mes, k: integer;
begin
// Год является високосным в двух случаях: либо он кратен 4, но при этом не кратен 100, либо кратен 400.
writeln('Введите год и номер месяца:');
readln(god, mes);
case mes of
   1, 3, 5, 7, 8, 10, 12 : k:=31;
   4, 6, 9, 11: k:=30;
   2: if ((god mod 4 =0) and  (god mod 100 <> 0)) or (god mod 400 = 0) then k:=29 else k:=28;
else k:=0
end;
 If k<>0 then writeln('Кол-во дней в месяце:', k) else writeln('Неверный номер месяца.');
end.

Задания для самостоятельного выполнения

  1. Составьте программу, которая переводила бы арабские цифры в римские.
  2. Составить программу, которая по номеру месяца определяла время года.

В этом уроке было показано, как использовать оператор Select Case для выбора из нескольких вариантов.

ТестПроверь себя!

На следующем уроке Вы познакомитесь со средой программирования Pascal ABC.

Следующий урок:  Язык программирования Pascal ABC. Структура окна.

Понравилась статья? Поделить с друзьями:

Это тоже интересно:

  • Селективная среда для энтерококков ссэ инструкция
  • Селектив химия для волос инструкция
  • Селектив химическая завивка инструкция по применению
  • Селектив для волос ампулы инструкция по применению
  • Секрет бобра острый ум инструкция

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии