Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> научный калькулятор, необходим алгоритм/код калькулятора на я 
:(
    Опции темы
zenit
Дата 20.5.2009, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 2.10.2006

Репутация: нет
Всего: нет



Друзья, мне нужно модифицировать код калькулятора. Он уже умеет считать функции из строки ввода, но с помощью eval(), соотвественно с теми недостатками, что пользователь может вводить неразрешаемые нелепые строки. Я уже ограничил возможнности ввода, не допуская букв и спец цимволов. Но необходим парзинг ввода относительно скобок и операторов, чтобы не было ввозможности ввести что-то типа (((())))))*/. Вопрос: нужно ли мне реализовать что-то наподомие автомата или грамматики, ведь возмможны унарные и бинарные операторы, мне нужно будет запоминать все блоки в скобках и реагировать на непарные открывающиеся/закрывающиеся скобки. Если у кого-нибудь есть такой скрипт, было бы идеально. Или хотя бы псевдо код для вычисления +, -, *, / , sqart, sq, cos, sin, tan, ln, ехп..Большое человеческое спасибо!!!
PM MAIL   Вверх
NightmareZ
Дата 20.5.2009, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


[хакер]
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 10.8.2006

Репутация: нет
Всего: 13



Напишу за $20.


--------------------
NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш
Ely-Art.ru - наша маленькая домашняя арт-студия
mugcraft.ru - кружки на любой вкус
PM WWW ICQ Skype GTalk AOL YIM   Вверх
Samotnik
Дата 22.5.2009, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 3
Всего: 191



zenit, ну тут работки много  smile  т.е. не работки а мороки. 
Посмотри готовый http://club.itdrom.com/gallery/gal_program/bisisoft/292.html  может  возьмешь себе пару идей на вооружение.
А в совет к тебе, приходит в голову только один - писать много регулярок  smile 
Цитата(zenit @  20.5.2009,  14:07 Найти цитируемый пост)
чтобы не было ввозможности ввести что-то типа (((())))))

на это 100 %
PM MAIL   Вверх
NightmareZ
Дата 22.5.2009, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


[хакер]
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 10.8.2006

Репутация: нет
Всего: 13



Цитата(Samotnik @  22.5.2009,  16:13 Найти цитируемый пост)
А в совет к тебе, приходит в голову только один - писать много регулярок

Регулярки тут нафик не нужны.


--------------------
NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш
Ely-Art.ru - наша маленькая домашняя арт-студия
mugcraft.ru - кружки на любой вкус
PM WWW ICQ Skype GTalk AOL YIM   Вверх
Samotnik
Дата 22.5.2009, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 3
Всего: 191



Цитата(NightmareZ @  22.5.2009,  16:22 Найти цитируемый пост)
Регулярки тут нафик не нужны.


ну я же сказал, что это первое, что пришло в голову  smile 
Я же не настаиваю. Я дал хороший пример,  нормального инженерного калькулятора, можно посмотреть в его код и взять кое-что себе  smile 
PM MAIL   Вверх
Michael.de
Дата 22.5.2009, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 22.3.2005
Где: Deutschland

Репутация: 2
Всего: 9



zenit, лучше вместо строки ввода использовать кнопки 0-9, A-F, +, -, *, /, ^, ф-ции и т.д. , а корректность ввода регулировать возможностью клика по кнопке (нажал на "+" - "-", "*" и т.п. становятся неактивными; открыл скобку - закр. скобка неактивна etc.)... т.е. ограничить "креативность" юзера smile
А считать всё выражение придётся находя самую "вложенную" открывающую скобку и считая выражение, находящееся между ней и соотв. закрывающей {примерчик: (..)+((..)-(..)) }. Ну и соответственно в выражении (A+B^C*D) учитываем старшинство операций (2,3,1). smile

P.S. Естественно что A, B, C и D находятся как сочетания символов, находящиеся между разделителями {скобки и всякие там "+"} smile

Это сообщение отредактировал(а) Michael.de - 22.5.2009, 22:43
PM MAIL   Вверх
Aliance
Дата 22.5.2009, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Не очень понятна целесообразность использования ф-ции eval()?
Данная функция довольно сильно тормозит систему и, если ее можно заменить, настоятельно рекомендованно именно так и поступить.
PM MAIL WWW ICQ Skype   Вверх
Viroman
Дата 23.5.2009, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 28.7.2008

Репутация: нет
Всего: нет



Цитата

(((())))))*/

А в чём проблема? Считай количество скобок открывающих и закрывающих, не сходится, брысь. Ищи операторы друг за другом, коль имеется, брысь.. По мне, так регулярками больший мозготрах, чем ручками..
PM MAIL   Вверх
NightmareZ
Дата 23.5.2009, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


[хакер]
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 10.8.2006

Репутация: нет
Всего: 13



Цитата(Viroman @ 23.5.2009,  23:28)
Цитата

(((())))))*/

А в чём проблема? Считай количество скобок открывающих и закрывающих, не сходится, брысь. Ищи операторы друг за другом, коль имеется, брысь.. По мне, так регулярками больший мозготрах, чем ручками..

Фёдор, ты не прав. Твоя метода на такое расположение скобок ))(( скажет, что они правильные, а это не так.
Тут нужно стек завести. Потом перебираем по порядку скобки:
  • Если скобка открывающая, кидаем её в стек.
  • Если скобка закрывающая вытаскиваем из стека открывающую скобку.
  • Если скобка за и стек пуст, значит расположение скобок неправильное.
  • Если скобки закончились и стек пуст, значит расположение скобок неправильное.
  • Если скобки закончились и стек пуст, значит всё ок.

З.Ы. Этот алгоритм подходит, когда могут быть сразу несколько типов скобок, например: [, ], (, ), {, }. Если же скобки только одного типа могут быть, можно обойтись без стека, а юзать лишь счётчик.



--------------------
NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш
Ely-Art.ru - наша маленькая домашняя арт-студия
mugcraft.ru - кружки на любой вкус
PM WWW ICQ Skype GTalk AOL YIM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0493 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.