Форум: "Базы";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
ВнизБАЗЫ И ВЫСШАЯ МАТЕМАТИКА Найти похожие ветки
← →
Галинка © (2004-05-14 07:56) [0]Есть очень заумные формулы..:
j=1,N; i=1,l[j];
r0:=sqrt(sqr(x[i,j])+sqr(y[i,j]));
c1[i,j]:=sqr(0.08*(p1-I[i,j])-p2/Vozved(h,[j],p3));
fi[i,j]:=arctan(y[i,j]/x[i,j]);
c[i,j]:=c1[i,j]*sqr(cos(fi[i,j]-fi0))+sqr(sin(fi[i,j]-fi0));
b[1,1]:=b[1,1]+l[j];
b[2,1]=b[1,2]:=b[1,2]+l[j]*(K[j]-log(4*pi*sqr(r0)));
b[3,1]=b[1,3]:=b[1,3]-log(sqrt(sqr(h[j])+c[i,j]*(sqr(x[i,j])+sqr(y[i,j]))/r0);
b[2,2]:=b[2,2]+l[j]*sqr(K[j]-log(4*pi*sqr(r0)));
b[3,2]=b[2,3]:=b[2,3]-(K[j]-log(4*pi*sqr(r0)))*log(sqrt(sqr(h[j])+c[i,j]*(sqr(x[i,j])+sqr(y[i,j]))/r0);
b[3,3]:=sqr(log(sqrt(sqr(h[j])+c[i,j]*(sqr(x[i,j])+sqr(y[i,j]))/r0));
c[1]:=c[1]+I[i,j];
c[2]:=c[2]+I[i,j]*(K[j]-log(4*pi*sqr(r0)));
c[3]:=c[3]+I[i,j]*log(sqrt(sqr(h[j])+c[i,j]*(sqr(x[i,j])+sqr(y[i,j]))/r0);
Данные ко всему этому берутся из таблиц базы со структурой
Epicentry Punkty_nabludeniya
Id_epic Id_epic
Data DelX
Time DelY
Shir_epic Inabl
Dolg_epic
H_gip
K_max
Fi_0
Как это все можно реализовать ???
Всем спасибо....
← →
Галинка © (2004-05-14 08:08) [1]Подстановки такие:
h[j]=H_gip
K[j]=K_max
fi0[j]=Fi_0 (Извините, fi0 надо читать как fi0[j])
x[i,j]=DelX
y[i,j]=DelY
I[i,j]=Inabl
← →
Наталия © (2004-05-14 08:18) [2]Делается это обычным образом:
Из таблиц выбираются нужные записи,
В циклах по i,j подставляются в формулы, результаты выводятся (записываются) по необходимости...
← →
Галинка © (2004-05-14 08:45) [3]Для Наталии:
А по-подробнее...
← →
Наталия © (2004-05-14 09:01) [4]Я же не телепат...
А в чем трудность то?
На каком этапе она возникает?
При выборке данных? Подстановке в формулы?
← →
Anatoly Podgoretsky © (2004-05-14 09:11) [5]Данные из таблиц берутся или с помощью FieldByName или Fields[I] или и постоянно созданых полей (на этапе программирования) и используюся напрямую или помещаются во временные переменные, расчеты проводятся обычным путем
← →
jack128 © (2004-05-14 09:13) [6]нету тут высшей математики. если Vozved - это возведение степень , то лудше используй Power из модуля Math
← →
Галинка © (2004-05-14 10:10) [7]Для Наталии
Можете представить приерный цикл?
← →
BillyJeans © (2004-05-14 10:26) [8]а что нужно реализовать то?
← →
Галинка © (2004-05-14 10:33) [9]Для BillyJeans
Решить суммы (первый топик)..
← →
BillyJeans © (2004-05-14 10:38) [10]DataBase.First;
While not DataBase.EOF do begin
h[j] := FieldByName("H_gip").AsInteger;
<...>
inc(j);
DataBase.Next;
end;
<формулы...>
← →
han_malign © (2004-05-14 11:36) [11]>ВЫСШАЯ МАТЕМАТИКА
- вообще это школьная геометрия(точнее стереометрия), но это вам на форум геодезистов
>БАЗЫ
для каждого Epicentry[j] находим все Punkty_nabludeniya[i] где Punkty_nabludeniya[i].Id_epic=Epicentry[j].Id_epic - вот вам и [i,j], а дальше к бейзистам, я в БД не силен... (хотя здесь простенький SELECT, возможно JOIN)
← →
Sly © (2004-05-14 12:26) [12]2 Галинка ©
Уж не площади ли полигонов ищем?
← →
Галинка © (2004-05-14 14:25) [13]
procedure TForm1.Button1Click(Sender: TObject);
var
i, j, k: Integer;
s: string;
begin
i:=1;
DBGrid1.DataSource.DataSet.FindFirst;
DBGrid2.DataSource.DataSet.FindFirst;
FieldNames:=DBGrid2.DataSource.DataSet.FieldList;
SetLength(ParamZeml,DBGrid1.DataSource.DataSet.RecordCount);
SetLength(ParamPunkty,DBGrid1.DataSource.DataSet.RecordCount);
for k:=0 to DBGrid1.DataSource.DataSet.RecordCount-1 do
begin
if k>0 then DBGrid1.DataSource.DataSet.FindNext;
ParamZeml[k].XEpic:=DBGrid1.DataSource.DataSet.Fields[3].AsFloat;
ParamZeml[k].YEpic:=DBGrid1.DataSource.DataSet.Fields[4].AsFloat;
ParamZeml[k].Hgip:=DBGrid1.DataSource.DataSet.Fields[5].AsFloat;
ParamZeml[k].Kmax:=DBGrid1.DataSource.DataSet.Fields[6].AsFloat;
ParamZeml[k].Fi0:=DBGrid1.DataSource.DataSet.Fields[7].AsFloat;
with DBGrid2.DataSource.DataSet do
begin
while (DBGrid1.DataSource.DataSet.Fields[0].AsInteger=
DBGrid2.DataSource.DataSet.Fields[0].AsInteger) do
begin
SetLength(ParamZeml[k].Punkty,i);
if i>1 then FindNext;
for j:=2 to FieldNames.Count-1 do
begin
ParamZeml[k].Punkty[i-1,j-1]:=Fields[j].AsFloat;
s:=s+Fields[j].AsString+" ";
end;
ListBox1.Items.Add(s);
s:="";
inc(i);
end;
end;
end;
end;
Ошибка после первого пробега, хотя пробегаю всего 31 запись, а он говорит, что достигнут конец файла...
← →
Галинка © (2004-05-14 14:26) [14]Удалено модератором
← →
Галинка © (2004-05-14 14:28) [15]
procedure TForm1.Button1Click(Sender: TObject);
var
i, j, k: Integer;
s: string;
begin
i:=1;
DBGrid1.DataSource.DataSet.FindFirst;
DBGrid2.DataSource.DataSet.FindFirst;
FieldNames:=DBGrid2.DataSource.DataSet.FieldList;
SetLength(ParamZeml,DBGrid1.DataSource.DataSet.RecordCount);
SetLength(ParamPunkty,DBGrid1.DataSource.DataSet.RecordCount);
for k:=0 to DBGrid1.DataSource.DataSet.RecordCount-1 do
begin
if k>0 then DBGrid1.DataSource.DataSet.FindNext;
ParamZeml[k].XEpic:=DBGrid1.DataSource.DataSet.Fields[3].AsFloat;
ParamZeml[k].YEpic:=DBGrid1.DataSource.DataSet.Fields[4].AsFloat;
ParamZeml[k].Hgip:=DBGrid1.DataSource.DataSet.Fields[5].AsFloat;
ParamZeml[k].Kmax:=DBGrid1.DataSource.DataSet.Fields[6].AsFloat;
ParamZeml[k].Fi0:=DBGrid1.DataSource.DataSet.Fields[7].AsFloat;
with DBGrid2.DataSource.DataSet do
begin
while (DBGrid1.DataSource.DataSet.Fields[0].AsInteger=
DBGrid2.DataSource.DataSet.Fields[0].AsInteger) do
begin
SetLength(ParamZeml[k].Punkty,i);
if i>1 then FindNext;
for j:=2 to FieldNames.Count-1 do
begin
ParamZeml[k].Punkty[i-1,j-1]:=Fields[j].AsFloat;
s:=s+Fields[j].AsString+" ";
end;
ListBox1.Items.Add(s);
s:="";
inc(i);
end;
end;
end;
end;
Ошибка после первого пробега, хотя пробегаю всего 31 запись, а он говорит, что достигнут конец файла...
← →
sniknik © (2004-05-14 14:41) [16]FindFirst -> First
FindNext -> Next
for k:=0 to DBGrid1.DataSource.DataSet.RecordCount-1 do ->
while not DBGrid1.DataSource.DataSet.EOF
конечно если я правильно понял "глюк".
← →
Галинка © (2004-05-14 14:44) [17]2 Sniknik
Так тоже было... Вроде тоже глючит
← →
Галинка © (2004-05-14 14:51) [18]2 sniknik Глюк как раз со второй таблицей...
← →
Petr V. Abramov © (2004-05-14 14:59) [19]лучше сначала с в массивы все перегнать.
← →
MU © (2004-05-14 15:03) [20]ParamZeml[k].Fi0:=DBGrid1.DataSource.DataSet.Fields[7].AsFloat;
DBGrid2.DataSource.DataSet.Locate(...)
with DBGrid2.DataSource.DataSet do
...
← →
MU © (2004-05-14 15:03) [21]Удалено модератором
Примечание: дубль
← →
MU © (2004-05-14 15:29) [22]1. В Вашем коде записи в DBGrid2 должны быть отсортированы по полю Field[0]. Это так?
2. FindNext - тоже самое, что и Next
3. Вставьте перед циклом
DBGrid2.DataSource.DataSet.LocateDBGrid1.DataSource.DataSet.Fields[0].Name, [DBGrid1.DataSource.DataSet.Fields[0].AsInteger], []);
while (DBGrid1.DataSource.DataSet.Fields[0].AsInteger=
DBGrid2.DataSource.DataSet.Fields[0].AsInteger) do
← →
Argon (2004-05-14 22:18) [23]Не стоит пользоваться
for k:=0 to DBGrid1.DataSource.DataSet.RecordCount-1 do
RecordCount имеет свойство иметь значение строки на которой случайно стоит, лучше использовать
While not DBGrid1.DataSource.DataSet.Eof do
тогда все четко будет
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.048 c