3.8.3. Оператор САSЕ

Обычно при написании программы не рекомендуется использовать многократно вложенные друг в друга условные операторы if — программа становится громоздкой и ее трудно понимать. Считается, что число уровней вложения не должно превышать двух-трех. Но как быть, если необходимо проверить достаточно много условий и в зависимости от них выполнять те или иные действия? Для этих целей в языке Тurbо Раsсаl существует специаль¬ный оператор выбора саsе.

Инструкция саsе имеет вид:

CASE выражение-селектор OF
      cписок 1 : begin оператор 1; end;
      cписок 2 : begin оператор 2; end;
      cписок N : begin оператор N; end
   ELSE
      begin оператор ; end;
   END;

Выполнение оператора саsе начинается с вычисления выражения-селектора. Инструкции между begin и end выполняются в том случае, если значение выражения после слова саsе совпадает с константой из соответствующего списка. Если это не так, то выполняются инструкции, идущие после е1sе, расположенные между begin и end. Если е1sе отсутствует, выполняется оператор программы, следующий за саsе.

Обратите внимание — в конце оператора саsе стоит ключевое слово end, для которого нет парного слова begin.

Например:

• селектор целочисленного типа:

CASE i OF
      1 : Z:=i+10;
      2 : Z:=i+100;
      3 : Z:=i+1000;
   END;

• селектор интервального типа:

CASE i OF
      1..10 : writeln (‘число’,i:4,’в диапазоне 1 – 10’);
      11..20 : writeln (‘число’,i:4,’в диапазоне 11–20’);
      21..30 : writeln (‘число’,i:4,’в диапазоне 21–30’)
   ELSE writeln (‘число вне диапазона’)
   END;

Следует знать:

• инструкция саsе является обобщением оператора if и используется для выбора одного из нескольких направлений дальнейшего хода программы;

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

• выражение-селектор должно иметь порядковый тип: чаще всего — integer, реже — char, bоо1еаn или один из пользовательских типов (см. разд. 2.1.2). Диапазон значений выражения-селектора от -32 768 до 32 767. Использование вещественного и строкового типа недопустимо;

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

• константы выбора внутри одного оператора выбора должны быть различны, в противном случае выполняется первая "подходящая" ветвь. В разных операторах выбора разрешается использовать одинаковые константы выбора;

• точка с запятой не ставится после последнего элемента списка выбора.

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

ЛИСТИНГ 3.11. Определение дня недели по известной дате

var d,m,у: integer; n: longint;
begin
    writeln('Введите день, месяц, год даты (например: 3 12 1964)');
    readln(d,m,у);
    if(m>=2)then m:=m+l
        else
            begin
                m:=m+13; y:=y-l;
            end;
    n:=trunc(365.25*y)+trunc(30.6*m)+d-621050; n:=n-trunc(n/7)*7+l;
    case n of
      1: write('понедельник');
      2: write ('вторник');
      3: write('среда');
      4: write('четверг');
      5: write('пятница');
      6: write('суббота');
      7: write('воскресенье');
    end; writeln;
end.

В листинге 3.21 приведен пример использования вложенных операторов саsе

 предыдущая         меню        вверх         следующая

Hosted by uCoz