powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Формула в "string".
13 сообщений из 13, страница 1 из 1
Формула в "string".
    #32808322
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такая вот задачка:
надо дать клиенту возможность изменять цифровое поле с помощью формулы, которую он сам может вводить. Т.е. имеются поля sle_1 и sle_2. в sle_1 цифра "25"; в sle_1 клиент пишет: "* 3 + 5". Теперь, при нажатии на кнопочку, значение в sle_2 должно измениться на "80".
...
Рейтинг: 0 / 0
Формула в "string".
    #32808369
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RiskaТакая вот задачка:
надо дать клиенту возможность изменять цифровое поле с помощью формулы, которую он сам может вводить. Т.е. имеются поля sle_1 и sle_2. в sle_1 цифра "25"; в sle_1 клиент пишет: "* 3 + 5". Теперь, при нажатии на кнопочку, значение в sle_2 должно измениться на "80".Если задача действительно настолько тривиальна, как вы написали, то Describe("Evaluate...") . Если сложнее - попробуйте ORCA
...
Рейтинг: 0 / 0
Формула в "string".
    #32808394
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 PL99
А можно конкретный пример. Я так понял, что это всего одна строчка, так что много времени у Вас не займет[[rolleyes]]
...
Рейтинг: 0 / 0
Формула в "string".
    #32808407
f45f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО не все так просто.
А если скобки, т.е. там приоритет операций. Когда то я писал подобный интерпретатор. Через рекурсию реализовать можно довольно изящно. Тока не знаю, PB поддерживает рекурсию?
...
Рейтинг: 0 / 0
Формула в "string".
    #32808416
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
f45fИМХО не все так просто.
А если скобки, т.е. там приоритет операций. Когда то я писал подобный интерпретатор. Через рекурсию реализовать можно довольно изящно. Тока не знаю, PB поддерживает рекурсию?
Я понимаю, что не все просто. Но хотелось бы знать, с чего начать. После этого простого примера должно пойти легче.
...
Рейтинг: 0 / 0
Формула в "string".
    #32808438
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Riska 2 PL99
А можно конкретный пример. Я так понял, что это всего одна строчка, так что много времени у Вас не займет[[rolleyes]]
Хм... Попробуем...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
// cb_evaluate clicked event :-)
string ls_Expression, ls_Result
datastore lds
ls_Expression = sle_1.text
ls_Expression += sle_2.text
if ls_Expression <> "" then 
 lds = create datastore
 lds.dataobject = "d_dummy" // любой имеющийся или можно создать динамически
 if lds.insertRow( 0 ) >  0  then 
  ls_Result = lds.Describe ("Evaluate('" + ls_Expression + "', 1)") // не запутайтесь со скобками и апострофами/кавычками :-) (C) ЗоринАндрей
  MessageBox ("", ls_Result)
 end if
end if
Примерно так.
...
Рейтинг: 0 / 0
Формула в "string".
    #32808444
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
f45fТока не знаю, PB поддерживает рекурсию?
А как он ее должен по Вашему "поддерживать"?
Не... не так... как он ее по Вашему может не поддерживать?

f45fИМХО не все так просто.
А что - есть какие-то проблемы у Describe(evaluate(...)) со скобками или приоритетом ?
...
Рейтинг: 0 / 0
Формула в "string".
    #32808447
f45f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть строка например

а+(b+с)

Пишешь рекурсивную функцию например f1(string s):result integer
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
while not eof(s) do begin
  int temp
  пробегаешь строку до первого "+"
  temp = a
  далее если скобка то
  temp = temp + f1(b+c)
end;
  return temp

приблизительно, думаю направление понятно. Google нам поможет.

2 Зорин Андрей
авторА что - есть какие-то проблемы у Describe(evaluate(...)) со скобками или приоритетом ?
доселе не сталкивался, буду разбираться . . .
...
Рейтинг: 0 / 0
Формула в "string".
    #32808466
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
f45f Тока не знаю, PB поддерживает рекурсию?
Поддерживает, не поддерживает. Любой алгоритм можно и без рекурсии реализовать. Смотрим про обратную польскую нотацию AKA польскую инверсную запись. Реализуется при помощи стека, который легко реализуется при помощи массива.
...
Рейтинг: 0 / 0
Формула в "string".
    #32808480
f45f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк f45f Тока не знаю, PB поддерживает рекурсию?
Поддерживает, не поддерживает. Любой алгоритм можно и без рекурсии реализовать. Смотрим про обратную польскую нотацию AKA польскую инверсную запись. Реализуется при помощи стека, который легко реализуется при помощи массива.

Интересно. Примерчик или ссылку можно?
...
Рейтинг: 0 / 0
Формула в "string".
    #32808493
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну набирите эти слова в google'е польская инверсная запись (полиз) обратная польская нотация. Куча ссылок.
...
Рейтинг: 0 / 0
Формула в "string".
    #32808858
Фотография ChV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рекурсивные функции в PB работают. Проверено.
...
Рейтинг: 0 / 0
Формула в "string".
    #32809276
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99 Riska 2 PL99
А можно конкретный пример. Я так понял, что это всего одна строчка, так что много времени у Вас не займет[[rolleyes]]
Хм... Попробуем...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
// cb_evaluate clicked event :-)
string ls_Expression, ls_Result
datastore lds
ls_Expression = sle_1.text
ls_Expression += sle_2.text
if ls_Expression <> "" then 
 lds = create datastore
 lds.dataobject = "d_dummy" // любой имеющийся или можно создать динамически
 if lds.insertRow( 0 ) >  0  then 
  ls_Result = lds.Describe ("Evaluate('" + ls_Expression + "', 1)") // не запутайтесь со скобками и апострофами/кавычками :-) (C) ЗоринАндрей
  MessageBox ("", ls_Result)
 end if
end if
Примерно так.
Большое спасибо. Работает.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Формула в "string".
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]