Это довольно сложная задача. Даже если кроме умножения и сложения в строке ничего нет. Если там показательные уравнения, логарифмы и производные - то это уже супер сложная задача.
Если плюсы и умножения(без возведения в степень), то:
1. Раскрываем скобки
2. Переносим все слагаемые с иксом влево, без икса - вправо
3. Выносим Х за скобку
4. Делим правую часть на скобку возле икса.
Самое сложное - первый пункт. Скорее всего нужно построить синтаксическое дерево. Его узлами будет такая структура:
struct {
operation;
operand1;
operand2;
}
operation - сложение или умножение, операнды - это операнды. Они могут быть как числами, так и такими же структурами.
В PHP это удобно ассоциативным массивом реализовать.
Как его формировать? Рекурсивно. Функция tree():
- Скобка открылась - передаем дальнейшую часть в функцию tree();
- Скобка открылась - выходим из функции.
- Число - нашли операнд - +-/* - нашли оператор. Изначально всё выражение можно обернуть в скобки перед первым вызовом функции для общности.
Теперь можно раскрывать скобки - от самого нижнего уровня дерева. Раскрыли скобки самого нижнего уровня, предпоследний уровень стал нижним и так до верху.
Теперь получилась простая для разбора строка, с которой уже можно работать функциями обработки строк. Берем коэффициенты перед иксом и формируем из них делитель для правой части.
ВэйДлин пишет:Студент колледжа информационных технологий не МГКИТ?)
PS Надо бы сделать чтоб один и тот же топик был всегда доступен по одной и той же ссылки, куда бы его не переносили. Во-первых, эта ссылка шлется автору топика при создании темы. Во-вторых, индексируется поисковиками. В-третьих, пока я писал этот длинный ответ, модератор перенес тему и вместо сохранения поста я увидел "такой темы не существует" - потмоу что ссылка поменялась. Хорошо, что есть файрбаг и я смог вытащить то, что писал. Иначе я бы расстроился
|