Выбор вариантов
В простейших программах все команды выполняются одна за другой последовательно.
Так реализуются линейные алгоритмы. Однако часто надо выбрать тот или иной вариант действий в зависимости от некоторых условий: если условие верно, поступать одним способом, а если неверно — другим. Для этого используют разветвляющиеся алгоритмы, которые в языках программирования представлены в виде условных операторов. В языке Си существует два вида условных операторов:
• оператор if — else
• оператор множественного выбора switch для выбора из нескольких вариантов
Условный оператор if — else
Пример. Ввести с клавиатуры два вещественных числа и определить наибольшее из них.
По условию задачи нам надо вывести один из двух вариантов ответа: если первое число
больше второго, то вывести на экран его, если нет — то второе число. Ниже показаны два варианта решения этой задачи: в первом результат сразу выводится на экран, а во втором наибольшее из двух чисел сначала записывается в третью переменную Max.

• Условный оператор имеет следующий вид:

• Эта запись представляет собой единый оператор, поэтому между скобкой, завершающей
блок «если» и словом else не могут находиться никакие операторы.
• После слова else никогда НЕ ставится условие — блок «иначе» выполняется тогда, ко-
гда основное условие, указанное в скобках после if, ложно.
• Если в блоке «если» или в блоке «иначе» только один оператор, то фигурные скобки можно не ставить.
• В условии можно использовать знаки логических отношений
> < больше, меньше
>= <= больше или равно, меньше или равно
• В языке Си любое число, не равное нулю, обозначает истинное условие, а ноль — ложное условие.
• Если в блоке «иначе» не надо ничего делать (например: «если в продаже есть мороженое, купи мороженое», а если нет . ), то весь блок «иначе» можно опустить и использовать сокращенную форму условного оператора:

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

• В блоки «если» и «иначе» могут входить любые другие операторы, в том числе и другие
вложенные условные операторы; при этом оператор else относится к ближайшему предыдущему if:

• Чтобы легче разобраться в программе, все блоки «если» и «иначе» (вместе с ограничивающими их скобками) сдвигаются вправо на 2-3 символа (запись «лесенкой»).
Сложные условия
Простейшие условия состоят из одного отношения (больше, меньше и т.д.). Иногда надо
написать условие, в котором объединяются два или более простейших отношений. Например, фирма отбирает сотрудников в возрасте от 25 до 40 лет (включительно). Тогда простейшая программа могла бы выглядеть так:

• Сложное условие состоит из двух или нескольких простых отношений, которые объединяются с помощью знаков логических операций:
o операция И — требуется одновременное выполнение двух условий
условие_1 && условие_2
Эту операцию можно описать следующей таблицей (она называется таблицей истин-

o операция ИЛИ — требуется выполнение хотя бы одного из двух условий (или обоих
условие_1 || условие_2
Таблица истинности запишется в виде

o в сложных условиях иногда используется операция НЕ — отрицание условия (или обратное условие)
Например, следующие два условия равносильны
A > B ! ( A <= B )
• Порядок выполнения (приоритет) логических операций и отношений:
o операции в скобках, затем
o операция НЕ, затем
o логические отношения >, <, >=, <=, ==, !=, затем
Элементы управления выбором в пользовательском интерфейсе
Элементы управления выбором уже давно присутствуют в пользовательских интерфейсах, поэтому у пользователей выработались определённые и весьма серьезные ожидания от них. Вот простая шпаргалка, которой вы можете руководствоваться при выборе элемента управления:
Обзор
Тумблеры применяются при описании двух взаимоисключающих вариантов и всегда имеют значение по умолчанию. Тумблеры переключаются мгновенно.
Чекбоксы (они же флажки) применяются при обозначении независимых друг от друга вариантов. Пользователи могут выбрать любое количество — один, несколько или ни одного.
Радио-кнопки применяются в описании двух или более взаимоисключающих вариантов, то есть таких, из которых пользователи должны выбрать единственный.
Фишки (Choice chips) — это компактная альтернатива радио-кнопкам. Они предоставляют по меньшей мере два варианта, из которых пользователю нужно выбрать один.
Фишки множественного выбора (Multi-select chips) — компактная альтернатива чекбоксам. Они позволяют пользователям выбирать несколько вариантов одновременно и в основном применяются на мобильных устройствах для переключений фильтров.
Выбор
Область клика
Включите как сами кнопки, так и подписи к ним в одну большую область действия. Согласно закона Фиттса, размер мишени играет важную роль. Чекбоксы и радио-кнопки, как правило, мелкие, поэтому на них сложно кликнуть или нажать пальцем, особенно на мобильных устройствах.
Подсветка выбора
Пусть выбранные варианты визуально отличаются от остальных в списке, особенно при выделении строк в таблицах с данными.
Отмена множественного выбора
У пользователей не должно возникать сложностей ни с выбором нескольких вариантов за один раз, ни с очисткой выбранного одним нажатием:
Состояния элементов
Чекбоксы и радиокнопки можно выбрать или не выбрать, а тумблеры должны находиться в положении “выключено” или “включено”. Все эти элементы бывают в следующих состояниях: доступны, недоступны, с наведенным курсором, с наведённым фокусом или нажаты. Да, понимаю, звучит жутко, но для надежности лучше учесть все возможные комбинации.
Неопределённые состояния
Речь о таком состоянии чекбокса, когда он одновременно не установлен и не снят. В таком состоянии нет полной определенности — отсюда и название. Неопределенные состояния нужны в ситуациях, когда родительский чекбокс имеет несколько дочерних элементов, некоторые из которых выбраны, а другие — нет.
Тумблеры
Тумблер — это цифровой выключатель. Любой эффект, вызванный тумблером, должен немедленно вступить в действие. Иначе лучше заменить тумблер одиночным чекбоксом.
Не злоупотребляйте тумблерами
Не нужно создавать иерархию тумблеров. Такие иерархии отвлекают внимание и могут создать ложное впечатление, что все дочерние опции включены или выключены:
Списки
Выравнивание
Когда элементы управления и подписи расположены близко друг к другу, то лучше всего выравнивать их по левому краю — так пользователь быстрее нажмет на кнопку и не промахнется. На мобильных устройствах выравнивание по правому краю имеет некоторые преимущества, так как подписи и кнопки всегда находятся близко друг к другу. Когда пользователь держит устройство в одной руке, ему удобнее, чтобы кнопка находилась справа: легко дотянуться и палец не закрывает текст.
Выпадающие списки
Когда количество вариантов больше 6–7, их стоит разместить в выпадающем списке, так как пользователь в любом случае не удержит в уме их все. То же самое относится к предсказуемым, построенным по аналогии или инкрементным опциям, таким как масштабирование — 10%, 20%, 30% и так далее.
Радио-кнопки
…и выпадающие списки
Когда пользователь видит все возможные варианты сразу, без необходимости что-то открывать, восприятие значительно упрощается. Поэтому при возможности используйте радио-кнопки, а не выпадающие списки.
Радио-кнопка по умолчанию
Пользователи не могут отменить выбор и вернуть радио-кнопку в исходное состояние после того, как выбрали вариант. Когда ему необязательно делать выбор, стоит встроить радио-кнопку с подписью “Нет”. Структурируйте список в логическом порядке и предугадывайте желания пользователей.
Фишки
Выбранный элемент управления должен выделяться из остальных, Фишки помогают четко отделить друг от друга разные варианты. Когда не хватает пространства по вертикали, вам помогут фишки.
Понятность
Подписи к элементам
Избегайте ситуаций, когда пользователям нужно поставить галочку в поле, чтобы чего-то не произошло. Пишите понятные подписи и старайтесь избегать отрицаний.
Соблюдение стандартов
Любое отклонение от того, что считается стандартом для платформы, под которую вы разрабатываете, возлагает на пользователей лишний мыслительный груз. Я часто вижу закругленные чекбоксы, которые можно легко спутать с радио-кнопками.
Простой алгоритм псевдослучайного выбора альтернатив
В данном посте я хочу рассказать о простом алгоритме предложения на основании сделанных ранее выборов. Для этого, прежде всего, поставим две задачи:
- Выбрать случайное значение из массива
- Выбрать случайное значение из массива на основании веса значений
Для решения я буду использовать псевдокод, чем-то похожий на Javascript. Потому, мой метод random() будет возвращать значение от 0 до 1.
Итак, задача 1
Можно просто перебрать массив в каждой итерации получая случайным образом true/false, можно воспользоваться распространённым решением для Javascript вида Math.floor(Math.random() * maxNumber) , что, кстати, и является сокращённой версией решения, которое буду использовать я.
Решение
Делим интервал чисел от 0 до 1 на равные n отрезков и берём ближайшее предыдущее значение от random : 
Практическая часть
Для простоты, возьмём массив из 150 элементов, содержащий только собственные индексы. То есть, числовой ряд от 0 до 150.
Задача 2
Введём некоторые исходные данные:
Где score — некоторая величина (кол-во очков), изменяющая «вес» значения перед другими значениями. Очки можно начислять за выбор значения или за схожесть этого значения с выбранным однажды значением. Правила начисления очков ограничены только фантазией и конкретной ситуацией применения.
Внимательный читатель успел заметить, что 0 очков не есть значение по умолчанию. Это сделано для того, чтобы можно было исключить значение из выборки, потому кол-во очков по умолчанию возьмём за 1. Для этого подкорректируем исходные данные:
Решение
Суть решения заключается в изменении отрезков значений в интервале от 0 до 1.
Пример: 
Практическая часть
Добавляем рассчёт веса значения:
Здесь вес — это процентная доля от суммы очков всех элементов.
Вычисляем сумму весов и дарабатываем решение к задаче 1:
Таким образом, получаем значение с с большей вероятностью, чем с Однако, в таком случае мы рано или поздно прийдём к тому, что предлагаться будут одни и те же значения (при условии роста кол-ва очков и если, конечно, искусственно не исключать их из выборки).
Такое решение вполне применимо к системам, где пользователю нужно предложить что-то наиболее похожее — просто составляем score нужных значений по своему вкусу (одинаковый цвет, одинаковый тип, может быть, один и тот же производитель) не забывая исключать выбранное значение выставляя score в 0.
Если нужно наборот, с наименьшей вероятностью показывать подобные товары (например, зачем человеку второй пылесос, если он его только что купил?) или предлагать попробовать что-то новое, не выбрасывая из выборки приобретённый товар (например, заказ еды или товары-расходники (аромат электронных сигарет, etc.)), тогда необходимо внести небольшие коррективы в рассчёт весов:
Где вес — инвертированное значение к процентной доле.
На случай, если у нас только один элемент в списке имеет ненулевой счёт проверяем и присваиваем 1 весу этого элемента.
Теперь, прибавляя к score очко каждый раз, как сделан выбор этого значения мы отодвигаем его дальше (при этом не исключая из выборки), предлагая альтернативные варианты пользователю.
Эти два подхода можно комбинировать: например, предлагаем пользователю производителя, товары которого он обычно приобретает, но при этом предлагаем товары которые он ещё не приобрёл.
Как принять решение. Как выбрать из двух вариантов — 2
Первую часть статьи о выборе: "Рациональный подход", читайте тут. Третья часть здесь.
Эта техника называется ещё «Работа с напольными якорями». Но вырезать бумажки не обязательно. Можно взять предметы-заместители. Например, правый тапок – это «Уволиться», левый – «Остаться». Или этот стул – увольняюсь, а другой – остаюсь.
Располагаете предметы на расстоянии пару метров от себя.

Итак, продолжаем искать ответы на вопросы:"Как принять решение. Как выбрать из двух вариантов?" Если да, я с вами :).
Какие эмоции посещают вас тут?
Комфортно ли вам тут? Уютно ли?
Хочется ли остаться?
В чем дискомфорт?
Какие мысли приходят?
Как запомните ощущения и мысли (на это у кого-то уходит 2 минуты, у кого-то 10), возвращайтесь в изначальное положение. В свою позицию. Идите в другое решение. И слушайте ощущения и мысли там.
Полученная информация поможет ответить на вопрос: "Как выбрать из двух вариантов?", что поможет вам принять решение. Читайте также первую часть статьи, рациональная техника.













Петраковская Светлана Владимировна писал(а):
Я предлагаю клиентке технику с напольными якорями. Плюс я добавила разные ноги: по ощущениям, правая часть говорила – «нет» отношениям, левая – «да» отношениям.
Что было сказано девушке: «1-ый лист и левая нога – это часть вас, которая хочет продолжения с ним, та часть, которая любит его до сих пор. 2-ой лист и правая нога – та часть, которая не хочет подпускать этого человека к себе даже на пушечный выстрел.
Разложите их на полу так, как вы видите расстояние между хочу это, хочу то. Наша задача — соединить разрозненные части души, вначале попросить их посмотреть друг на друга. И потом попросить медленно сближаться».