Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP
Войти
Регистрация
Восстановить пароль
 
Блеф
> /dev/null
284 / 118 / 85
Регистрация: 14.05.2014
Сообщений: 767
#1

Как правильно скорректировать порядок выполнения вычислений

03.03.2015, 16:20. Просмотров 320. Ответов 8
Метки нет (Все метки)

Как правильно скоректировать порядок выполнения вычеслений математических уровнений например:

(35-30)*45+11.5/7
В c++ для этого используються токены(лексемы) но так и не поннял как они реализуються. Есть какие то примеры кода или статьи на этому? Правильно составить запрос в поисковик не получилось..

Спасибо.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2015, 16:20
Ответы с готовыми решениями:

Как поменять скорректировать имя что-бы отображалось правильно ?
Кто может дать пример кода что бы сделать так ? Из базы берется имя...

Общий порядок выполнения для всей скриптов
Добрый день есть задания которые выполняются по cron, у меня есть ограничение...

Не получается скорректировать скрипт
Используя данные с базы данных, мне нужно строить графики. Пробовал Гугл чарт,...

Как правильно организовать итерационный процесс вычислений
Запутался немного в итерациях. Сначала L=L0, находится ti=qf/L(=L0)+tж, она...

Интерфейсы, прошу скорректировать меня, правильно ли я начал
Ребята, спасибо что Вы есть. Но вот проблема. Мой код кажется мне убогим,...

8
UchihaSV
221 / 182 / 92
Регистрация: 08.06.2013
Сообщений: 614
03.03.2015, 17:31 #2
Не совсем понял ваш вопрос.
Порядок вычислений математических уравнений как обычно в математике - сначала выполняется то что в скобках и умножение/деление выполняется в первую очередь.

Почему бы вам не пользоваться обычными математическими методами, например ставить скобки, для изменения приоритета выполнения.
0
Блеф
> /dev/null
284 / 118 / 85
Регистрация: 14.05.2014
Сообщений: 767
03.03.2015, 18:06  [ТС] #3
UchihaSV, это все понятно. Но если данные приходят как строка?

Добавлено через 56 секунд
мда забыл про eval();
PHP
1
eval(" echo (35-30)*45+11.5/7;");
есть ли другие способы? Для общего развития..
0
UchihaSV
221 / 182 / 92
Регистрация: 08.06.2013
Сообщений: 614
03.03.2015, 18:32 #4
bleef159, опять не совсем понятно, объясните подробнее и желательно с примером кода, чтобы была полная картина вашей проблемы.

Добавлено через 14 минут
А ну если уравнение в строке, то проще всего eval(), но можно и сделать парсер через регулярку preg_replace().

Добавлено через 8 минут
Вот есть готовый класс, для решения вашей проблемы: http://www.phpclasses.org/package/20...variables.html
1
SB5Ch
57 / 57 / 46
Регистрация: 01.03.2015
Сообщений: 179
03.03.2015, 19:52 #5
В соответствии с приоритетом операторов.
http://php.net/manual/ru/language.operators.precedence.php

Добавлено через 14 минут
Цитата Сообщение от bleef159 Посмотреть сообщение
есть ли другие способы? Для общего развития..
Можно написать рекурсивную функцию для вычисления значения выражение, но проще, конечно, сделать это eval'ом.
0
Блеф
> /dev/null
284 / 118 / 85
Регистрация: 14.05.2014
Сообщений: 767
03.03.2015, 20:13  [ТС] #6
UchihaSV, задачи передомной не какой не стояло, просто вспомнил про книгу по c++ в котором разбирался калькулятор. Ну естественно хотел как поннять как реализовать эти лексемы на php. Вот сейчас только вспомнил что Пых у нас такой "уникальный" и существует такая конструкция как eval(). За preg_replace() отдельное спасибо с регулярками не когда не дружил, сейчас попробую.

Да, уровнение в строке должно быть.

Добавлено через 4 минуты
SB5Ch, приоретет операторов мне известен. Боюсь представить как будет выглядить рекурсивная функция для работы с математическими выражениями...
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16750 / 6641 / 862
Регистрация: 12.06.2012
Сообщений: 19,887
Завершенные тесты: 1
03.03.2015, 23:29 #7
точно также и надо реализовывать, не надо eval-ить. Насколько я понимаю, вы говорите про книгу "Язык программирования C++" Страуструпа? Возьмите алгоритм оттуда и перепишите на PHP - все тоже самое, только код чуть упростится.
Цитата Сообщение от bleef159 Посмотреть сообщение
Боюсь представить как будет выглядить рекурсивная функция для работы с математическими выражениями
Лучше представьте, сколько памяти это скушает при более-менее большом выражении Да и не очень-то это удобно будет.
0
Блеф
> /dev/null
284 / 118 / 85
Регистрация: 14.05.2014
Сообщений: 767
04.03.2015, 21:21  [ТС] #8
KOPOJI, да "Принципы и практика использования c++". Спасибо, попробую.
А почему использование eval в данном случае - плохо? Понимаю что не безопастно, но а если жестко фильтровать входящие параметры?
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16750 / 6641 / 862
Регистрация: 12.06.2012
Сообщений: 19,887
Завершенные тесты: 1
04.03.2015, 21:30 #9
bleef159, потому что толком не сделаешь, например, ту же проверку на ноль при делении - вместо простенькой проверки на ноль делителя необходимо писать обработчик и устанавливать его через set_error_handler.
Это если навскидку..
0
04.03.2015, 21:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2015, 21:30

Порядок вычислений C++
Каков порядок вычисления для этого предложения,какие предположения можно...

Как более правильно разместить переменную-флаг правильности вычислений?
Привет. Вычисления, в которых могут быть ошибки заключил в Try - Catch. Как...

Как правильно обработать порядок арифметических операций?
Делаю что-то вроде обработчика выражений, как в Excel... Есть входящая...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru