Страницы

Поиск по вопросам

Показаны сообщения с ярлыком булева-алгебра. Показать все сообщения
Показаны сообщения с ярлыком булева-алгебра. Показать все сообщения

вторник, 28 января 2020 г.

Если НЕ одно из двух определённых значений, то умолчание. Как сделать это в PHP?

#php #булева_алгебра #логические_выражения


Мой скрипт на PHP принимает два языковых значения - &lang=ru или &lang=en. Если параметр
lang явно не указан или равен любому другому значению, то значение по умолчанию должно
быть установлено в en. Я несколько раз прочитал документацию по логическим операторам
в PHP, но так и не могу понять, как реализовать проверку


  если не ((lang = "en") или (lang = "ru")) тогда lang = "en" 


на PHP. На привычном мне Паскале я легко делаю вот так:

if not ((lang = 'en') or (lang = 'ru')) then lang := 'en';


Я потратил уйму времени, пытаясь реализовать эту нехитрую конструкцию на PHP, но
у меня ничего не получается. Силюсь понять что я делаю не так вот в этом коде:

if (!(($lang == "en") || ($lang == "ru"))) {
  $lang = "en";
};



Решение проблемы

После того, как Anton Shchyrov указал, что логическое выражение совершенно правильное,
я начал отлаживать скрипт и нашел ошибку.

Через полсотни строк я не заметил ошибку, характерную для тех, у кого нет опыта программирования
на языках, по синтаксису похожих на C/C++/PHP. Ниже проблемный кусок кода, который
останавливает шоу:

$Link = "https://www.domain.dummy/page.html;
if ($lang = "ru") {
  $Link = str_replace("dummy", "ru", $Link);
} else {
  $Link = str_replace("dummy", "co.uk", $Link);
}


Присвоение значения переменной в условии if () не может не впечатлять, но из-за этого
скрипт, разумеется, "снесло".

Не знаю как поступить в данном случае - следует ли попросить закрыть вопрос или оставить его?
    


Ответы

Ответ 1



Ну раз уж все в ответы пишут=) if (!in_array($lang, ['es', 'en', 'ru', 'fr'])) $lang = "en"; Любое количество предопределённых языков в одном условии. А ещё можно тернарно $lang = in_array($lang, ['es', 'en', 'ru', 'fr']) ? $lang : "en"; Список предопределяемых языков это массив который можно хранить в переменной $langs = ['es', 'en', 'ru', 'fr']; // Аналогично $langs = array('es', 'en', 'ru', 'fr');

Ответ 2



Мой скрипт на PHP принимает два языковых значения - &lang=ru или &lang=en. Если параметр lang явно не указан или равен любому другому значению, то значение по умолчанию должно быть установлено в en. Дефольтный язык en, если задан ru то язык будет ru. $lang = !isset($lang) || $lang !== 'ru'? 'en': 'ru'; echo $lang;

Ответ 3



:D Раз уж такая движуха... Сложно было придумать что-то новенькое, но я справился: switch ($lang) { case 'ru': case 'en': break; default: $lang = 'en'; break; }

пятница, 27 декабря 2019 г.

Минимизация булевых функций (получение МДНФ)

#cpp #алгоритм #дискретная_математика #булева_алгебра


Ещё в прошлом году у меня был курс дискретной математики, и с её основами я знаком.
Мне бы хотелось, что бы вы помогли мне с написанием алгоритма получения ДНФ, и объяснения
того, как из ДНФ перейти в МДНФ. 

Я ищу любой пример реализации этой задачи, не обязательно на C++. Главное, что бы
был понятен алгоритм получения ДНФ и МДНФ. Было бы здорово, если бы вы развёрнуто прокомментировали
алгоритм (что на входе, что на выходе, и т.д.).

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


Ответы

Ответ 1



Посмотрите вот этот проект. Если ссылка со временем окажется битой - гуглите Quine-McCluskey minimizer.

четверг, 28 марта 2019 г.

Если НЕ одно из двух определённых значений, то умолчание. Как сделать это в PHP?

Мой скрипт на PHP принимает два языковых значения - &lang=ru или &lang=en. Если параметр lang явно не указан или равен любому другому значению, то значение по умолчанию должно быть установлено в en. Я несколько раз прочитал документацию по логическим операторам в PHP, но так и не могу понять, как реализовать проверку
если не ((lang = "en") или (lang = "ru")) тогда lang = "en"
на PHP. На привычном мне Паскале я легко делаю вот так:
if not ((lang = 'en') or (lang = 'ru')) then lang := 'en';
Я потратил уйму времени, пытаясь реализовать эту нехитрую конструкцию на PHP, но у меня ничего не получается. Силюсь понять что я делаю не так вот в этом коде:
if (!(($lang == "en") || ($lang == "ru"))) { $lang = "en"; };
Решение проблемы
После того, как Anton Shchyrov указал, что логическое выражение совершенно правильное, я начал отлаживать скрипт и нашел ошибку.
Через полсотни строк я не заметил ошибку, характерную для тех, у кого нет опыта программирования на языках, по синтаксису похожих на C/C++/PHP. Ниже проблемный кусок кода, который останавливает шоу:
$Link = "https://www.domain.dummy/page.html; if ($lang = "ru") { $Link = str_replace("dummy", "ru", $Link); } else { $Link = str_replace("dummy", "co.uk", $Link); }
Присвоение значения переменной в условии if () не может не впечатлять, но из-за этого скрипт, разумеется, "снесло".
Не знаю как поступить в данном случае - следует ли попросить закрыть вопрос или оставить его?


Ответ

Ну раз уж все в ответы пишут=)
if (!in_array($lang, ['es', 'en', 'ru', 'fr'])) $lang = "en";
Любое количество предопределённых языков в одном условии.
А ещё можно тернарно
$lang = in_array($lang, ['es', 'en', 'ru', 'fr']) ? $lang : "en";
Список предопределяемых языков это массив который можно хранить в переменной
$langs = ['es', 'en', 'ru', 'fr']; // Аналогично $langs = array('es', 'en', 'ru', 'fr');