1. Вывести “Yes” или “No” в зависимости от того, точка с координатами x, y принадлежит области, ограниченной линиями y= –x, x=0 и y= –1, или нет (записать оператор if и операторы вывода).
if (y<= – x && x>= 0 && y>–1) cout<<"Yes";
else cout<<"No";
2. Нарисовать область плоскости, в которой и только в которой следующее логическое выражение истинно:
а) x>y && x<2 && y>-1; б) x>y || x<2 && y>-1;
в) x>y && x<2 || y>-1; г) x>y || x<2 || y>-1;
д) x>y && (x<2 || y>-1).
3. Даны два вещественных числа x, y. Вывести “Yes” или “No” в зависимости от того, точка плоскости с координатами (x, y) принадлежит кольцу, ограниченному окружностями, радиусы которых r и R (r<R) c общим центром в точке с координатами (a, b), или не принадлежит этому же кольцу.
4. Даны два вещественных числа x, y. Если точка плоскости с координатами (x, y) принадлежит треугольнику с вершинами в точках (–2, 0), (0, 2), (2, 0), то обе координаты увеличить в 10 раз, в противном случае уменьшить их на 10.
§ 4. Оператор выбора switch
Аналогичный оператор есть и в других языках (case в Pascal). Он используется, если уровень вложенности if достаточно большой (2.3). Тогда соответствующая часть программы при использовании switch становится более наглядной и легче для понимания и отладки.
Например, пусть дана z — оценка по “старой” 5-балльной системе. В зависимости от неё вывести текст “не явился”, если z=1, “не удовл.”, если z=2, “удовл.”, если z=3, и т. д.
// Первый вариант с помощью if:
if (z==1) cout<<”не явился”;
else if (z==2) cout <<”не удовл.”;
else if (z==3) cout <<”удовл.”;
else if (z==4) cout <<”хор.”;
else if (z==5) cout <<”отл.”;
else cout<<”Ошибка”;
// Второй вариант с оператором switch предпочтительнее:
switch (z)
{ case 1: cout<<”не явился”; break;
case 2: cout <<”не удовл.”; break;
case 3: cout <<”удовл.”; break;
case 4: cout <<”хор.”; break;
case 5: cout <<”отл.”; break;
default: cout<<”Ошибка ”;
} // Конец оператора switch.
// Здесь оператор, следующий после switch.
Работу оператора рассмотрим на нескольких тестах. Пусть z=1, тогда выводится “не явился” и с помощью break передаётся управление на оператор, следующий после switch, а остальные ветви пропускаются. Если, например, z=3, то первые две ветви пропускаются, выполняется cout <<”удовл.”; и break передаёт управление на оператор, следующий после switch. Если z не является оценкой, например, числом 30, то первые пять ветвей пропускаются, выводится “Ошибка” и выполняется оператор, следующий после switch.
Оператор switch имеет следующий общий вид:
switch (выражение)
{ case константное_выражение1:
последовательность_операторов1; break;
case константное_выражение2:
последовательность_операторов2; break;
…
case константное_выражениеN:
последовательность_операторовN; break;
default:
последовательность_операторов;
}
Выражение, записываемое после ключевого слова switch обязательно в скобках, может быть целого, символьного или перечисляемого типа. Чаще всего это просто целочисленная или символьная переменная. Нельзя использовать выражение вещественного или строкового типа. В константном выражении можно использовать константы, определённые одним из указанных в 3.1 способов, и нельзя записывать выражения, в том числе переменные или вызовы функций. Чаще всего здесь используется обычная целая или символьная константа.
Работает оператор следующим образом. Значения константных выражений вычисляются во время компиляции. Во время выполнения вычисляется значение выражения и сравнивается с первой константой на строгое равенство. Если не совпало, оно же сравнивается со второй константой и т. д. Если значение выражения совпало с одной из констант, выполняется соответствующая последовательность операторов, и break передаёт управление на оператор, следующий после switch. Если break отсутствует, то выполняется следующая последовательность операторов, хотя значение выражения и не совпадает со следующей константой. Обязательность break для пропуска остальных ветвей — основная особенность этого оператора по сравнению с другими языками. В случае отсутствия совпадений выполняются операторы, записанные после default, который необязателен. Если его нет, то в случае отсутствия соответствий ничего не выполняется.
В отличие от языка Pascal нельзя указать диапазон констант. Разрешается для нескольких констант указать одну и ту же последовательность операторов. Например, анализ оценок по 10-балльной системе будет выглядеть так:
switch (z){ case 1: case 2: case 3: cout <<”не удовл.” ; break;
case 4:
case 5: cout <<”удовл.”; break;
case 6: case 7: case 8: cout <<”хор.”; break;
case 9: case 10: cout <<”отл.” ; break;
default: cout<<”Ошибка ”;
}
При этом ключевые слова case желательно записывать в “столбик”, как это сделано во второй ветви.
Допускается вложенность операторов switch, когда в любой последовательности операторов используется другой оператор switch. Константы или значения константных выражений внутреннего и внешнего операторов switch могут совпадать. На одном уровне switch они должны быть различными. Допустима следующая часть программы:
char flag1, flag2; ……
switch (flag1)
{ case ‘A’: switch (flag2)
{ case ‘A’: cout<<”AA”; break;
case ‘B’: cout<<”AB”; }
break;
case ‘X’:
…
}