powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / sozdanie tablitsu
4 сообщений из 4, страница 1 из 1
sozdanie tablitsu
    #32571688
TF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TF
Гость
Pomoqite pojalusta , u menya takaya problema:
Yest funksiya , napirmer: a=(x+2)*y-z (eto funksiya kajdiy raz mojet menyatsa)
nujen sostavit tablitsu:

x n(10.2)
y n(10.2)
z n(10.2)
funcx n(10.2)
funcy n(10.2)
funcz n(10.2)

Delo v tom chto a=(x+2)*y-z- eto funksiya kajdiy raz mojet menyatsa. Napirmer
i takaya funksiya mojet bit: a=(x*(y-1)+z-(k+6)-L*4)/(N-M). Toqda tablitsa takaya doljna bit:

x n(10.2)
y n(10.2)
z n(10.2)
k n(10.2)
L n(10.2)
N n(10.2)
M n(10.2)

funcx n(10.2)
funcy n(10.2)
funcz n(10.2)
funcK n(10.2)
funcK n(10.2)
funcN n(10.2)
funcN n(10.2)
...
Рейтинг: 0 / 0
sozdanie tablitsu
    #32571740
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если я правильно понял...

Если там не будет двойных переменных(аа) и переменной типа(а1)...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
procedure create_tab
    parameters my_fun   && my_fun"a=(x*(y-1)+z-(k+6)-L*4)/(N-M). "

  my_str = Right(my_fun,len(my_fun)- 2 ) && убиваем "a="
  for i =  0  to  9 
    my_str = strtran(my_str,alltrim(str(i)),'') && убиваем все цыфры
  endfor
  my_str = strtran(my_str,'\','') && убиваем все операторы
  my_str = strtran(my_str,'*','')
  my_str = strtran(my_str,'(','')
  my_str = strtran(my_str,')','')
  my_str = strtran(my_str,'+','')

  my_pole1 = left(my_str, 1 )
  my_pole2 = 'func' + my_pole1
  my_str = Right(my_str,len(my_str)- 1 )
  create table my_tab free (&my_pole1 N( 10 , 2 ), &my_pole2 N( 10 , 2 ))
  do while !empty(my_str)
    my_pole1 = left(my_str, 1 )
    my_str = Right(my_str,len(my_str)- 1 )
    my_pole2 = 'func' + my_pole1
    alter table my_tab add column &my_pole1 N( 10 , 2 );
                    add column &my_pole2 N( 10 , 2 )
  enddo
Сории за синтаксис... не проверял...
Может еще че-то не учел...

Желаю удачи...
...
Рейтинг: 0 / 0
sozdanie tablitsu
    #32571917
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, ты настойчивый! Как я решал аналогичную проблему (общая схема):

Используются 3 таблицы:

NameVar - список ИМЕН переменных, используемых в формулах
GrafRule - таблица собственно формулы расчета
ListVar - список переменных, используемых в ОДНОЙ формуле

Структура таблиц

NameVar - список ИМЕН переменных, используемых в формулах

NameVarID - код записи
NickName - название переменной

ListVar - список переменных, используемых в ОДНОЙ формуле

ListVarID - код записи
GrafRuleID - код записи из таблицы Formula
NameVarID - код записи из таблицы NameVar
nOrder - порядковый номер переменной в формуле

GrafRule - таблица собственно формулы расчета

GrafRuleID - код записи
NickName - название формулы (для выбора)
Formula - memo-поле, содержащее собственно формулу расчета

Способ хранения формулы в поле FORMULA
Предположим, что есть формула, для расчета первоначального взноса

--------------------------------------------------------------------------------
Стоимость*СтавкаПервогоВзноса/100
--------------------------------------------------------------------------------

Тогда в соответсвующей записи таблицы GrafRule.dbf в memo-поле Formula будет записано примерно следующее

--------------------------------------------------------------------------------
(пустая строка)
*
/100
--------------------------------------------------------------------------------

Т.е. вместо имен переменных будет вставлен символ перевода строки. По умолчанию, в качестве символа перевода строки выступает единственный символ с ASCII кодом 13, однако допустимо использовать пару символов с ASCII кодом 13 и 10 в любой комбинации

Ссылки на использованные переменные будут записаны в таблицу ListVar.dbf причем порядок их следования будет отражен в значениях поля nOrder

nOrder Имя переменной, на которую ссылаются
1 Стоимость
2 СтавкаПервогоВзноса

Когда возникнет необходимость снова собрать формулу все символы перевода строки будут заменены на соответсвующие переменные, ссылки на которые записаны в таблице ListVar.dbf Причем замена будет происходить: со строны memo-поля - в порядке физического следования символов перевода строки, а со стороны таблицы ListVar.dbf - в порядке возрастания значения поля nOrder.
---------------------------------------------------------------------------

Как это все реально собирается в программе:

Сначала пользователь выбирает формулу, по которой он будет осуществлять расчет.

Далее из таблицы ListVar выбирается список переменных для этой формулы и предлагается пользователю указать все значения этих переменных.

По описанной выше схеме я заменяю все символы перевода строки (с помощью ALINES()) на ЗНАЧЕНИЯ переменных и через макроподстановку вычисляю полученное значение.

Это общая схема. Реально все несколько сложнее. Но общий принцип, я думаю, понятен?
...
Рейтинг: 0 / 0
sozdanie tablitsu
    #32572000
tf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tf
Гость
spasibo
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / sozdanie tablitsu
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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