Таблица истинности на php

Блог

пожалуйста, помогите этому глупому мальчику получить результаты.

Комментарии:

1. Я уверен, что битовые маски были бы лучшим решением для этого!

2. @saint: Вы имеете в виду en.wikipedia.org/wiki/Karnaugh_map ? Пожалуйста, уточните свой вопрос!?

3. @epitaph: en.wikipedia.org/wiki/Truth_table — Игнорируйте комментарии к битовым маскам, думал, мы говорим о чем-то другом

4. @Robert: Я не знал, что таблицу истинности можно создать с помощью двоичного кода. Помогло ли это найти условие гонки или минимальный срок? Какова святая цель создания таблицы истинности?

5. @epitaph: Я создаю процесс, который автоматически генерирует некоторые результаты и сохраняет их в db. в процессе результаты объединяются друг с другом с некоторым условием И / ИЛИ для описания наилучшего решения. я сохранил все результаты в массиве с помощью operator, как я показал в array выше. существует несколько решений. для достижения единого решения я объединил результаты и применил таблицу истинности.

Ответ №1:

вы думали о создании таблицы истинности с обратными вызовами, например:

 $table = array(); $table[] = array( 'name' => 'equals', 'call' => 'check_equals' ); $table[] = array( 'name' => 'or', 'call' => 'check_or' ); $myData = array( true => true, false => true, true => false, true => -1, ) foreach($myData as $first => $second) < foreach($table as $check) < echo $check['name'] . call_user_func($check['call'],$first,$second) ? 'good' : 'bad'; > > 

adn затем просто создайте свои обратные вызовы следующим образом:

 function check_or($f1,$f2) < return $f1 || $f2; > function check_equals($f1,$f2) < return $f1 === $f2; > 

Ответ №2:

 //( [0] => true [1] => OR [2] => true [3] => AND [4] => false [5] => AND [6] => true) function boolstr($val) < if($val=='true') return true; elseif($val=='false') return false; > function row_operator($arrValue)< $i=-2; $j=-1; foreach( $arrValue as $val ) < if($i 3 > count($arrValue)) break; $boolste = boolstr($arrValue[$i 2]); if(isset($res)) < if($arrValue[$j 2]=='AND') $res = $res amp;amp; $boolste; elseif($arrValue[$j 2]=='OR') $res = $res || $boolste; if($res==true) $a='true'; else $a= 'false'; $j = 2; > else $res = $boolste; $i = 2; > return $res; > 

Источник

Логические операции — Основы PHP

Языки программирования адаптировали все математические операции сравнения в неизменном виде, кроме операторов равенства и неравенства. В математике для этого используется обычное равно = , но в программировании такое встречается редко.

Во многих языках символ = используется, чтобы присвоить переменным значения. Поэтому в PHP сравнивают с помощью == .

Список операций сравнения:

Эти операции применяются не только к числам. Например, с помощью оператора равенства можно сравнить строки: password == text — это сравнение идентичности строк, которые записаны в разных переменных.

Логический тип

Логическая операция типа 5 > 4 или password == text — это выражение. Его результат — специальное значение True («истина») или False («ложь»). Это новый для нас тип данных — bool :

 $result = 5 > 4; print_r($result); // => true print_r('one' !== 'one'); // => false 

Он содержит всего лишь два этих значения. Наряду со строками (string) и целыми и рациональными числами, булев тип (bool) — это один из примитивных типов данных в PHP.

Предикаты

Попробуем написать простую функцию, которая принимает на вход возраст ребенка и определяет, младенец ли он. Младенцами считаются дети до года.

Любая операция — это выражение, поэтому единственной строчкой функции пишем «вернуть то значение, которое получится в результате сравнения age < 1 ». В зависимости от того, какой аргумент пришел, сравнение будет истинным ( True ) или ложным ( False ), а return вернет этот результат:

 function isInfant($age)  return $age  1; > // Для вывода bool используем var_dump(), а не print_r() var_dump(isInfant(3)); // => bool(false) var_dump(isInfant(0.5)); // => bool(true) 

