Pascaler
О проекте Теоретический материал Тестирование Архив задач
Войти в личный кабинет



О проекте


Преподавателям


Тема: Оператор выбора CASE. Решение задач.

Ранее Вы познакомились с условным оператором If, который позволяет программе выполнять переходы на ту или иную ветвь по значению булева условия. Используя несколько операторов If, можно производить ветвление по последовательности условий. В приведенном фрагменте показано, как при помощи ряда операторов If можно преобразовать целое число (в диапазоне 0-9) к его словесному представлению:

if Ziphra = 0
  then
    write (‘Нуль‘);
      if Ziphra = 1
        then
          write (‘Единица‘);
            if Ziphra = 2
              then
               write (‘Два‘);

и т.д.

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

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

Общая форма записи следующая:

case выражение of
значение1 : оператор (группа операторов);
значение2 : оператор (группа операторов);
. . . . . . . . . . . . . . . . . . . . . .
значениеN : оператор (группа операторов)
else оператор (группа операторов);
end;

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

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

Например,

case NUMBER mod 2 of
  0 : writeln (NUMBER, ‘- число четное‘)
else : writeln (NUMBER, ‘- число нечетное‘);
end;

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

case MONTH of
  1, 2, 3 : writeln (‘Первый квартал‘);
  4, 5, 6 : writeln (‘Второй квартал‘);
  7, 8, 9 : writeln (‘Третий квартал‘);
  10, 11, 12 : writeln (‘Четвёртый квартал‘);
end;

Оператором может являться не только простой оператор, но также составной и пустой операторы.

case CODE of
  1 : for i := 1 to 5 do
         writeln (‘*******‘);
  2 : begin {составной оператор}
         x:=sqr(y-1);
         writeln (x);
       end;
  3 : {пустой оператор}
       end;

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

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

case Chislo of
  0..9 : write (‘Это число является цифрой‘);

Посмотрите, в каких вариантах еще можно использовать оператор выбора при решении задачи.

Задача. Написать программу преобразования цифр в слова.

Program Number1;
Var
  a, b, c : integer;
Begin
  writeln(‘Введите цифру ‘);
  readln(a);
  if (a<0) or (a>9)
    then
      writeln (‘Это число не является цифрой‘)
    else
      case a of
        0 : writeln (‘ноль‘);
        1 : writeln (‘один‘);
        2 : writeln (‘два‘);
        3 : writeln (‘три‘);
        4 : writeln (‘четыре‘);
        5 : writeln (‘пять‘);
        6 : writeln (‘шесть‘);
        7 : writeln (‘семь‘);
        8 : writeln (‘восемь‘);
        9 : writeln (‘девять‘);
      end;
  readln;
End.

Program Number2;
Var
  a, b, c : integer;
Begin
  writeln(‘Введите цифру ‘);
  readln(a);
  case a of
    0 : writeln (‘ноль‘);
    1 : writeln (‘один‘);
    2 : writeln (‘два‘);
    3 : writeln (‘три‘);
    4 : writeln (‘четыре‘);
    5 : writeln (‘пять‘);
    6 : writeln (‘шесть‘);
    7 : writeln (‘семь‘);
    8 : writeln (‘восемь‘);
    9 : writeln (‘девять‘)
  else writeln (‘Это число не является цифрой‘);
  end;
  readln;
End.

Выберите с учителем задачи для самостоятельного решения.

  1. Написать алгоритм, позволяющий получить словесное наименование школьных оценок.


  2. Написать алгортм, классифицирующий треугольники (остроугольные, прямоугольные, тупоугольные), если даны углы.


  3. Написать алгоритм, который по номеру дня недели - целому числу от 1 до 7 выдавать в качестве результата количество уроков в классе в соответствующий день.


  4. Написать алгоритм нахождения числа дней в месяце, если даны: Номер месяца n - целое число а, равное 1 для високосного года и равное 0 в противном случае.


  5. По номеру дня недели вывести его название.


  6. В зависимости от того введена ли открытая скобка или закрытая, напечатать "открытая круглая скобка" или "закрытая фигурная скобка". (Учитывать круглые, квадратные, фигурные скобки).


  7. В зависимости от введённого символа L, S, V программа должна вычислять длину окружности; площадь круга; объём цилиндра.


  8. По введенному числу от 0 до 15 вывести название цвета, соответствующего этому коду.


  9. Определить, является ли введенная буква русского алфавита гласной.


  10. Написать программу, которая бы предлагала меню для вывода графических объектов, и рисовала бы соответствующий выбору.


  11. Придумайте шуточный тест с выдачей шуточных результатов.


  12. Напишите программу, которая по введенному числу из промежутка 0..24, определяет время суток.


  13. Напишите программу, которая по введенному номеру месяца високосного или невисокосного года, выводит количество дней в месяце.


  14. Вычислить значение функции по одной из формул:


  15. Придумайте программу на использование оператора выбора сase.
Вернуться назад
2003—2012 © Группа «Vimedia»
Проект «Pascaler» — лучший на ХI Всероссийской конференции молодых исследователей с международным участием «Шаг в будущее», Россия, Москва, 12 – 16 апреля 2004г.