|
1 / 1 / 2
Регистрация: 23.06.2010
Сообщений: 95
|
|
Вычисление формул28.07.2010, 11:31. Показов 4243. Ответов 27
Метки нет (Все метки)
0
|
|
| 28.07.2010, 11:31 | |
|
Ответы с готовыми решениями:
27
Расчет формул, синтаксический анализатор Обратная Польская Нотация на большом наборе формул |
|
9 / 9 / 1
Регистрация: 26.05.2010
Сообщений: 36
|
|
| 28.07.2010, 13:27 | |
|
Синтаксическим разбором. Почитать можно, вбив в гугл "вычисление выражений".
По поводу простоты для частного случая -- нужно более конкретно знать, что за "формула"
0
|
|
|
1 / 1 / 2
Регистрация: 23.06.2010
Сообщений: 95
|
|
| 28.07.2010, 14:01 [ТС] | |
|
el Gato Estelar, Программа должна быть универсальной для всех формул.
Где я только не искал. Везде искал.
0
|
|
|
Padawan
473 / 323 / 30
Регистрация: 30.01.2010
Сообщений: 1,841
|
|
| 28.07.2010, 14:02 | |
|
Единственный совет от меня, используйте деревья для разбора выражений. Иначе будет попа.
0
|
|
|
1 / 1 / 2
Регистрация: 23.06.2010
Сообщений: 95
|
|
| 28.07.2010, 15:37 [ТС] | |
|
Другими словами нужно сначала записать в инфексной, префексной или в постфиксной записи.
А по другому можно?
0
|
|
|
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
|
||||||
| 28.07.2010, 16:21 | ||||||
|
Лично я бы делал рекурсивным спуском
примерно так
Надо сделать для чисел бинарные +, -, * и / и унарные + и -.
Грамматика:
Функция умножения парсит Значение и сколько угодно раз повтор: оператор умножения и Значение. Аналогично функция сложения парсит Умножение и любое число повторов: оператор сложения и Умножение. Функция выражения здесь есть фукнция сложения, как самая низкориоритетная операция.
0
|
||||||
|
1 / 1 / 2
Регистрация: 23.06.2010
Сообщений: 95
|
|
| 28.07.2010, 16:23 [ТС] | |
|
Vovan-VE, Вы не учитываете скобки.
0
|
|
|
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
|
||||||
| 28.07.2010, 16:29 | ||||||
|
anton9017, Учитываю.
Добавлено через 18 секунд
0
|
||||||
|
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
|
|
| 28.07.2010, 18:57 | |
|
Да, тут надо делать рекурсивным спуском. Посимвольно проходите строку, считая "сумму" скобок, пока не наступит момент, что вы находитесь на операторе и текущая "сумма" скобок равна 0. Тогда делите выражения на две части: что до оператора и что после и рекурсивно считаете их значения.
Если хотите, могу вам кинуть свою прогу на С++, она считает f(x) при заданном значении x, в том числе если в выражении встречаются стандартные функции, типа синуса и т.п.
0
|
|
|
Технофашист
228 / 216 / 11
Регистрация: 11.03.2009
Сообщений: 887
|
|
| 28.07.2010, 21:18 | |
|
Вообще можно ПОЛИЗ использовать. Он как раз для этих целей существует.
Добавлено через 2 минуты Насчёт рекурсивного спуска - это как из гранатомёта по воробьям палить. Не тот калибр.
0
|
|
|
Технофашист
228 / 216 / 11
Регистрация: 11.03.2009
Сообщений: 887
|
|
| 28.07.2010, 21:23 | |
|
Вот наглядный пример. Здесь правдо элементарные операции одни, но скажу наперёд - практически все функции аналогичны скобкам. И это намного проще реализовать.
0
|
|
|
1 / 1 / 2
Регистрация: 23.06.2010
Сообщений: 95
|
|
| 29.07.2010, 19:49 [ТС] | |
|
darkAngel, Что такое ПОЛИЗ?
Добавлено через 17 минут Грымзик, Скиньте, я посмотрю.
0
|
|
|
Технофашист
228 / 216 / 11
Регистрация: 11.03.2009
Сообщений: 887
|
|
| 29.07.2010, 20:05 | |
|
Польская инверсаня запись. Придумана как раз для таких задач.
http://ru.wikipedia.org/wiki/%... 0%98%D0%97
0
|
|
|
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
|
|
| 30.07.2010, 15:09 | |
|
У обратной польской нотации нельзя сделать унарные операторы.
0
|
|
|
1 / 1 / 2
Регистрация: 23.06.2010
Сообщений: 95
|
|
| 30.07.2010, 17:27 [ТС] | |
|
Я завел Вас немного не в то направление. У меня есть не формула, а выражение.
К примеру 2+2*(2+2*2+2). Нужно составить программу на Delphi, которая бы считала такие варажения.
0
|
|
|
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
|
|
| 30.07.2010, 17:31 | |
|
0
|
|
|
1 / 1 / 2
Регистрация: 23.06.2010
Сообщений: 95
|
|
| 30.07.2010, 17:32 [ТС] | |
|
Хорошо.
0
|
|
|
|
||
| 13.10.2010, 09:25 | ||
|
0
|
||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 13.10.2010, 09:41 | |
|
Vovan-VE
Почему же нельзя сделать унарные операторы у ОПН? Можно просто написать дополнительную функцию для их парсинга. Ведь унарный оператор может стоять только либо в самом начале выражения, либо перед скобкой. Разберём на примере унарного минуса: Если в скобках первое число имеет унарный минус, его сразу можно парсить как отрицательное. Если перед скобкой видим минус - заменяем символ унарного оператора на "-1*". Поскольку числа с унарным минусом мы парсим без проблем, при преобразовании выражения в ОПН всё будет ништяк, такое выражение "-(2 + 2)*(-3 + 2)" спокойно преобразуется в "-1 2 2 + * -3 2 + *".
0
|
|
|
|
||
| 13.10.2010, 09:51 | ||
|
0
|
||
| 13.10.2010, 09:51 | |
|
Помогаю со студенческими работами здесь
20
Вычисление математических формул Вычисление математических формул Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|