Подобные функции называют предикатами. Функции-предикаты отвечают на какой-то вопрос и всегда возвращают либо true , либо false .

Предикаты во всех языках принято именовать особым образом для простоты анализа. В PHP предикаты, как правило, начинаются с префикса is , has или can , но не ограничены этими словами. Примеры:

  • isInfant() — «младенец ли?»
  • hasChildren() — «есть ли дети?»
  • isEmpty() — «пустой ли?»
  • hasErrors() — «есть ли ошибки?»

Комбинирование операций и функций

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

Остаток от деления — простая, но важная концепция в арифметике, алгебре, в теории чисел и криптографии. Нужно разделить число на несколько равных групп, и если в конце что-то останется — это остаток от деления.

Делим конфеты поровну между людьми:

  • 7 конфет, 2 человека: 2 x 3 + остаток 1 — 7 не кратно 2
  • 21 конфету, 3 человека: 3 x 7 + остаток 0 — 21 кратно 3
  • 19 конфет, 5 человек: 5 x 3 + остаток 4 — 19 не кратно 5

Оператор % вычисляет остаток от деления:

С помощью него напишем функцию проверки четности:

 function isEven($number)  return $number % 2 === 0; > isEven(10); // true isEven(3); // false 

В одном выражении мы скомбинировали логический оператор проверки равенства === и арифметический оператор % .

Приоритет арифметических операций выше логических. Значит, сначала вычисляется арифметическое выражение $number % 2 , затем результат участвует в логическом сравнении.

Это можно расшифровать так:

«Вычислить остаток от деления числа $number на 2 и сравнить, равен ли остаток нулю; затем вернуть результат проверки равенства»*

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

Логические выражения могут объединяться друг с другом, создавая все более хитрые проверки.

Хороший пример — проверка пароля. Как вы знаете, некоторые сайты при регистрации хотят пароль от 8 до 20 символов в длину.

Нам придется сделать два отдельных логических выражения и соединить их специальным оператором «И»:

 function hasSpecialChars($str)  // Проверяет содержание специальных символов в строке > // Функция принимает пароль и проверяет, соответствует ли он условиям function isCorrectPassword($password)  $length = strlen($password); // Скобки задают приоритет, чтобы показать, что к чему относится return ($length >= 8 && $length  20) && hasSpecialChars($password); > isCorrectPassword('qwerty'); // false isCorrectPassword('qwerty1234'); // true isCorrectPassword('zxcvbnmasdfghjkqwertyui'); // false 

Оператор && означает «И» — в математической логике это называют конъюнкцией. Все выражение считается истинным только в том случае, когда истинен каждый операнд — каждое из составных выражений. Иными словами, && означает «и то, и другое». Приоритет этого оператора ниже, чем приоритет операторов сравнения, поэтому выражение отрабатывает правильно без скобок.

Кроме && , часто используется оператор || — «ИЛИ» (дизъюнкция). Он означает «или то, или другое, или оба». Операторы можно комбинировать в любом количестве и любой последовательности, но когда одновременно встречаются && и || , то приоритет лучше задавать скобками.

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

И &&

ИЛИ ||

A B A ‖ B
TRUE TRUE TRUE
TRUE FALSE TRUE
FALSE TRUE TRUE
FALSE FALSE FALSE

Отрицание

Наряду с конъюнкцией (И) и дизъюнкцией (ИЛИ), часто используется операция «отрицание». Отрицание меняет логическое значение на противоположное.

В программировании ему соответствует унарный оператор ! . Если есть функция, проверяющая четность числа, то с помощью отрицания можно выполнить проверку нечетности:

 function isEven($number)  return $number % 2 === 0; > isEven(10); // true !isEven(10); // false // В логике двойное отрицание подобно отсутствию отрицания вообще !!isEven(10); // true 

Мы просто добавили ! слева от вызова функции и получили обратное действие. Отрицание — мощный инструмент, который позволяет лаконично выражать задуманные правила в коде без необходимости писать новые функции.

Слабая типизация

Напомним, что PHP — это язык со слабой типизацией:

  • Он знает о существовании разных типов (числа, строки и так далее)
  • При этом он относится к их использованию не очень строго, пытаясь преобразовывать информацию, когда это кажется разумным

Особенно много автоматических преобразований происходит при работе с логическими операциями. В PHP есть два простых правила, по которым происходят преобразования:

  • 0 , null и пустая строка » приводятся к false , поэтому эти значения называют falsy
  • Все остальное превращается в true

Это работает и в другую сторону. И true , и false преобразовываются в другие типы данных в зависимости от ситуации:

 print_r(true); // => 1 print_r(false); // => (на экран выводится пустая строка) print_r(0 || 1); // => 1 

Оператор ИЛИ работает только с типом bool, но ему даны числа 1 и 0 :

  1. 0 преобразуется в false , а 1 преобразуется в true
  2. Результат false || true — это true
  3. Теперь print_r() получает true , но он работает только со строками
  4. true преобразуется в 1
  5. И на экран выводится 1

Здесь важно отметить также отличие операторов == и === . Оно как раз заключается в преобразовании типов.

Пустая строка и false — это разные значения, поэтому оператор === говорит «Ложь! Они не равны!».

Но оператор == преобразует типы. С его точки зрения, пустая строка и false равны. Это преобразование неявное, поэтому по возможности избегайте операторов == и != :

 var_dump('' === false); // => false var_dump('' == false); // => true 

Вспомним операцию отрицания. При двойном отрицании !! итоговое значение равно начальному:

 $answer = true; var_dump(!$answer); // => false var_dump(!!$answer); // => true 

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

В разных языках программирования разные правила преобразований. Некоторые языки вообще не преобразовывают типы сами.

Дополнительные материалы

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Об обучении на Хекслете

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Наши выпускники работают в компаниях:

Источник

Логические операции php

Прежде чем мы будем обсуждать логические операции в php, рассмотрим таблицу истинности:

таблица истинности

У нас на входе есть два операнда X1 и X2, они могут принимать значения 0 или 1. 0 — значит «ложь», 1 — «истина».

Давайте же узнаем о 4 основных логических операциях и что они значат:

  • X1, X2 — обычные переменные.
  • !X1 — логическое отрицание, если X1 = 0, то 1, а если X1 = 1, то 0 это просто.
  • X1 || X2 — логическое «или», если одно значение X1 или X2 равно 1, то и операция равна единице, только если X1 и X2 равно 0 и операция будет равна 0.
  • X1 && X2 — логическое «и», результат 1, только когда оба значения X1 и X2 равны 1.
  • X1 ^ X2 — логическое исключающее «или», если хоть одно значение у X1 и X2 равно 1, результат будет равен 1.

Перейдём к практике, создадим 2 переменные x и y, а также две булевские переменные(которые могут применять значения 0 или 1).

 $y; $rez2 = $x < $y; $rez3 = $x == $y; $rez4 = $x >= $y; echo "$x > $y = $rez1
"; echo "$x < $y = $rez2
"; echo "$x == $y = $rez3
"; echo "$x >= $y = $rez4
";

Выведем результат и получим на экране:

Где мы получили истину — результат 1, а где 0 (в php пустое значение и есть 0) — это ложь. Тут все понятно, давайте перейдём к более сложным примерам.

В результате получим 0, логическое отрицание меняет истину на ложь и наоборот.

 $y) || ($x == $x); echo "($x > $y) || ($x == $x) = $rez6
";

Получим истину, ведь одно из выражений верное ($x == $x).

Получим ложь, ведь одно из выражений неверное ($x > $y), чтобы получить истину, оба должны быть истинными.

Логическое «отрицающее или»

 $y) ^ ($x == $x); echo "($x > $y) ^ ($x == $x) = $rez8
";

Получим истину, ведь одно из выражений истина.

Далее вам следует узнать о логической конструкции if-else, об этом читайте в — if-else в php с примерами.

Источник

Читайте также:  Python json to class object
Оцените статью