Составные, логические операторы
Простые, операторы сравнения
Уверен, что ты хотя бы раз в жизни да сравнивал кого-нибудь с чем-нибудь, поэтому тебе должны быть знакомы операции сравнения. На языке C# данные операции записываются с помощью обычных математических символов «больше», «меньше», «равно» и восклицательного знака.
Оператор | Пояснение |
> | Больше |
< | Меньше |
>= | Больше или равно |
<= | Меньше или равно |
= = | Одно число имеет то же значение что и другое |
!= | Не равно |
С помощью операторов сравнения мы можем сформировать логическое выражение, которое в зависимости от значений используемых переменных окажется «правдой» или «ложью». Вариант «почти правда» даже не рассматривается. Например, если переменная «age» равна 17, то выражение (а > 16) будет правдой.
Обрати внимание на большую разницу между оператором присваивания «=» и оператором сравнения «= =», в котором два знака равенства. Оператор присваивания записывает то, что стоит справа, в переменную, которая слева. А оператор сравнения возвращает «правду», если сравниваемые значения равны, и «ложь», если это не так. Начинающие программисты на этом очень часто попадаются!
Boolean value;
value = (1 == 1); // правда
Console.WriteLine(value);
value = (2 == 3); // ложь
Console.WriteLine(value);
value = (2 < 3); // правда
Console.WriteLine(value);
value = (3 >= 5); // ложь
Console.WriteLine(value);
value = (5 != 8); // правда
Console.WriteLine(value);
value = (9 != 9); // ложь
Console.WriteLine(value);
Составные, логические операторы
Допустим, что мы пишем шутер и хотим определить, попал игрок по мишени или нет. В обычной жизни все просто, мы смотрим на картинку и видим пулевое отверстие. В программировании это решение должно приниматься компьютером по некоторому условию.
Если игрок попал по мишени, то координата X выстрела должна быть больше координаты X_мишени, но меньше координаты X_мишени + Ширина_мишени. Тоже самое и для координаты Y. Она должна быть больше координаты Y_мишени, но меньше координаты Y_мишени + Высота_мишени. Как задать это одним условием? Для этого существуют логические операции, с помощью которых можно делать составные условные выражения!
Разберем три логических операции:
· Логическая операция «И», обозначается двумя знаками амперсанда «&&». Составное выражение «А && B» будет истинным в том случае, если оба выражения будут истинными. Если хотя бы одно из них ложно, все составное выражение становится ложным.
· Логическая операция «ИЛИ», обозначается двумя вертикальными черточками «| |». Составное выражение «А | | B» будет истинным в том случае, если хотя бы одно из них будет истинным.
· Логическая операция отрицания «НЕ», обозначается восклицательным знаком. Условное выражение «!A» будет истинным в том случае, если выражение «А» является ложным, и наоборот.
Рис. 3-2 Графическое представление логических операций
в вдие Диаграмм Эйлера
Рис. 3-3 Электрические аналоги логических операций
Допустим, координаты выстрела (Xв, Yв), а координаты объекта (X1, Y1)–(X2, Y2). Тогда составное логическое условие, проверяющее, попал игрок в мишень или нет, примет следующий вид: (((Xв > X1) && (Xв < X2)) && ((Yв > Y1) && (Yв < Y2)))
3.4 Операторы ветвления
Конструкция if..else
Логические выражения в программировании чаще всего используются для того, чтобы изменить ход программы. Например, мы можем заставить компьютер проверить какое-то условие и, в зависимости от результатов проверки, перейти к определенной последовательности действий. К сожалению, ничего большего от него ожидать не приходится, но одних только сравнений достаточно для того, чтобы в современных играх создать такой искусственный интеллект, что тягаться с ним у среднего человека получается далеко не сразу.
Рис. 3-4 Возможные варианты изображения
оператора ветвления на блок-схемах
Оператор, с помощью которого можно управлять ходом программы, называется оператором ветвления или условным оператором. На языке C# он задается при помощи служебного слова «if» (в переводе с английского – если). Условие для проверки записывается сразу же за ним в круглых скобках.
В общем виде:
if (условие) команда;
Пример программы:
String pass;
Console.Write ("Введите пароль: ");
pass = Console.ReadLine();
if (pass == "1234")
Console.WriteLine("Привет, злой одмин!");
Console.ReadLine();
В приведенной программе мы предлагаем пользователю ввести пароль, и, если он будет равен «1234», то приветствуем его, как администратора. Если же при сравнении строки окажутся разными, то программа просто проигнорирует эту команду и на экране ничего не появится. Вот и получился уже немного мыслящий кусочек программы, которая отказывается здороваться со всеми, кроме админа.
Довольно часто нужно одновременно обрабатывать и взаимоисключающее условие. Например, в приведенной выше программе у нас может появиться желание при неправильном вводе пароля погрозить пальчиком. «Можно добавить еще одно условие» – скажешь ты, и будешь прав. Фрагмент программы, ответственный за вывод сообщения, примет вид:
if (pass == "1234")
Console.WriteLine("Привет, злой одмин!");
if (pass != "1234")
Console.WriteLine("Не пытайтесь подобрать пароль!");
Но, согласись, будет значительно лучше, если мы воспользуемся служебным словом «else» (в переводе с английского – иначе), которое предназначено специально для таких случаев. Оно указывается в конце конструкции «if(условие) команда;» и позволяет добавить еще одну команду, которая будет выполнена, если условие окажется ложью.
if (pass == "1234")
Console.WriteLine("Привет, хмурый одмин!");
else
Console.WriteLine("Не пытайтесь подобрать пароль!");
Таким образом, нам не придется два раза проверять одно и то же разными словами, да и текста набирать нужно будет значительно меньше.
Добавим так же, что по условию нужно выполнить не одну, а сразу несколько команд, их нужно объединить с помощью фигурных скобок.
В общем виде:
if (условие)
{
оператор1;
оператор2;
оператор3;
}
Пример программы:
if (pass == "1234")
{
Console.WriteLine("Привет, хмурый одмин!");
Console.WriteLine("Что нужно сделать?");
Console.WriteLine("1. Перезапустить сервис");
Console.WriteLine("2. Показать статистику");
Console.WriteLine("3. Выйти из системы");
String decision;
decision = Console.ReadLine();
}
В завершение мы хотим предложить тебе взглянуть на графическое представление условного оператора. Как ты видишь, основной блок и блок else как бы разделяют алгоритм на два потока и, если таких операторов будет много, то мы получим картинку, очень похожую на перевернутое дерево с множеством веток. Именно поэтому данный оператор еще называют оператором ветвления.
Рис. 3-5 Схематичное изображение
процесса разветвления (образование «дерева»)
Задания #7 ★★ Составь алгоритм и напиши программу, которая по значению длин трех сторон будет определять, может ли существовать такой треугольник, или нет. Для проверки воспользуйся теоремой Пифагора (a2 + b2 = c2). #8 ★★ Модифицируй программу из предыдущей задачи таким образом, чтобы она дополнительно сообщала, является ли данный треугольник обычным, равнобедренным или равносторонним. #9 ★★★ Напиши программу, которая будет решать квадратное уравнение через дискриминант. #13 ★★ Напиши программу, вычисляющую стоимость покупки с учетом 10 %-й скидки, которая предоставляется только в том случае, если сумма покупки больше 1000 рублей. – Введите стоимость покупки –>1200 Вам предоставляется скидка 10% Сумма с учетом скидки 1080,00 руб. #18 ★★★ Напиши программу, которая после введенного с клавиатуры числа (от 1 до 999), дописывает слово «рубль» в правильной форме (21 рубль, 332 рубля, 890 рублей). |