В соответствии с требованиями синтаксиса языка, если в ветви оператора if требуется выполнить несколько операторов, то следует воспользоваться составным оператором:
в неполной форме:
if ( выражение ) {
…….
}
в полной форме:
if ( выражение ) {
…….
}
else {
…….
}
-----------------------------------------------------------------------------------------
Стили оформления отступов при написании условных операторов
Существует четыре основных стиля оформления отступов при написании условных операторов. Все они имеют своей целью облегчение визуального отслеживания управляющих конструкций.
Стиль «K&R» (Кернигана и Ритчи): основной отступ состоит из 8 пробелов (или одной табуляции) на уровень, хотя чаще всего используется 4 пробела.
if (<cond>) {········<body>}
Стиль Олмана (по умолчанию предлагается в Microsoft Visual Studio): открывающая программная скобка располагается на новой строке с тем же отступом, что и выражение, находящееся на предшествующей строке; первое выражение внутри программных скобок располагается на новой строке с отступом, увеличенным (по выбору программиста) на любое количество пробелов или символов табуляции при условии, что это количество не изменяется на протяжении всего текста программы; последующие выражения внутри программных скобок располагаются с тем же отступом, что и первое; закрывающая программная скобка располагается с отступом, равным отступу соответствующей ей открывающей программной скобке (то есть точно под нею).
if (<cond>){········<body>}Стиль Уайтсмитс (одного из первых компиляторов с языка С): основной отступ на уровень для скобок и блока — 8 пробелов.
if (<cond>)········{········<body>········}Стиль GNU (используется во всех исходниках проекта GNU): отступ составляет 2 символа на уровень, скобки расположены на собственном отступе.
-----------------------------------------------------------------------------------------
Тернарная условная операция
Это единственная трехместная операция:
выражение1? выражение2: выражение3
Выражение1 может иметь тип: целый, вещественный, быть указателем, ссылкой, элементом перечисления. Если выражение1 не равно 0 (имеет значение true), то вычисляется выражение2 и его значение является результатом операции. Если выражение1 равно 0 (имеет значение false), то вычисляется выражение3, и его значение является результатом операции.
(a > b)? a = 1: b = 2;
cout << ((a > b)? a = 1: b = 2) << endl;
d = (c >= 0)? c: -c;
max = a <= b? b: a; // max присваивается максимальное значение из а и b
Использование тернарной операции для записи условия
Использование тернарной операции позволяет записать по-другому условное выражение.
Например, условный оператор для преобразования прописной буквы в строчную букву:
if ('A' <= c && c <= 'Z')
printf("%c\n", 'a'+c-'A');
else
printf("%c"\n, c); //6116 +(с -4116)
можно заменить тернарной условной операцией:
printf("%c", ('A' <= c && c <= 'Z')? ('a'+c -'A'): c);
Тернарная операция не обязательно должна быть единственной в выражении:
R = A + ( x > y? x: y ) * B;
R = A + ( x < y? ( a>b? c: x+c ): y ) * B;
Использование тернарной операции слева от знака присваивания
Тернарная операция может стоять слева от знака присваивания, если выражение2 и выражение3 являются адресными выражениями:
(a < b? a: b) = c*x+d; //значение выражения c*x+d присваивается меньшей из переменных а или b.
Выражение (a < b? a: b < c? b: c) = f(x); равносильно записи:
if (a < b) {
a = f(x);
}
else {
if (b < c) {
b = f(x);
}
else {
c = f(x);
}
!!! Не для любого оператора if можно зап и сать тернарную операцию. Она заменяет только полную форму.
Приоритет тернарного оператора почти самый низкий среди всех операторов (ниже только у присваивания, throw и оператора «запятая»). Если это не учитывать, то возможны ошибки. Рассмотрим пример тернарного оператора с ошибкой:
F1 ( 2, 0x5a, ( F2(2, 0x5a, 1) & ~0x40 ) | (i==j)? 0x03: 0x02, 1 );
Приоритет оператора побитового 'ИЛИ' выше, поэтому условное выражение вычисляется не в том порядке, в каком планировал программист.
-----------------------------------------------------------------------------------------
Логические операции
Логика – особая наука о мышлении. Основателем ее считается древнегреческий философ Аристотель (IV в. до н. э.). Позднее она стала называться формальной логикой, и ее цель на протяжении всей истории развития – исследование того, как из одних утверждений можно выводить другие, при этом считается, что правильность рассуждения определяется только его логической формой и не зависит от конкретного содержания входящих в него рассуждений. В XIX веке благодаря усилиям английского ученого Джорджа Буля возникла наука математическая логика. Джордж Буль перенес на логику законы и правила алгебраических действий, ввел логические операции, предложил способ записи высказываний в символической форме. Алгебра логики – раздел математической логики, изучающей строение (форму, структуру) сложных высказываний и способы установления их истинности с помощью алгебраических методов.
Высказывание – повествовательное предложение, о котором можно точно сказать, истинное оно или ложное.
Примеры высказываний: «Минск – столица Беларуси», «4 – есть четное число», «сегодня идет дождь», «Х равно 1», «я хорошо учусь».
Но «тишина!», «староста, подайте журнал!», «кто отсутствует на занятии?» – не есть высказывания.
На основе простых элементарных высказываний, о которых известно, истинны они или ложны, можно построить новые, сложные, высказывания с помощью логических операций и условных операторов.
Простое высказывание – Число 6 делится на 3, обозначим его А.
Сложное высказывание: «Число 6 делится на 3, и число 6 делится на 2». Оно состоит из простого высказывания А и простого высказывания В – «Число 6 делится на 2», объединенных с помощью логической операции И: А && В.
Логическая величина: понятия, выражаемые словами истина, ложь. Через логические величины выражается истинность высказываний.
Логическая переменная: символически обозначенная логическая величина.
Логическая константа: true (истина)или false (ложь).
Логическое выражение – формула, содержащая лишь логические величины и знаки логических операций.
Отрицанием высказывания А называется высказывание «не А» (неверно, что А), которое обозначается! A и является истинным тогда и только тогда, когда А ложно. Содержательный смысл логической операции НЕ заключается в проверке обратного условия.
Конъюнкцией двух высказываний A и B называется высказывание «A и B» (логическое умножение), которое обозначается A && B и является истинным тогда и только тогда, когда оба высказывания истинны. Содержательный смысл логической операции И передается фразой «одновременно оба...» и заключается в совпадении условий.
Дизъюнкцией двух высказываний A и B называется высказывание «A или B» (логическое сложение), которое обозначается A || B и является ложным тогда и только тогда, когда оба высказывания ложны. Содержательный смысл логической операции ИЛИ передается фразой «хотя бы один...» и заключается в объединении условий.
Импликацией двух высказываний A и B (A => B) называется высказывание «если А, то В» (А – посылка, В – следствие), которое является ложным тогда и только тогда, когда A истинно, а В ложно. Посылка является условием, достаточным для выполнения следствия. Следствие является условием, необходимым для истинности посылки. В русском языке импликации синонимичны выражения: « если..., то», «когда..., тогда», «коль скоро...., то». «в том случае, если А», «из А следует В», «в случае А произойдет В», «В потому, что А», «А достаточное условие для В». Высказывание A =>B эквивалентно высказыванию! A || B.
®: Выражение, начинающееся со слов «если», «когда», «коль скоро» – основания условного высказывания. Выражения, стоящие после слов «то», «тогда» – следствия.
Эквивалентностью двух высказываний A«В называется высказывание «A тогда и только тогда когда B» (А эквивалентно В, А тождественно В, A то же самое, что B), которое является истинным тогда и только тогда, когда A и B одновременно истинны или одновременно ложны. Это сокращённая запись для выражения (!A || B) && (A ||!B).
Функция Шеффера для двух высказываний A и В – это высказывание, эквивалентное высказыванию !(A) ||!(B),которое является ложным только в случае, когда и А и В являются истинными.
Функция Вебба для двух высказываний A и В – это высказывание, эквивалентное высказыванию !(A) &&!(B),которое является истинным только в случае, когда и А и В являются ложными.
Операции алгебры логики позволяют производить тождественные преобразования логических выражений.
Среди свойств логических операций назовем законы де Моргана, которые возможно понадобятся при построении логических высказываний:
!(X && Y) =!X ||!Y и
!(X || Y) =!X &&!Y
а также дистрибутивность конъюнкций и дизъюнкции относительно дизъюнкции и конъюнкции соответственно:
X && (Y || Z) = (X && Y) || (X && Z)
X || (Y && Z) = (X || Y) && (X || Z)
Логические операции выполняются в С++, как и в других языках программирования, согласно таблице истинности (см. Таблица 6.3). Операнды должны быть скалярного типа.
Таблица. Значения логических операций
| A | B | А&&В | А|| В | !B | импликация ! A || B | эквивалентность (!A || B) && (A ||!B) | функция Шеффера !(A) ||!(B) | функция Вебба !(A) &&!(B) |
| 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 |
| 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
| 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
| 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 |
Логические операции (как и операции отношения) используются при формировании логических выражений, имеющих только два значения: истина или ложь. Логические выражения наиболее часто используются вместе с операторами управления потоком вычислений – операторами ветвлений и циклов.
-----------------------------------------------------------------------------------------






