![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Форумчанин
Регистрация: 16.02.2010
Сообщений: 187
|
![]()
Здравствуйте
вот такой вроде не сложный но в тоже время интересный вопрос, как сделать действия над числами если они все в одной строке и разделены знаками, например: S:='1+2+2-3+5-1='; пробовал сделать так но что то запутался в парсе( Код:
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
я выкладывал готовый парсер - тут
p.s. там исходники, код несложный, легко разберётесь, если нужно. p.p.s. Вычисление результата выражений. Допустимые операции: + - * / Приоритет обычный, для изменения приоритета допускается задание скобок ( в т.ч. вложенных). |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 15.12.2007
Сообщений: 422
|
![]()
Да, лучше всего так как написал Serge_Bliznykov, но если хочется пострадать фигней, то можно через цикл for проверять каждый элемент строки на знаки +, - и если такие находятся то складывать или вычитать число предыдущее и следующее. Но а если будет знак * или / тогда задача на порядок усложняется. Поэтому не страдайте фигней и используйте парсер
![]() |
![]() |
![]() |
![]() |
#4 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
А я бы не морочил голову а скормил бы все это Экзелу, или какому нить ОпенОфису:
http://www.programmersforum.ru/showthread.php?t=100279
I'm learning to live...
|
![]() |
![]() |
![]() |
#5 | |
Форумчанин
Регистрация: 16.02.2010
Сообщений: 187
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#6 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Дык просто бери код и вставляй, не забыв оказать в дизайне события соответствующие.
Он откроет Экзель, скормит ему формулу в ячейку (Экзель сразу ее посчитает, он умный), и получит результат, который выведет в заголовок формы
I'm learning to live...
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 16.02.2010
Сообщений: 187
|
![]()
если не сложно подскажите кодом, и что такое Экзель пытался поискать в google инфы по нём нету)
|
![]() |
![]() |
![]() |
#8 |
Участник клуба
Регистрация: 07.07.2007
Сообщений: 1,518
|
![]()
Экзель - это Excel.
По сабжу: Компоненты CalcExpress и DiffExpress - это интерпретаторы для вычисления математических выражений. Поддерживают 5 операций, скобки, 18 математических функций и определение пользовательских переменных. P.S. Я когда-то писал программу с БД и в одно из строковых полей вставлял формулу (типа Summa = "(Kolichestvo * Cena) + NDS"), по которой какие-то поля этой строки должны рассчитываться. А бухгалтер при необходимости могла сама изменять формулу (разумеется, только с существующими переменными). Мне же самому ЛЕНЬ изменять формулу и перекомпилировать программу. Ох, всё от лени. Все это выглядело очень эффектно :=)) Последний раз редактировалось _SERGEYX_; 30.09.2010 в 15:53. |
![]() |
![]() |
![]() |
#9 | |
Форумчанин
Регистрация: 16.02.2010
Сообщений: 187
|
![]()
я вот не пойму причём тут формула)))) тут же не по формуле нужно что то сделать, а сделать действия над числами(-,+)
поставил DiffExpress.pas, думал так разберусь глянув в компонент) но не тут то оно было ![]() вот что это значит из примера ? Цитата:
|
|
![]() |
![]() |
![]() |
#10 | ||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
Цитата:
![]() Кстати вспомнил тут еще один финт Код:
![]()
I'm learning to live...
|
||
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Действия над неизвестными | korsmile | Общие вопросы Delphi | 3 | 04.09.2010 18:54 |
действия над многочленами | nuevegramodelamor | Помощь студентам | 4 | 21.06.2010 01:31 |
линейные действия над векторами | morgan996 | Помощь студентам | 4 | 09.01.2010 00:13 |
Действия над массивами | hen | Помощь студентам | 2 | 06.06.2009 23:34 |
Pascal действия над числами | werser | Помощь студентам | 1 | 13.11.2008 22:55 |