InCode#A2: Логические конструкции

Вот мы и подошли к самому необходимому инструменту при разработке своих программ и алгоритмов.

Постановка проблемы

Функции и библиотеки конечно важны, но без логических конструкций ваша программа будет работать крайне прямолинейно. Никаких меню и ветвлений логики.
Вы не сможете реализовать разные функции в программе или обрабатывать разные исключительные ситуации. Тривиальная задача вида: “Выведите 1, если число больше единицы, иначе — 0” превратится в пытку, если вы будете работать без логических конструкций.

Логические операторы

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

Операторы: <, <=, ==, <>, >=, >.

Функции: Not, Or, Xor, And.

Отрицание (Not):

XNot X
01
10

Или (Or):

XYX Or Y
000
011
101
111

Сложение по модулю 2 (Xor):

XYX Xor Y
000
011
101
110

И (And):

XYX And Y
000
010
100
111

Это не все логические функции, которые вы можете встретить, но это основные для построения логики своих программ. Про остальные вы можете почитать сами.

Кстати, используя комбинации функций, вы можете выражать другие функции. Например, используя Not и And вы можете реализовать “0” (X And Not X) или “1” (Not (X And Not X)). Можно выражать даже более сложные, использую больший набор значений.

Логические конструкции

Так повелось в программировании, что для описания логических конструкций используют следующую запись:

“Если (Условие) Тогда{Действие}”.

Есть варианты длиннее:

“Если (Условие) Тогда{Действие} Иначе{Действие}”

Или другой вариант:

“Переключатель (Условие)”

Давайте немного попрактикуемся.

Допустим, перед нами стоит задача разделить чётные и нечётные числа. Числа вводит пользователь в переменную “input”, которая численная. Вывод результата на экран через переменную “output”, которая строковая.

Задача вроде простая, но с её решением могут возникнуть трудности. Перед решением этой задачи, нужно вспомнить: “Что нам может помочь в решении?”. Я бы советовал прочесть “Урок 1: Переменные. Операции над переменными”.
После ознакомления вы можете наткнуться на прекрасную операцию “остаток от деления”. Этого хватит для определения четности. Теперь применим логические конструкции. Нам потребуется конструкция следующего вида:

“Если (Условие) Тогда{Действие} Иначе{Действие}”.

Давайте уже перейдём к коду. В скобах “Условия” мы должны написать выражение, при верном значении которого будет выполняться блок кода “Тогда”, а при ложном значении блок “Иначе”. Сложно звучит, но нас это не должно пугать.
Если мы применим остаток от деления к входным данным с модулем “2”, то “0” мы получим при четном вводе и “1” иначе. Остается записать всё кодом:

Целочисленный input //данные, которые нам ввёл пользовательСтрока output //результат, для вывода на экран
Если (input % 2 == 0 ) Тогда{    output = “Чётное число”}Иначе{    output = “Нечётное число”}

Вроде просто. Но не нужно забывать, что конструкция должна быть удобно записанной и читаемой. Поэтому в программировании (на современных языках) уделяют время не только правильности кода, но и его внешнему виду. Конечно, в маленьких программках всё просто, но с ростом программы из-за “грязного” написания кода начинают скапливаться проблемы.

В этой задаче мы могли обойтись и другой конструкцией, например:  

“Если (Условие) Тогда{Действие}”

Но тогда возникнет одна проблема. Вы пока подумайте о ней, а я напишу код такой реализации:

Целочисленный input //данные, которые нам ввёл пользовательСтрока output //результат, для вывода на экран
Если (input % 2 == 0 ) Тогда{    output = “Чётное число”}
Если (input % 2 == 1 ) Тогда{    output = “Нечётное число”}

На вид всё прекрасно,  но есть одна проблема. Мы считаем два раза эту операцию, хотя можно было бы обойтись и одним разом. Конечно, в этой задаче это не приведёт ни к чему плохому, но в более серьезных проектах это может привести к тому, что ваша программа будет работать хуже. Вы должны всегда избавляться от лишних операций.

Есть еще одна конструкция, которую мы не рассмотрели:

“Переключатель (Условие)”

В отличии от обычных “Если…”, тут у нас более удобная система для реализации ветвлений. Такое можно использовать в меню и прочих схожих системах.
Всё работает крайне просто. У нас есть выражение, которое находится в блоке “Условие”. Это выражение может быть логическим, математическим или даже строковым. По сути не принципиально. Помимо “Переключателя” есть ещё ключ, на который он может срабатывать. И при совпадении результата “Условия” и “Ключа” идёт выполнение блока кода. Для закрепления материала я вам вновь всё покажу.

Допустим, у нас всё та же задача: разделение чисел на чётные и нечётные. Вы уже видели реализацию на базе “Если”, давайте посмотрим реализацию на базе “Переключателей”:

Целочисленный input //данные, которые нам ввёл пользовательСтрока output //результат, для вывода на экран
Переключатель (input % 2){    Ключ (0)    {        output = “Чётное число”    }    Ключ (1)    {        output = “Нечётное число”    }}

Всё очень просто. Аналогичная запись и для булевских, и для строковых выражений.

InCode#A2: Логические конструкции

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *