Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Упрощение выражения

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
ВэйДлин
Отправлено: 06 Декабря, 2011 - 19:36:07
Post Id


Гость


Покинул форум
Сообщений всего: 84
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




Например
Цитата:
((5+((x/2)-2))*((x-3)*4))+x=y
((5*(x-5))*((x/2)-4))+x=y
((3+(x+4))*((x-5)*4))*x=y
((4*((x/2)-5))+((x/2)-2))*x=y

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

Например из
((5*(x-5))+(x-4))+x=y
5*x-25+x-4+x=y
7*x-29=y
7*x=y+29
x=(y+29)/7 - Вот что я должен получить в итоге!
 
 Top
OrmaJever Модератор
Отправлено: 06 Декабря, 2011 - 19:41:01
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Идея забавная но сложная и вот так просто вам никто не скинет рабочий код


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Данил_123
Отправлено: 06 Декабря, 2011 - 19:47:56
Post Id


Участник


Покинул форум
Сообщений всего: 1026
Дата рег-ции: Июнь 2011  
Откуда: rostov


Помог: 9 раз(а)




ВэйДлин школьник? Я только для квадратных уравнений делал(дискриминант, х1, х2).. Это сложно, тоб местами меняло, знаки меняло и так подробно расписывало

(Отредактировано автором: 06 Декабря, 2011 - 20:15:21)



-----
http://mysitecost.ru
 
 Top
ВэйДлин
Отправлено: 06 Декабря, 2011 - 19:50:11
Post Id


Гость


Покинул форум
Сообщений всего: 84
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




Уже не надо, ща буду париться с массивами... Тему офф
ВэйДлин пишет:
школоло?

Нет) Студент колледжа информационных технологий

(Отредактировано автором: 06 Декабря, 2011 - 19:53:51)

 
 Top
Champion Супермодератор
Отправлено: 06 Декабря, 2011 - 20:00:57
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Это довольно сложная задача. Даже если кроме умножения и сложения в строке ничего нет. Если там показательные уравнения, логарифмы и производные - то это уже супер сложная задача.
Если плюсы и умножения(без возведения в степень), то:
1. Раскрываем скобки
2. Переносим все слагаемые с иксом влево, без икса - вправо
3. Выносим Х за скобку
4. Делим правую часть на скобку возле икса.

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

PS Надо бы сделать чтоб один и тот же топик был всегда доступен по одной и той же ссылки, куда бы его не переносили. Во-первых, эта ссылка шлется автору топика при создании темы. Во-вторых, индексируется поисковиками. В-третьих, пока я писал этот длинный ответ, модератор перенес тему и вместо сохранения поста я увидел "такой темы не существует" - потмоу что ссылка поменялась. Хорошо, что есть файрбаг и я смог вытащить то, что писал. Иначе я бы расстроился
 
 Top
ВэйДлин
Отправлено: 06 Декабря, 2011 - 20:07:48
Post Id


Гость


Покинул форум
Сообщений всего: 84
Дата рег-ции: Май 2011  


Помог: 0 раз(а)




Champion Спс за совет
Champion пишет:
не МГКИТ?)

СПБКИТ
 
 Top
Данил_123
Отправлено: 06 Декабря, 2011 - 20:12:11
Post Id


Участник


Покинул форум
Сообщений всего: 1026
Дата рег-ции: Июнь 2011  
Откуда: rostov


Помог: 9 раз(а)




Champion типов решений достаточно много ведь: уравнение типа (х - 1)(х + 2) = 0 то решением будет приравняв каждую скобку к 0.. Ну или а(2) + 2аb + b(2) = 0.. То тут уже формула, и описать ее достаточно трудно


-----
http://mysitecost.ru
 
 Top
Champion Супермодератор
Отправлено: 06 Декабря, 2011 - 20:30:23
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




ВэйДлин пишет:
СПБКИТ
Ну тоже КИТ)
Данил_123 пишет:
типов решений достаточно много
Ну да, я оговорился о том, что самое простое - без степеней - умножение и сложение.
Не думаю, что задача сложнее и в примере этого нет. Если сложнее, то тут простым описанием не напишешь
 
 Top
DlTA
Отправлено: 06 Декабря, 2011 - 22:52:17
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




знакомы делал подобное, сначала раскрывал скобки получив в итоге
a0X^0+a1X^1+a2X^2+...anX^n=0
а уже потом по известным формулам
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB