На этом шаге мы рассмотрим применение условной операции.
В языке C++ существует оригинальная операция, обозначаемая:
Условие ? Выражение_1 : Выражение_2.
Эта операция содержит три операнда. Сначала вычисляется значение выражения Условие. Если значение отлично от нуля (истинно), то вычисляется значение выражения Выражение_1, которое и становится значением условной операции. В противном случае вычисляется значение выражения Выражение_2 становится значением условного выражения.
Каждый раз вычисляется одно из выражений Выражение_1 или Выражение_2.
Примеры.
Условную операцию удобно использовать в тех случаях, когда имеется некоторая переменная, которой можно присвоить одно из двух возможных значений. Например: x = (y<0) ? -y : y;. Значением переменной x становится абсолютная величина значения y.
Пример 1.
#include<iostream.h> main () { int x,y,z,r; x = y=z=1; x += y+=z; r = x<y?y:x; /* Операции 1 */ cout<<r<<" "; r = x<y?x++:y++; /* Операции 2 */ cout<<r<<" "; cout<<x<<" "; cout<<y<<" "; z += x<y?x++:y++; /* Операции 3 */ cout<<z<<" "; cout<<y<<" "; cout<<x<<" "; x = 3; y = z=4; r = (z>=y>=x)?1:0; /* Операции 4 */ cout<<r<<" "; r = z>=y&&y>=x; /* Операции 5 */ cout<<r<<" "; }
В результате получаем:
3 2 3 3 4 4 3 0 1
Комментарии.
x=3; y=2; z=1; r = x<y?y:x; r = (x<y)?(y):(x); (r = (x<y)?(y):(x));
Вначале вычисляется условие. Затем выполняется или часть операции, соответствующая истинному значению условия, или часть, соответствующая ложному значению условия, но не обе вместе. (r = (FALSE?(y):(x));. В этой задаче значение условия - "ложь", поэтому значением всего выражения будет значение выражения, соответствующего ложному значению условия.
(r = (x)); 3
x=3; y=2; z=1; r = x<y?x++:y++; (r = (x<y)?(x++):(y++)); (r = (FALSE)?(x++):(y++)); (r = (y++));
Так как операция x++ не выполнялась, то значение x остается равным 3.
x=3; y=3; z=1; z += x<y?x++:y++; (z += (x<y)?(x++):(y++)); (z += (FALSE)?(x++):(y++))); (z += ((y++)); (z += (3)); (z = 4); 4
x=3; y=4; z=4; r = (z>=y>=x)?1:0; (r = (((z>=y)>=x)?(1):(0))); (r = (TRUE>=x)?(1):(0));
Значение самого внутреннего условия "истина". Оно сравнивается со значением целого x. Хотя это и законно в языке C++ и со значением "истина" обходятся вольно, считая его целым числом, в данном случае это 1. Однако часто, как и в этой задаче, это не приносит желаемых результатов.
(r = (1>=x)?(1):(0)); (r = (FALSE?(1):(0))); (r = ((0)); 0
x=3; y=4; z=4; r = z>=y&&y>=x; 0 (r = (z>=y)&&(y>=x));
(r = TRUE&&(y>=x)); (r = (TRUE&&TRUE)); (r = TRUE); (r = 1); 1
На следующем шаге мы уточним такие понятия как "указатели" и "адреса".