Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/47: Рейтинг темы: голосов - 47, средняя оценка - 4.53
2 / 2 / 0
Регистрация: 28.07.2011
Сообщений: 35

Преобразование строки в математическое выражение

25.03.2013, 22:25. Показов 9819. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер уважаемые форумчане. Пишу программу на php, по методам оптимизации. Все вроде работает, но хотелось бы узнать как перевести строку в формулу.
Допустим есть такая функция
PHP
1
2
3
function fn($x){
      return pow($x,2) - 2 * $x + 2;
}
Мне нужно, что бы эту формулу можно было бы изменять динамически, ну то есть через формы.
Я пробовал использовать eval(), но у меня не получилось. Возможно что-то не так делал:
PHP
1
2
3
4
function fn($x){
   $str = 'return pow($x,2) - 2 * $x + 2;';
    eval($str);
}
Тут правда пример просто с вводом, но позже будет использовано что-то типо
PHP
1
$str = $_POST["func"];
Если какие-нибудь варианты кроме написания парсера?
Спасибо.
P.S. Извините если ошибся подразделом.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.03.2013, 22:25
Ответы с готовыми решениями:

Преобразование текста в математическое выражение
Допустим, я ввожу в текстовое поле следующее: (5 + 5)^2 А программа преобразует это в Math.Pow(5 + 5, 2) и вычисляет. Как можно...

Перевод строки в математическое выражение
Добрый день, Есть ли готовые решения (методы) для перевода строки в математическое выражение?

Из строки посчитать математическое выражение
Суть задачи в том, что задается булевая функция в базисе (отрицание, коньюнкция и дизъюнкция, скобочные выражения тоже будут), ну по сути...

12
Невнимательный
 Аватар для ft4l
2836 / 1262 / 358
Регистрация: 08.02.2013
Сообщений: 7,353
Записей в блоге: 2
25.03.2013, 22:49
imho eval('return ....') не получится (мб ошибаюсь)
return eval('.......'); + переменные должны быть не в строке, типа 'pow('. $x .',2) - 2 * '. $x .' + 2;'

Добавлено через 3 минуты
$str = $_POST["func"];
не боитесь что выполнят какое-нибудь 'exec("FORMAT volume /V:X")' ?
1
2 / 2 / 0
Регистрация: 28.07.2011
Сообщений: 35
25.03.2013, 22:58  [ТС]
Цитата Сообщение от ft4l Посмотреть сообщение
imho eval('return ....') не получится (мб ошибаюсь)
return eval('.......'); + переменные должны быть не в строке, типа 'pow('. $x .',2) - 2 * '. $x .' + 2;'

Добавлено через 3 минуты

не боитесь что выполнят какое-нибудь 'exec("FORMAT volume /V:X")' ?
Сделал так как вы написали:
PHP
1
2
3
4
function fn($x){
    $str = 'pow('. $x .',2) - 2 * '. $x .' + 2;';
    return eval($str);
}
Результат тот же. Функция ничего не возвращает.
На счет безопасности: я буду использовать страничку в приделах localhost. Так что этот вопрос пока не особо беспокоит
0
Невнимательный
 Аватар для ft4l
2836 / 1262 / 358
Регистрация: 08.02.2013
Сообщений: 7,353
Записей в блоге: 2
25.03.2013, 23:21
+ переменные должны быть не в строке
или мне уже надо идти спать

а чего пытаетесь подсунуть этой функции ?

Добавлено через 13 минут
странно, у меня работает только с двойными кавычками
PHP
1
2
3
4
5
6
function fn($x){
    eval("\$x =$x;");
     return pow($x,2) - 2 * $x + 2;
}
 
echo  fn( '2+2' );
0
2 / 2 / 0
Регистрация: 28.07.2011
Сообщений: 35
25.03.2013, 23:21  [ТС]
Цитата Сообщение от ft4l Посмотреть сообщение
или мне уже надо идти спать

