Все ранее рассматриваемые программы имели линейную структуру: все инструкции выполнялись последовательно одна за одной, каждая записанная инструкция обязательно выполняется.
Допустим мы хотим по данному числу x определить его абсолютную величину (модуль). Для этого необходимо нарушить линейную логику программы. Программа должна напечатать значение переменной x, если x>0 или же величину -x в противном случае. Линейная структура программы нарушается: в зависимости от справедливости условия x>0 должна быть выведена одна или другая величина. Соответствующий фрагмент программы на C++ имеет вид:
double x;
cin>>x;
if (x>0)
{
cout<<x;
}
else
{
cout<<-x;
}
return 0;
В этой программе используется условная инструкция if (если). После слова if
в обязательных круглых скобках указывается проверяемое условие (x>0). После этого
в фигурных скобках идет блок (последовательность) инструкций, который будет выполнен,
если условие истинно, в нашем примере это вывод на экран величины x.
Затем идет слово else (иначе) и после него блок инструкций, который будет выполнен,
если проверяемое условие неверно.
Итак, условная инструкция в C++ имеет следующий синтаксис:
if (Условие)
{
Блок инструкций 1
}
else
{
Блок инструкций 2
}
Блок инструкций 1 будет выполнен, если Условие истинно. Если Условие ложно, будет выполнен Блок инструкций 2.
В условной инструкции может отсутствовать слово else
и последующий блок. Такая инструкция называется неполным ветвлением.
Например, если дано число x и мы хотим заменить его на абсолютную величину x,
то это можно сделать следующим образом:
if (x<0)
{
x=-x;
}
В этом примере переменной x будет присвоено значение -x, но только
в том случае, когда x<0.
Внутри условных инструкций можно использовать любые инструкции языка C++, в том числе и условную инструкцию. Получаем вложенное ветвление – после одной развилки в ходе исполнения программы появляется другая развилка. Покажем это на примере программы, которая по данным ненулевым числам x и y определяет, в какой из четвертей координатной плоскости находится точка (x,y):
double x,y;
cin>>x>>y;
if (x>0)
{
if (y>0) // x>0, y>0
{
cout<<"Первая четверть"<<endl;
}
else // x>0, y<0
{
cout<<"Четвертая четверть"<<endl;
}
}
else
{
if (y>0) // x<0, y>0
{
cout<<"Вторая четверть"<<endl;
}
else // x<0, y<0
{
cout<<"Третья четверть"<<endl;
}
}
В этом примере мы использовали комментарии – текст, который компилятор игнорирует.
Комментариями в C++ является последовательность символов // и весь текст после этого символа
до конца строки. Обратите также внимание на отступы в начале строк, используемые для облегчения
понимания текста.
В качестве проверяемого условия должно использоваться выражение логического типа bool.
Переменные логического типа принимают два значения: true (истина) и false (ложь).
Также любое целочисленное выражение можно трактовать, как логическое выражение,
при этом нулевое целое число означает ложь, а ненулевое — истину. Таким образом, если вместо
условия написать false или 0, то оно будет всегда ложно, если же указать true,
1 или любое ненулевое число, то условие будет истинно.
Как правило, в качестве проверяемого условия используется результат вычисления одного из следующих операторов сравнения:
<true, если первый операнд меньше второго.
>true, если первый операнд больше второго.
<=>===true, если два операнда равны.
!=true, если два операнда неравны.
Например, условие x*x<2 означает "значение x*x меньше 2",
а условие 2*x!=y означает "удвоенное значение переменной x
не равно значению переменной y".
Будьте аккуратны: оператор == (два знака равенства) —
это проверка на равенство двух выражений, а оператор =
(один знак равенства) — это присваивание одной переменной значения выражения
и использование его в условии оператора ветвления в большинстве случаев является ошибкой.
Иногда нужно проверить одновременно не одно, а несколько условий.
Например, проверить, является ли данное число четным можно при помощи
условия n%2==0 (остаток от деления n на 2 равен 0),
а если необходимо проверить, что два данных целых числа n и m являются
четными, необходимо проверить справедливость обоих условий: n%2==0
и m%2==0, для чего их необходимо объединить при помощи оператора &&
(логическое И): n%2==0 && m%2==0.
В C++ существуют стандартные логические операторы: логическое И, логическое ИЛИ, логическое отрицание.
Логическое И является бинарным оператором
(то есть оператором с двумя операндами: левым и правым)
и имеет вид && (два знака амперсанда).
Оператор && возвращает true тогда и только
тогда, когда оба его операнда имеют значение true.
Логическое ИЛИ является бинарным оператором и возвращает true тогда и только
тогда, когда хотя бы один операнд равен true. Оператор "логическое ИЛИ" имеет
вид || (два знака вертикальной черты).
Логическое НЕ (отрицание) является унарным (то есть с одним операндом)
оператором и имеет вид ! (восклицательный знак), за которым
следует единственный операнд. Логическое НЕ возвращает true,
если операнд равен false и наоборот.
Пример:
x && !y
Данное выражение означает "x И отрицание y" и равно true
тогда и только тогда, когда x равно true, а y равно false.
>, <, >=, <=)
необходимо для решения этой задачи?
YES, иначе выведите строку NO.
YES, если из первой клетки ходом
ладьи можно попасть во вторую или NO в противном случае.
sqrt,
для использования которой необходимо в начале программы
подключить заголовочный файл cmath.
Формат входных данных: три действительных числа.
Формат выходных данных: два действительных числа, если
уравнение имеет два корня, одно действительное число –
при наличии одного корня. При отсутствии действительных корней программа
не выводит ничего.
rectangular
для прямоугольного треугольника, acute для остроугольного треугольника,
obtuse для тупоугольного треугольника или impossible,
если входные числа не образуют треугольника.
korov, korova или korovy,
например, 1 korova, 2 korovy, 5 korov.
Между числом и пробелом должен стоять ровно один пробел.
0 1 2 (2 билета на 60 поездок и 1 билет на 10 поездок).