Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2013
Помог: 0 раз(а)
ребята, помогите пожалуйста, надо написать калькулятор выражений типа: 3+4-8/2
т.е. в input вводиться это выражение, нажимаю на submit и оно считается.
только есть одно но: не использовать eval
я новичок, только пытаюсь освоить php и этот калькулятор нужен в учебных целях =)
спасибо всем, кто ответит.
Skycrafter
Отправлено: 19 Апреля, 2013 - 05:13:25
Гость
Покинул форум
Сообщений всего: 85
Дата рег-ции: Март 2013
----- Тысячемильный путь начинается с первого шага...
Medallion
Отправлено: 19 Апреля, 2013 - 16:26:17
Частый гость
Покинул форум
Сообщений всего: 253
Дата рег-ции: Май 2012 Откуда: Херсон, Украина
Помог: 7 раз(а)
Просто в php умножение и деление бери в скобки, тоесть в input заганяй в таком виде: 3+4-(8/2) и php будет считать.
DelphinPRO
Отправлено: 19 Апреля, 2013 - 16:38:47
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
пишем лексический анализатор ru.wikipedia.org/wiki/Рекурсивны й_нисходящий_парсер
( Конечный автомат для парсера удобно будет рисовать в этой программке - http://www[dot]yworks[dot]com/en/products_yed_about[dot]html )
отдаем ему на вход выражение, на выходе получаем поток токенов (лексем)
поток токенов отдаем на вход синтаксического анализатора, который проверит корректность выражения. на выходе получаем синтаксическое дерево с данными. Рекурсивно обрабатываем полученные данные, вычисляя значение выражения. Профит!
в общем, фигня делов - вечерок посидеть.
PS А вы уверены, что для освоения php вам нужно написать именно калькулятор? Задачка, в общем-то не простая, с наскока не решить.
Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2013
Помог: 0 раз(а)
что-то попыталась сделать: получилось как-то так.
вопросы в функции convert, еще не знаю как скобки прописать(
там одна фукция из инфиксной записи перефодит в обратную польскую нотацию, вторая считает выражение.
Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2013
Помог: 0 раз(а)
получилось так, только вот перевод в обратную польскую запись все равно не правильный(
он сначала берет все числа и записывает их, а потом к ним прибовляет все знаки =( так не должно быть...
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.