а чего пытаетесь подсунуть этой функции ?
То есть, подсунуть?
В функцию передаю точки а и b:
PHP
1
2
$Fa = fn($aot);
$Fb = fn($bot);
Функция должна вернуть значение в этих точках
0
Невнимательный
 Аватар для ft4l
2836 / 1262 / 358
Регистрация: 08.02.2013
Сообщений: 7,353
Записей в блоге: 2
25.03.2013, 23:23
вообще-то нет, так тоже работает
eval('$x ='. $x .';');
0
2 / 2 / 0
Регистрация: 28.07.2011
Сообщений: 35
25.03.2013, 23:44  [ТС]
Попытался упростить:
PHP
1
2
3
function fn($x){
        return eval('2 * '. $x .';');
}
Не работает
0
 Аватар для fa2m
356 / 280 / 22
Регистрация: 27.08.2012
Сообщений: 855
26.03.2013, 00:48
PHP
1
2
3
function fn($x){
        eval('$var = 2 * '. $x .';'); return $var;
}
1
2 / 2 / 0
Регистрация: 28.07.2011
Сообщений: 35
26.03.2013, 13:40  [ТС]
Цитата Сообщение от fa2m Посмотреть сообщение
PHP
1
2
3
function fn($x){
        eval('$var = 2 * '. $x .';'); return $var;
}
Спасибо, так работает. Однако теперь вопрос в том, возможно ли через _POST передать эту строку, что бы ее выполнил evar() ?
0
 Аватар для fa2m
356 / 280 / 22
Регистрация: 27.08.2012
Сообщений: 855
26.03.2013, 13:42
Возможно! А в чём затык проблема? ))
0
2 / 2 / 0
Регистрация: 28.07.2011
Сообщений: 35
26.03.2013, 13:58  [ТС]
Цитата Сообщение от fa2m Посмотреть сообщение
Возможно! А в чём затык проблема? ))
PHP
1
2
3
4
function fn($x){
        eval('$var = $_POST["func"];');
        return $var;
}
Сделал так, но функция возвращает просто строку, а не значение функции.
0
 Аватар для fa2m
356 / 280 / 22
Регистрация: 27.08.2012
Сообщений: 855
26.03.2013, 14:04
Возможно так нужно?
PHP
1
2
3
4
function fn($x){
        eval('$var = ' . $_POST['func'] . ';');
        return $var;
}
если не работает, покажите что именно содержится в $_POST['func']
1
2 / 2 / 0
Регистрация: 28.07.2011
Сообщений: 35
26.03.2013, 14:06  [ТС]
Цитата Сообщение от fa2m Посмотреть сообщение
Возможно так нужно?
PHP
1
2
3
4
function fn($x){
        eval('$var = ' . $_POST['func'] . ';');
        return $var;
}
если не работает, покажите что именно содержится в $_POST['func']
Спасибо! Все заработало.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.03.2013, 14:06
Помогаю со студенческими работами здесь

Выполнить математическое выражение из строки
Приветствую! Скажите, есть 2 строки: strVal = "2" strExpr = "* 3 - (2+4)" надо высчитать выражение, как по правилам...

Функция по переводу из строки в математическое выражение с последующим расчетом
Нужна функция на подобии eval в JS. Есть математическое выражение в TextBox. Например, 4 * 5 или Sin(5) * Cos(4) нужно расчитать...

Анализатор вводимой строки с целью вычислить введенное математическое выражение
Привет! Пишу для себя простенький мат анализатор вводимой строки с целью вычислить введенное математическое выражение. Найденные мною...

Преобразование строки в выражение
Уважаемые коллеги, возникла интересная проблема, которую, честно говоря, с наскока не знаю как решить. Может кто-то сталкивался и у кого-то...

Преобразование строки в выражение
Добрый день. Необходимо нарисовать график двух (заданных пользователем) функций на одной координатной плоскости, заданных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru