Среда разработки Unimod PRO 2 (версия 2.3.40)
 Руководство по программированию
×

CASE


Оператор выбора CASE позволяет выполнять различные группы выражений в зависимости от одного целочисленного значения. Это значение может быть представлено переменной или выражением с результатом в виде целочисленной переменной (тип данных INTEGER), которые указываются после ключевого слова CASE.
Размещение после ключевого слова CASE целочисленной константы допускается, но не рекомендуется. В таком случае всегда будет выполняться одна группа выражений, что противоречит принципу выбора.
Синтаксис:
CASE <переменная или выражение> OF
<значение1>:
<выражение_1>;
...
<выражение_N>;
<значение2>:
<выражение_1>;
...
<выражение_N>;
…
<значение3,  значение4, значение5>:  <выражение>;
...
<начальное значение> .. <конечное значение>: <выражение>;
ELSE
<выражение_1>;
...
<выражение_N>;
END_CASE;
Выражения отделяются от значений символом двоеточия. В группе должно находиться минимум одно выражение, а их максимальное количество не ограничено.
Группа выражений может быть выполнена для нескольких значений, тогда необходимо перечислить значения через запятую или указать диапазон значений - начальное и конечное, разделенные двоеточием.
Алгоритм выполнения:
  • Проверяется наличие в списке значения, расположенного после ключевого слова CASE;
  • Если совпадение найдено, выполняется группа операторов после символа двоеточия для соответствующего значения;
  • Если ни одного совпадения не найдено, проверяется наличие необязательного ключевого слова ELSE;
  • Если слово ELSE присутствует, выполняется следующая после него группа выражений;
  • Если слово ELSE отсутствует, ни одно выражение не выполняется, выполнение оператора завершается.
Пример:
CASE (x + y) OF
1: flag: = true; z := 1;          //выполняется, если x+y=1
2: flag := true, z := 2;          //выполняется, если x+y=2
3, 4: flag := true; z := 3;      //выполняется, если x+y = 3 или 4
5 .. 10:  flag = true; z := 5;  //выполняется, если x+y = 5, 6, 7, 8, 9 или 10
ELSE
flag := false; z := 0;             //выполняется, если нет совпадений
END_CASE;