Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Формула в "string". / 13 сообщений из 13, страница 1 из 1
01.12.2004, 18:37
    #32808322
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формула в "string".
Такая вот задачка:
надо дать клиенту возможность изменять цифровое поле с помощью формулы, которую он сам может вводить. Т.е. имеются поля sle_1 и sle_2. в sle_1 цифра "25"; в sle_1 клиент пишет: "* 3 + 5". Теперь, при нажатии на кнопочку, значение в sle_2 должно измениться на "80".
...
Рейтинг: 0 / 0
01.12.2004, 19:07
    #32808369
PL99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формула в "string".
RiskaТакая вот задачка:
надо дать клиенту возможность изменять цифровое поле с помощью формулы, которую он сам может вводить. Т.е. имеются поля sle_1 и sle_2. в sle_1 цифра "25"; в sle_1 клиент пишет: "* 3 + 5". Теперь, при нажатии на кнопочку, значение в sle_2 должно измениться на "80".Если задача действительно настолько тривиальна, как вы написали, то Describe("Evaluate...") . Если сложнее - попробуйте ORCA
...
Рейтинг: 0 / 0
01.12.2004, 19:33
    #32808394
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формула в "string".
2 PL99
А можно конкретный пример. Я так понял, что это всего одна строчка, так что много времени у Вас не займет[[rolleyes]]
...
Рейтинг: 0 / 0
01.12.2004, 19:40
    #32808407
f45f
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формула в "string".
ИМХО не все так просто.
А если скобки, т.е. там приоритет операций. Когда то я писал подобный интерпретатор. Через рекурсию реализовать можно довольно изящно. Тока не знаю, PB поддерживает рекурсию?
...
Рейтинг: 0 / 0
01.12.2004, 19:48
    #32808416
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формула в "string".
f45fИМХО не все так просто.
А если скобки, т.е. там приоритет операций. Когда то я писал подобный интерпретатор. Через рекурсию реализовать можно довольно изящно. Тока не знаю, PB поддерживает рекурсию?
Я понимаю, что не все просто. Но хотелось бы знать, с чего начать. После этого простого примера должно пойти легче.
...
Рейтинг: 0 / 0
01.12.2004, 20:06
    #32808438
PL99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формула в "string".
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
01.12.2004, 20:09
    #32808444
ЗоринАндрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формула в "string".
f45fТока не знаю, PB поддерживает рекурсию?
А как он ее должен по Вашему "поддерживать"?
Не... не так... как он ее по Вашему может не поддерживать?

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

а+(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
01.12.2004, 20:51
    #32808466
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формула в "string".
f45f Тока не знаю, PB поддерживает рекурсию?
Поддерживает, не поддерживает. Любой алгоритм можно и без рекурсии реализовать. Смотрим про обратную польскую нотацию AKA польскую инверсную запись. Реализуется при помощи стека, который легко реализуется при помощи массива.
...
Рейтинг: 0 / 0
01.12.2004, 21:14
    #32808480
f45f
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формула в "string".
Локшин Марк f45f Тока не знаю, PB поддерживает рекурсию?
Поддерживает, не поддерживает. Любой алгоритм можно и без рекурсии реализовать. Смотрим про обратную польскую нотацию AKA польскую инверсную запись. Реализуется при помощи стека, который легко реализуется при помощи массива.

Интересно. Примерчик или ссылку можно?
...
Рейтинг: 0 / 0
01.12.2004, 21:29
    #32808493
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формула в "string".
Ну набирите эти слова в google'е польская инверсная запись (полиз) обратная польская нотация. Куча ссылок.
...
Рейтинг: 0 / 0
02.12.2004, 09:51
    #32808858
ChV
ChV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формула в "string".
Рекурсивные функции в PB работают. Проверено.
...
Рейтинг: 0 / 0
02.12.2004, 12:17
    #32809276
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формула в "string".
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
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Формула в "string". / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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