![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Osrus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 443 Регистрация: 4.12.2004 Репутация: нет Всего: 3 |
Наврняка кто-нибудь писал таковой, если простой какой-нибудь есть, покажите код, интересно как это выглядит
-------------------- Шагнул на скользкий путь красноглазия... Long live Socialism! |
|||
|
||||
Secandr |
|
|||
![]() Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 5 Всего: 39 |
Калькулятор на php - изврат, тебе придётся перегружать каждый раз страничку.
Есть смысл писать калькулятор на jsvsscript. |
|||
|
||||
Black |
|
|||
![]() Web-Development ![]() ![]() Профиль Группа: Участник Сообщений: 980 Регистрация: 15.8.2004 Репутация: 7 Всего: 45 |
Можно с помощью нуль фрейма передавать данные и при помощи JavaScript выводить данные в <div></div>
Однако, как сказал Secandr калькултор на PHP - это полное извращение над человечеством :-) -------------------- Могу все, но ничего не умею :-) |
|||
|
||||
Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 4 Всего: 317 |
Да ладно в консоли запустил и вперёд. Только зачем оно нужно?
-------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
Рыжий |
|
|||
![]() Помешанный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1423 Регистрация: 19.9.2004 Репутация: 2 Всего: 20 |
Я например когда писал то просто делал 2 страници, на одной я размещал формы для заполнения, а на второй сам скрипт и все
PS обращался я к переменным при помощи их имен в параметре <input type=text name="name"> |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 5 Всего: 360 |
А зачем? Ведь есть Google
![]() А msn даже уравнения вырешивает ![]() |
|||
|
||||
Рыжий |
|
||||
![]() Помешанный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1423 Регистрация: 19.9.2004 Репутация: 2 Всего: 20 |
Кстати вот нашел код если что не понятно - пиши:
Этот файл сохрани как хочешь, а следующий - hello.php Вот он:
Он будет только складывать (думаю остальное ты догадаешься). Он будет выполнять действия только с целыми числами, если хочешь чтобы дробные считал - дай им другой тип (думаю тоже поймешь ![]() |
||||
|
|||||
Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 4 Всего: 317 |
Это совсем никуда, калькулятор должен разбирать выражения. Это не сложно
![]() -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 5 Всего: 360 |
Вот кстати, как должен он работать
![]() 3*х^2=6 Только мелкомягкие вообще математику не уважают ![]() ![]() ![]() |
|||
|
||||
penizillin |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 10.11.2004 Репутация: 8 Всего: 9 |
чем он неверен? 6 знаков после запятой вам мало?
|
|||
|
||||
sergejzr |
|
||||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 5 Всего: 360 |
Нет, мне другое глаз режет. Вот за такие знаки "=" ставят две двойки с минусом в четвёртом классе средней школы ![]()
|
||||
|
|||||
penizillin |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 10.11.2004 Репутация: 8 Всего: 9 |
это да.
|
|||
|
||||
Наставник |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 4.11.2004 Репутация: 2 Всего: 15 |
Кстати, господа, если уж зашла речь, а как на Ваш взгляд проще разбирать выражения -- что использовать бин. деревья, или теорию конечных автоматов. Мне было бы интересно послушать ответы, просто делал как-то такое сам (конечно не на php, но все же) и как-то честно признаюсь фигово это все работало.
Это сообщение отредактировал(а) Наставник - 17.12.2004, 07:24 |
|||
|
||||
Secandr |
|
|||
![]() Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 5 Всего: 39 |
не деревья не теорию автоматов не знаю
![]() |
|||
|
||||
Наставник |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 4.11.2004 Репутация: 2 Всего: 15 |
Вот так и я делал, в лоб - разбирал, приоритеты выставлял и со скобками мучился... но потом меня попросили, чтобы этот парсер ещё мог разбирать и тригонометрические выражения, всего-то шесть sin, cos и т. д. и вот мне тут настала полная ж**а, т.к. тяжело было вносить изменения в уже существующий код...
|
|||
|
||||
Pilgrim Anton |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 17.12.2004 Репутация: 1 Всего: 1 |
Можно использовать конечные состояния вместе с рекурсией.
В принципе это – не особо сложно. Рекурсия разбивает выражение на атомы, а с атомами работают конечные состояния. |
|||
|
||||
Наставник |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 4.11.2004 Репутация: 2 Всего: 15 |
quote=Pilgrim Anton, 17.12.2004, 17:55]Рекурсия разбивает выражение на атомы, а с атомами работают конечные состояния[/quote]
Это что-то типа "Разделяй и властвуй" - хм, кстати может быть и замечательная идея... хм, хотелось бы узнать, как с помощью рекурсии разбивать выражения на атомы, я понимаю там быстрая сортировка или подсчет факториала, когда данные однородные, но в данном случае данные не одного формата (числа, скобки и sin, cos ...) |
|||
|
||||
Pilgrim Anton |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 17.12.2004 Репутация: 1 Всего: 1 |
Наставник
Для начала нужно сформулировать что есть атом. Когда это станет понятно, то, думаю дальше пойдет легче. Еще идея: можно проставить недостающие скобки - это и будет разбиением на атомы. |
|||
|
||||
Наставник |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 4.11.2004 Репутация: 2 Всего: 15 |
Хм, может оно верно
но, как-то не могу выделить атом из потока данных.
К сожалению не понял, что Вы хотели этим сказать. А вообще чтобы не просто так говорить, лучше на примере всё это объснять, вот допустим очень простое выражение 2+(cos(34*6)+80 - (25^3))*11.5+((34/5-8)+exp(4*2+90)) Какие есть идеи? Это сообщение отредактировал(а) Наставник - 17.12.2004, 18:23 |
||||
|
|||||
Pilgrim Anton |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 17.12.2004 Репутация: 1 Всего: 1 |
Давайте разберем пример попроще: 3+6/8*cos(4+6*2)
Итак, 3+6/8*cos(4+6*2)= (3+((6/8)*(cos((4+(6*2)))))) В результате, каждое выражение находится в скобках, причем скобки строго указывают последовательность действий. |
|||
|
||||
Наставник |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 4.11.2004 Репутация: 2 Всего: 15 |
хорошо, можно и попроще. - но это ведь, по меньшей мере, маразм ![]() итак 3+6/8*cos(4+6*2) - можно вот с этим выражением повозиться, кроме анализатора, не представляю возможности как это можно было бы посчитать. Тут когда я парсер делал, мне попалась интересная статья, что можно разбирать выражения проще, если вначале их перевести в обратную польскую запись, тогда скобки убираются, и последовательность действий легко выполняется, найду сейчас пример... Добавлено @ 18:46 это по поводу тупого анализатора - Я так понимаю... создаем таблицу , в которой будет храниться операция и приоритет её, потом простым сравнением входного выражения с таблицей выполняем куски выражений -- но тут возникаем, как лучше хранить посчитанные куски выражения, в стек их пихать или как, просто встраивать во все выражение Это сообщение отредактировал(а) Наставник - 17.12.2004, 18:47 |
|||
|
||||
Pilgrim Anton |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 17.12.2004 Репутация: 1 Всего: 1 |
Атомом первого рода будем считать:
число. Атомом второго рода будем считать: 1) любой оператор L(a, b), где a, b - атомы первого рода (Например: +(2, 3)=2+3); 2) любой оператор L(a) , где а - атом первого рода (например: Cos(90)) Выражением будем считать: Оператор L(a, b), где 1) a - атом первого рода, b -атом второго рода 2) a - атом второго рода, b -атом первого рода 3) a - атом второго рода, b -атом второго рода 4) a или b - выражение Оператор L(a), где 1) а - атом второго рода 2) а - выражение Это - разбивка на атомы и выражения. Скобки нужны для разбивки на атомы, хотя над этим стоит еще подумать ![]() Это сообщение отредактировал(а) Pilgrim Anton - 17.12.2004, 18:52 |
|||
|
||||
Наставник |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 4.11.2004 Репутация: 2 Всего: 15 |
Хм, в теории более мение понятно... хотя конечно лучше на практическом примере.
Добавлено @ 18:58 Вот пример польской нотации.. (a*(c+d)+(e+f)*g)/(j+i) получим /+*a+cd*+efg+ji а в обратной польской нотации acd+*ef+g*+ji+/ а вот очень простой пример допустие есть выражение a*b+c Переводим в обратную польскую нотацию, получаем ab*c+ ---> ВЫПОЛНЕНИЕ загрузить a в аккумулятор A1 поместить в стек содержимое A1 загрузить b в аккумулятор A1 поместить в стек содержимое A1 извлечь из стека и поместить в аккумулятор A2 извлечь из стека и поместить в аккумулятор A1 выполнить умножение поместить в стек содержимое A1 загрузить c в аккумулятор A1 поместить в стек содержимое A1 извлечь из стека и поместить в аккумулятор A2 извлечь из стека и поместить в аккумулятор A1 выполнить умножение Это сообщение отредактировал(а) Наставник - 17.12.2004, 19:09 |
|||
|
||||
Pilgrim Anton |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 17.12.2004 Репутация: 1 Всего: 1 |
Цитата с сайта http://mathmatrix.narod.ru/AlgorR.html Надо попробовать будет |
|||
|
||||
Наставник |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 4.11.2004 Репутация: 2 Всего: 15 |
Насчет обратной польской записи я привел в ДОПОЛНЕНИЕ пример..
Добавлено @ 19:12 А вообще классная статья. (поставил бы +, да не могу.) Это сообщение отредактировал(а) Наставник - 17.12.2004, 19:13 |
|||
|
||||
Secandr |
|
|||
![]() Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 5 Всего: 39 |
Да интересная статья, повысил репутацию.
|
|||
|
||||
EXTR |
|
|||
Unregistered |
Исходник на JS, может понадобится.
|
|||
|
||||
Alx |
|
|||
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: 6 Всего: 78 |
ну тогда и мой пример посмотрите!
![]() ![]() http://portfolio.alx.com.ru/scripts/javascript/sumball2.html |
|||
|
||||
Наставник |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 4.11.2004 Репутация: 2 Всего: 15 |
Не это не дело на ЖаваСкрипт писать, так как встроенная функция eval - сама разбирает и вычисляет выражение, разговор же идет о том как лучше САМОМУ написать программу-скрипт - синтаксический анализатор.
Да и ваш пример, тоже :--((( Смысл, в чем -- как это функция - eval работает, вот тут интересно, а так, тут и думать почти не надо. |
||||
|
|||||
Vinipoo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 15.3.2006 Репутация: нет Всего: нет |
Пришлите программу РНР калькулятор, кто нибудь, сложный калькулятор.
|
|||
|
||||
Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 13 Всего: 78 |
Что сложного? Конкретизируйте, пожалуйста...
-------------------- Ll 2 |
|||
|
||||
CyClon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 3.12.2005 Репутация: 3 Всего: 4 |
Хм, хочу написать калькулятор на PHP. Вот токо нада кнопки как-то заделать ан JS. У нас просто на информатике, в школе, все VB долбят, а я в блокноте пишу
![]() |
|||
|
||||
Ciber SLasH |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1813 Регистрация: 9.11.2004 Где: С.-Петербург Репутация: 3 Всего: 67 |
Имхо нерационально делать калькулятор на PHP, разве тока для баловства. Если и делать, то только на JS.
|
|||
|
||||
B2_Russia |
|
|||
![]() В доску свой :) ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 3.7.2003 Где: Тверь Репутация: нет Всего: 1 |
Сорри что тему поднял, но всеже... Столкнулся с такой проблемой. Нужно написать калькулятор, именно на PHP! И нерациональность тут не при чем, я пишу калькулятор автострахования пользователь вводит не математическую формулу, а параметры такие как возраст, стаж вождения, марку авто, стоимость авто, и т.д. Система по этим параметрам заполняет некий набор переменных значениями. Эти переменные используются функцией при вычислении результата. Система должна позволять менять формулу расчета. Клиент, вводит данные и должен получить только результат расчета. Так вот задача вполне востребованная, если ктото встречал решения, был бы премного благодарен ознакомиться с ним. Возможно ктото знает как использовать ParserFunctions Вобщем, если кому интересно, давайте добьем тему, возможно она пригодится не один еще раз. Нужно предоставить пользователю возможность редактирования формулы, и соответственно написать скрипт который эту формулу сможет разобрать и вычислить. Я впринципе представляю как это можно сделать, разбор можно реализовать при помощи рекурсивного парсера с использованием регулярок. Так как формулы будут довольно простыми, то на производительности использование регулярных выражений не должно сказаться, ну можно и без них в конце концов обойтись, не суть важно. Это сообщение отредактировал(а) B2_Russia - 19.9.2007, 23:53 |
|||
|
||||
B2_Russia |
|
|||
![]() В доску свой :) ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 3.7.2003 Где: Тверь Репутация: нет Всего: 1 |
Вобщем сделал, сами формулы считаю через eval с деревьями и пр. париться не стал =)
Сделал возможность многострочной формулы со временными переменными (складываю в стек), плюс обрабатываются условные выражения ЕСЛИ {cond} ТО {expr;expr;...} ИНАЧЕ {expr;expr;...} Значения переменных подставляю через preg_replace();
Вобщем париться не стал абсолютно, все максимально для себя упростил (мне сейчас главное результат выкатить), если кто захочет обсудить - вэлком, я его несомненно буду оптимизировать/менять и т.п., так что актуально. Если кто что полезное посоветует буду рад! Для наглядности скрин как это выглядит. Присоединённый файл ( Кол-во скачиваний: 40 ) ![]() |
|||
|
||||
spectrre |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 22.4.2008 Репутация: нет Всего: нет |
А можно еще небольшой пример использования данного класса разместить?? Очень заинтересовало, предстоит почти аналогичная задачка... |
|||
|
||||
awers |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1465 Регистрация: 22.3.2006 Где: Россия, Таганрог Репутация: 21 Всего: 31 |
spectrre, может лучше о таком писать в ПМ, а не поднимать тему 2004 года
|
|||
|
||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
||||
|
||||
CyClon |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 3.12.2005 Репутация: 3 Всего: 4 |
Как-то на олимпиаде по информатике попалась задачка, сделать парсер полинома:
Добавлено @ 19:43 Вообще сам калькулятор примерно так будет:
Это сообщение отредактировал(а) CyClon - 22.4.2008, 19:44 |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |