Mar. 26., 2006 | 10:11 am
No:: petro
principā kad pilnā pārlase ir pārāk apjomīgs darbs pat X GHz procim. Var mēģināt lietot tuvināšanas metodi(iteration). Pats kādreiz vienā programmprojektā esmu izmantojis
Piemērs (ja vari atšifrēt):
Piemērs (ja vari atšifrēt):
procedure GetData(Dp :Integer);
{ Dp - Segas pilns biezums [cm] }
const X :array [1..7] of integer = (0, 30, 60, 90, 120, 150, 180);
a = 15;
var F :real; {Force}
D :array [1..7] of real;
K, Ae, r, DeltaR, m, n, dr, Mr, Ep, p :real; {Koeficients, ...}
AA, BB, CC, D0apr :real;
kor : real;
idx : integer;
begin
K := 0;
kor := 128;
F := DM.qryFWDimp['F'];
D[1] := DM.qryFWDimp['D1']/10000;
D[2] := DM.qryFWDimp['D2']/10000;
D[3] := DM.qryFWDimp['D3']/10000;
D[4] := DM.qryFWDimp['D4']/10000;
D[5] := DM.qryFWDimp['D5']/10000;
D[6] := DM.qryFWDimp['D6']/10000;
D[7] := DM.qryFWDimp['D7']/10000;
repeat
K := K + Kor;
Ae := Sqrt( Sqr(a) + Sqr(Dp) * Power(K, 2/3) );
r := Ae*0.7;
DeltaR := r - X[6];
m := D[6];
n := D[7];
for idx := 1 to 5 do
if ( X[idx] <= r ) and ( r < x[idx+1] )
then begin
DeltaR := r - X[idx];
m := D[idx];
n := D[idx+1];
end;
dr := m - (m-n)*DeltaR/30;
Mr := ( 2.4 * F ) / (r * dr);
Ep := K*Mr;
p := (F*10)/(Sqr(a)*Pi);
AA := 1.5 * a * p;
BB := Sqrt(1+ Sqr((Dp/a)* Power(Ep/Mr, 1/3)) );
CC := 1 / Sqrt(1 + Sqr(Dp/a));
D0apr := AA* ( (1/ (Mr*BB) ) + (1-CC)/Ep );
kor := Abs(kor/2);
if D0apr < D[1]
then kor := -kor;
until Abs( D[1] - D0apr ) < 0.000005;
SDNew.S := DM.qryFWDimp['S'];
SDNew.Dp := Dp;
SDNew.SNef := 0.0093*Dp*Power(Ep, 1/3);
SDNew.Egr := Mr/3.3;
end;