![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| zenit |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 2.10.2006 Репутация: нет Всего: нет |
Друзья, мне нужно модифицировать код калькулятора. Он уже умеет считать функции из строки ввода, но с помощью eval(), соотвественно с теми недостатками, что пользователь может вводить неразрешаемые нелепые строки. Я уже ограничил возможнности ввода, не допуская букв и спец цимволов. Но необходим парзинг ввода относительно скобок и операторов, чтобы не было ввозможности ввести что-то типа (((())))))*/. Вопрос: нужно ли мне реализовать что-то наподомие автомата или грамматики, ведь возмможны унарные и бинарные операторы, мне нужно будет запоминать все блоки в скобках и реагировать на непарные открывающиеся/закрывающиеся скобки. Если у кого-нибудь есть такой скрипт, было бы идеально. Или хотя бы псевдо код для вычисления +, -, *, / , sqart, sq, cos, sin, tan, ln, ехп..Большое человеческое спасибо!!!
|
|||
|
||||
| NightmareZ |
|
|||
![]() [хакер] ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 10.8.2006 Репутация: нет Всего: 13 |
Напишу за $20.
-------------------- NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш Ely-Art.ru - наша маленькая домашняя арт-студия mugcraft.ru - кружки на любой вкус |
|||
|
||||
| Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 3 Всего: 191 |
zenit, ну тут работки много
Посмотри готовый http://club.itdrom.com/gallery/gal_program/bisisoft/292.html может возьмешь себе пару идей на вооружение. А в совет к тебе, приходит в голову только один - писать много регулярок на это 100 % |
|||
|
||||
| NightmareZ |
|
|||
![]() [хакер] ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 10.8.2006 Репутация: нет Всего: 13 |
Регулярки тут нафик не нужны. -------------------- NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш Ely-Art.ru - наша маленькая домашняя арт-студия mugcraft.ru - кружки на любой вкус |
|||
|
||||
| Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 3 Всего: 191 |
||||
|
||||
| Michael.de |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 22.3.2005 Где: Deutschland Репутация: 2 Всего: 9 |
zenit, лучше вместо строки ввода использовать кнопки 0-9, A-F, +, -, *, /, ^, ф-ции и т.д. , а корректность ввода регулировать возможностью клика по кнопке (нажал на "+" - "-", "*" и т.п. становятся неактивными; открыл скобку - закр. скобка неактивна etc.)... т.е. ограничить "креативность" юзера
А считать всё выражение придётся находя самую "вложенную" открывающую скобку и считая выражение, находящееся между ней и соотв. закрывающей {примерчик: (..)+((..)-(..)) }. Ну и соответственно в выражении (A+B^C*D) учитываем старшинство операций (2,3,1). P.S. Естественно что A, B, C и D находятся как сочетания символов, находящиеся между разделителями {скобки и всякие там "+"} Это сообщение отредактировал(а) Michael.de - 22.5.2009, 22:43 |
|||
|
||||
| Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 55 Всего: 137 |
Не очень понятна целесообразность использования ф-ции eval()?
Данная функция довольно сильно тормозит систему и, если ее можно заменить, настоятельно рекомендованно именно так и поступить. |
|||
|
||||
| Viroman |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 28.7.2008 Репутация: нет Всего: нет |
А в чём проблема? Считай количество скобок открывающих и закрывающих, не сходится, брысь. Ищи операторы друг за другом, коль имеется, брысь.. По мне, так регулярками больший мозготрах, чем ручками.. |
|||
|
||||
| NightmareZ |
|
||||
![]() [хакер] ![]() ![]() Профиль Группа: Участник Сообщений: 699 Регистрация: 10.8.2006 Репутация: нет Всего: 13 |
Фёдор, ты не прав. Твоя метода на такое расположение скобок ))(( скажет, что они правильные, а это не так. Тут нужно стек завести. Потом перебираем по порядку скобки:
З.Ы. Этот алгоритм подходит, когда могут быть сразу несколько типов скобок, например: [, ], (, ), {, }. Если же скобки только одного типа могут быть, можно обойтись без стека, а юзать лишь счётчик. -------------------- NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш Ely-Art.ru - наша маленькая домашняя арт-студия mugcraft.ru - кружки на любой вкус |
||||
|
|||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |