nextupprevious

Next:3.1.4 Доказательство свойств ветвящихся
Up:3.1 Средства для организации
Previous:3.1.2 Условный оператор


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

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

CaseStatement = case Expression of Case {"|" Case} [else StatementSequence] end.
Case = [CaseLabelList ":" StatementSequence].
CaseLabelList = CaseLabels {"," CaseLabels}.
CaseLabels = ConstExpression [".." ConstExpression].

Рис. 3.8. Синтаксис оператора выбора

В операторе выбора (см. рис. 3.8) также допускается несколько вариантов (альтернативных последовательностей операторов). При этом с каждым вариантом связывается свой (отличный от других) элемент разбиения всех возможных значений условия на непустые (попарно не пересекающиеся) подмножества так называемых меток вариантов. Условие должно быть целого типа, литерного типа или типа перечисления (см. гл. 4). При выполнении оператора выбора условие осуществляет выбор варианта -- выполняется тот альтернативный оператор, среди меток вариантов которого есть константа, совпадающая с текущим значением условия (если такой метки не окажется, то фиксируется ошибка в программе).

Например, оператор выбора

case X of
    '=' : K:=0
    |'*', ' + ' : K:=1
    |'-' : K:=2
else K:=3
end

равносилен оператору

if X = ' = ' then K := 0
elsif (X = '*') or (X = '+') then K := 1
elsif X = '-' then K := 2
else K:=3
end.

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

module ПечатьДня;
    var Номер : integer;
begin
    read (Номер);
    if (Номер < 1) or (Номер > 7)
    then write ('Ошибка в номере!')
    else
        case Номер of
            1: write ('ПОНЕДЕЛЬНИК')
            | 2: write ('ВТОРНИК')
            | 3: write ('СРЕДА')
            | 4: write ('ЧЕТВЕРГ')
            | 5: write ('ПЯТНИЦА')
            | 6: write ('СУББОТА')
            | 7: write ('ВОСКРЕСЕНЬЕ')
        end
end ПечатьДня.

Это же вычисление можно осуществить следующим образом:

module ПечатьДня1;
    var Номер : integer;
begin
    read (Номер);
    case Номер of
            1: write ('ПОНЕДЕЛЬНИК');
            | 2: write ('ВТОРНИК')
            | 3: write ('СРЕДА')
            | 4: write ('ЧЕТВЕРГ')
            | 5: write ('ПЯТНИЦА')
            | 6: write ('СУББОТА')
            | 7: write ('ВОСКРЕСЕНЬЕ')
    else write ('Ошибка в номере!')
    end
end ПечатьДня1.

Next:3.1.4 Доказательство свойств ветвящихся
Up:3.1 Средства для организации
Previous:3.1.2 Условный оператор



© В.Н. Касьянов, Е.В.Касьянова, 2004