Умный дом

Написание выражений

Встроенные типы данных поддерживаются набором опера­торов: арифметических, логических, отношения, структуро­образующих. Арифметические операторы не имеют особен­ностей, исключая деление целых и получение остатка.

// Арифметические операторы + сложение а + Ъ - вычитание а - Ъ * умножение а * Ъ / деление а / Ъ % остаток а % Ъ

Деление двух целых значений выдает целое. Любой оста­ток отсекается, и это не округление. Остаток получается с помощью оператора %:

5/3 результат 1 тогда, как 5 % 3 имеет результат 2 5/4 результат 1 тогда, как 5 % 4 имеет результат 1 5/5 результат 1 тогда, как 5 % 5 имеет результат О

В каких случаях мы нуждаемся в операторе получения ос­татка? Представьте, что мы хотим печатать не более вось­ми слов в линии. Если количество слов меньше восьми, мы выводим пробелы после слов. Если строка состоит из вось­ми или более слов, мы выводим переход на новую строку (newline):

Const int line_size = 8; int cnt = 1;

// это выражение выполняется много раз со // строками, представленными разными значениями, // и cnt увеличивается на единицу при каждом проходе... cout « a_string« (cnt % line_size? " " : "n");

Выражение в скобках за оператором вывода, похоже, не имеет для вас значения, пока вы не освоите условный опера­тор (? :). Результат выражения - либо пробел, либо переход на новую строку - в зависимости от того, нулевое или нену­левое значение принимает оператор остатка. Посмотрим, какой смысл мы можем ему придать.

Выражение cnt % 1 ine_s і ze превращается в ноль, когда cnt достигает значения line_size; иначе оно не равно нулю.

Что это означает для нас? Условный оператор имеет основ­ную форму:

Expr? execute_if_expr_is_true: execute_if_expr_is_false; выражение? выполнять_если_выражение_истинно: выполнять_если_выражение_ложно;

Если ехрг (выражение) принимает значение true, выра­жение, следующее за знаком вопроса, выполняется. Если ехрг принимает значение false, выполняется выражение, следующее за двоеточием. В нашем случае выражение стано­вится либо пробелом, либо переводом на новую строку для оператора вывода.

Условное выражение обрабатывается как ложное (false), если его значение равно нулю. Любое ненулевое значение принимается как true. В примере, пока cnt не делится на восемь, а результат не нулевой, выполняется переход опера­тора по условию true, и печатается пробел.

Оператор структурного присваивания дает краткую нота­цию при применении арифметической операции для зада­ния объектов. Например, чтобы не писать:

Cnt = cnt + 2;

Программист С++ обычно пишет:

Cnt += 2; // прибавить 2 к данному значению cnt

Структурное присваивание применимо к каждому ариф­метическому оператору: +=, -+, /=, и %=.

Когда к объекту прибавляется или вычитается 1, про­граммист С++ использует операторы увеличения или умень­шения:

Cnt++; // добавляет 1 к значению cnt (инкремент) cnt—; // вычитает 1 из значения cnt (декремент)

Существует префиксная (до) и постфиксная (после) раз­новидность операторов увеличения и уменьшения. В пре­фиксном написании объект увеличивается или уменьшается на 1 до того, как его значение используется:

Int tries = 0;

Cout « "Are you ready for try #"« ++tries « "?n";

Tries увеличивается на 1 до вьюода его значения. В постфикс­ном написании значение объекта вначале используется в выра­жении, а затем увеличивается (или уменьшается) на 1:

Int tries = 1;

Cout « "Are you ready for try #"« tries++ « "?n";

Теперь значение tries выводится до того, как увеличива­ется на 1. В обоих примерах значение 1 выводится.

Каждый из операторов сравнения принимает значение true или false. Их всего шесть:

== равно а == b! = не равно а! = b < меньше чем а < b > больше чем а > b <= меньше чем или равно а <= b >= больше чем или равно а >= b

Вот пример того, как мы можем использовать оператор равенства (эквивалентности) для проверки ответа пользова­теля:

Bool usr_more = true; char usr_rsp;

// спросим пользователя, хочет ли он продолжить // прочитаем ответ в usr_rsp if (usr__rsp == "N") usr_more = false;

Условное выражение і f выполняет предложение, следую­щее за ним, если выражение в скобках принимает значение true. В данном примере usrjnore устанавливается в false, если usr_rsp равно ' N'. Если usr_rsp не равно ' N', не дела­ется ничего. «От противного», используя оператор неравен­ства, можно написать так:

If (usr_rsp!= "Y")usr_more = false;

Проблема с проверкой usr_rsp только на значение ' N' в том, что пользователь может ввести ответ в нижнем регист­ре, то есть ' п'. Мы должны распознать оба значения. Одна из стратегий - добавить else:

If (usr_rsp == "N") usr_more = false;

Else if (usr_rsp == "n") usr_more = false;

Если usr_rsp равно 'N', то usr__more устанавливается в false и больше ничего не делается. Если оно не равно 'N', выполняется else. Если usr_rsp равно 'п',то usr_more при­нимает значение false. Если же значение usr_rsp не равно ни тому, ни другому, значение usr_more не определяется.

Одна из распространенных ошибок начинающих про­граммистов - использование оператора присваивания при проверке равенства, как показано ниже:

// раз, и присвоили usr_rsp символ "N"

// а теперь всегда условие принимает значение true

If (usr_rsp = "NH)

// ...

Логический оператор ИЛИ (| |) предлагает альтернатив­ный путь проверки истинности во множественных выраже­ниях:

If (usr_rsp == "N" II usr_rsp == "n")usr_more = false;

Логический оператор ИЛИ становится истинным (true), если любое из выражений истинно. Левое выражение прове­ряется первым. Если оно истинно, следующее выражение не проверяется. В нашем примере usr_rsp проверяется на ра­венство ' п', только если оно не равно ' N'.

Логический оператор И (&&) становится истинным, толь­ко если оба выражения истинны. Например,

If (password &&validate(password) && (acct = retrieve_acct_info(password))) // процесс доступа...

Верхнее выражение проверяется первым. Если оно лож­но, оператор И принимает значение false, а остальное вы­ражение не проверяется. В данном случае информация до­ступа принимается только при введении правильного пароля.

Логический оператор НЕ (!) принимает значение true, если выражение, которому он принадлежит, имеет значение false. Например, вместо записи:

If (usr__more == false)

Cout « "Your score for this session is " « usr__score « " Bye!n";

Мы можем написать:

If (! usr_more) ...

Умный дом

Схемы для экспериментов с радиоканалом

Если вам захочется провести эксперименты с радиоканалом вместо проводной связи модулей, то: • лучше было бы воспользоваться готовыми радиомоду­лями, но дорого; • не забывайте, что ваши эксперименты могут мешать вашим …

Немного О программировании на С++

Поскольку при программировании микроконтроллера я ис­пользовал язык С, мне показалось уместным добавить хотя бы несколько слов о языке. Но я не сделаю это лучше, чем С. Липпман. Когда мне понадобилось …

Цоколевка контроллера PIC16F628A

—- RA1/AN1 ]—RAO/ANO ]—- RA7/OSC1 /CLKIN ]—RA6/SDC2/CLKOUT — VDD RB7A10SI/PGD — RB6A1 ОБОДІ CKI/PGC j—RB5 RB4/PGM PDIPSOIC О KJ 1 18 2 17 3 16 4 15 5 14 6 …

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

Украина:
г.Александрия
тел. +38 05235 7 41 13 Завод
тел./факс +38 05235  77193 Бухгалтерия
+38 067 561 22 71 — гл. менеджер (продажи всего оборудования)
+38 067 2650755 - продажа всего оборудования
+38 050 457 13 30 — Рашид - продажи всего оборудования
e-mail: msd@inbox.ru
msd@msd.com.ua
Скайп: msd-alexandriya

Схема проезда к производственному офису:
Схема проезда к МСД

Представительство МСД в Киеве: 044 228 67 86
Дистрибьютор в Турции
и странам Закавказья
линий по производству ПСВ,
термоблоков и легких бетонов
ооо "Компания Интер Кор" Тбилиси
+995 32 230 87 83
Теймураз Микадзе
+90 536 322 1424 Турция
info@intercor.co
+995(570) 10 87 83

Оперативная связь

Укажите свой телефон или адрес эл. почты — наш менеджер перезвонит Вам в удобное для Вас время.