Умный дом

Условные выражения

Условия выражения if должны быть записаны в круглых скобках. Если они истинны, выражение, непосредственно следующее за if, выполняется:

// #5

If (usr_rsp == "N" II usr_rsp == V) go_for_.it = false;

Если должно выполниться несколько выражений, они должны быть заключены в фигурные скобки, следующие за if (это называется блоком выражений):

//#3

If (usr_guess == next_elem) {

// начало блока выражений num_right++;

Got_.it = true;} // окончание блока выражений

Общая ошибка начинающих - забыть отметить блок:

// р-раз: пропущена отметка блока

// только num_cor++ относится к if,

// а got_.it = true; выполняется вне условия

If (usr_guess == next_elem)

Num_cor++;

Got_it = true;

Выполнение got_it отражает намерения программиста. К сожалению, оно не отражает поведение программы. Нара­щивание num_cor относится к условному оператору і f и вы­полняется только тогда, когда попытка пользователя эквива­лентна значению next_elem. got_it, однако, не относится к условному оператору, поскольку мы забыли обозначить два выражения как блок. В этом примере got__it всегда устанав­ливается в значение true независимо от того, что делает пользователь.

Условный оператор if так же поддерживает расширение else. Else представляет одно выражение или блок выраже­ний, которые будут выполняться, если условие принимает значение false. Например,

If (usr_guess == next__elem) {

// пользователь угадал }

Else {

// пользователь не угадал }

Другое использование оператора else - объединить два условных выражения. Например, если попытка пользовате­ля неудачна, мы хотим варьировать ответ в зависимости от числа попыток. Мы должны написать три проверки как неза­висимые условные выражения:

If (num_tries == l)cout « "У-ух! Хорошая попытка, но не совсем.п";

If (num_tries == 2)cout « "М-да. Извини. Опять неправильно.п";

If (num_tries == 3)cout « "A-a, это труднее, чем могло показаться, не так ли?п";

Однако ТОЛЬКО одно из трех условий может быть истинным одновременно. Если одно из условий верно, остальные долж­ны быть ложны. Мы можем отобразить зависимость между выражениями if, объединив их вместе с помощью выраже­ний if-else:

If (num_tries == 1) cout « "У-ухї Хорошая попытка, но

Не совсемп";

Else

If (num_tries == 2) cout « "М-да. Извини. Опять неправильно. п"; else

If (num_tries == 3)cout « "А-а, это труднее, чем могло показаться, не так ли?п";

Else cout « "Похоже, дальше бесполезно!п";

Первое условное выражение выполняется. Если оно истин­но, выражение, следующее за ним, выполняется, а последова­тельность else-if - нет. Если же первое условное выражение ложно, выполняется следующее, затем следующее, пока одно из условий не становится истинным или num_tries не стано­вится больше 3, - все условия ложны, и последнее else выпол­няется.

Один из неприятных аспектов использования вложенных if-else - трудности с правильной их логической организа­цией. Например, мы хотели бы использовать if-else для разделения логики программы на два случая: когда пользова­тель угадывает и когда он не угадывает. Первая попытка не работает совсем, как мы и планировали:

If (usr_guess == next__elem) {

// пользователь угадывает }

Else if (num_tries == 1)

Else II ___ выводим вопрос

If (num__tries == 2) else 11 ... выводим вопрос if (num__tries == 3) else // ... выводим вопрос // ... выводим вопрос

// теперь спросим у пользователя, хочет ли он еще раз угадать

// но только, если он не угадал // р-раз! и куда же мы воткнем это?

Каждая пара else-if непреднамеренно была сделана аль­тернативой удачной попытки. В результате нам некуда поме­стить вторую часть кода для поддержки неудачных попыток. Вот правильная организация:

If (usr_guess == next__elem) {

// пользователь угадал} else { // пользователь не угадал if (num_tries == 1) else // ...

If (num_tries == 2) else // ... if (num__tries == 3) // ... else // ...

Cout « "Желаете попробовать еще? (Y/N) "; char usr_rsp; с in » usr_rsp;

If (usr__rsp == "N" II usr_rsp == "n") go_for__it = false;}

Если значение проверяемого условия имеет интеграль­ный тип, мы можем заменить набор if-else-if выражени­ем switch:

// равноценно if-else-if выше

Switch (num_tries) {

Case 1:

Cout « "У-ух! Хорошая попытка, но не совсемп"

Break;

Case 2:

Cout « "М-да. Извини. Опять неправильно.п"; break;

Case 3:

Cout « "А-а, это труднее, чем могло показаться, не так

Ли?п";

Break;

Default:

Cout « "Похоже, дальше бесполезно!п";

Break; }

Ключевое слово switch с последующим выражением в круглых скобках (да, имя объекта работает, как выражение). Выражение должно вычисляться как целое значение. Серия меток case, следующая за ключевым словом switch, опреде­ляет постоянное выражение. Результат выражения сравнива­ется с каждой из меток case по очереди. Если есть совпаде­ние, выражение, следующее за case, выполняется. Если совпадений нет, и метка default присутствует, выполняется выражение, следующее за ней. Если же нет ни совпадений, ни метки default, не делается ничего.

Почему я поместил выражение break в конце каждой мет­ки case? Каждая метка case проверяется по очереди на со­впадение со значением выражения. Каждая несовпадающая метка case пропускается по очереди. Когда обнаруживается совпадение, выражение, следующее за меткой, выполняется. Увы, выполнение продолжается со следующими метками, пока не будет достигнут конец меток. Если значение num_tries, например, равно 2, и если нет выражений break, вывод бу­дет выглядеть так:

// output if num_.tries == 2 and

// we had forgotten the break statements

М-да. Извини. Опять неправильно.

А-а, это труднее, чем могло показаться, не так ли? Похоже, дальше бесполезно!

Вторая метка case совпадает, все метки case, следующие за совпадающей, также выполняются, пока не завершается оператор. Этот алгоритм дает выражение break. Вы можете спросить: почему выражение switch так устроено? Вот при­мер этого провала, который придется в самый раз:

Switch

(next.

_char)

{ case

-a":

Case

"A1

Case

Иe" •

Case

"E1

Case

"i":

Case

-Iі

Case

"o":

Case

-0'

Case

"u" :

Case

"U'

++vowel.

_cnt;

Break;// ...}

Умный дом

Способы строительства частных домов

Строительство частных домов является одним из самых популярных направлений в строительной отрасли. Существует множество способов и технологий, которые можно использовать при строительстве дома. В этой статье мы рассмотрим наиболее распространенные …

Как построить современный умный дом?

Современные технологии позволяют людям построить умный дом, который может автоматически реагировать на изменения в окружающей среде, предоставляя максимальное комфортное проживание. Процесс построения такого дома начинается с проектирования и планирования. Важно …

5 советов, как правильно обустроить домашний офис

Домашний кабинет – пространство, в котором должны быть созданы все условия для комфортной работы. Основные атрибуты – это рабочий стол и стул, компьютер, наушники с микрофоном и другие важные мелочи. …

Как с нами связаться:

Украина:
г.Александрия
тел./факс +38 05235  77193 Бухгалтерия

+38 050 457 13 30 — Рашид - продажи новинок
e-mail: msd@msd.com.ua
Схема проезда к производственному офису:
Схема проезда к МСД

Партнеры МСД

Контакты для заказов оборудования:

Внимание! На этом сайте большинство материалов - техническая литература в помощь предпринимателю. Так же большинство производственного оборудования сегодня не актуально. Уточнить можно по почте: Эл. почта: msd@msd.com.ua

+38 050 512 1194 Александр
- телефон для консультаций и заказов спец.оборудования, дробилок, уловителей, дражираторов, гереторных насосов и инженерных решений.