Poslední příspěvky

Stran: 1 2 [3] 4 5 ... 10
21
Obecné / Re:DLL - tabuľky v nej či v DB
« Poslední příspěvek od pf1957 kdy 23-01-2022, 07:50:21 »
Takže tam budeš mít 127x cykly, které náplní strukturu? No mozne řešení to je
22
Obecné / Re:DLL - tabuľky v nej či v DB
« Poslední příspěvek od Stanislav Hruška kdy 22-01-2022, 20:00:21 »
Nakoniec som to urobil takto:
Kód: [Vybrat]
  TData = class
  strict private
    FData: TList<Currency>;
  public
    constructor Create;
    property Data: TList<Currency> read FData write FData;
  end;
.
  TTable = class
  strict private
    FRow: TObjectList<TData>;
  public
    constructor Create;
    destructor Destroy; override;
    property Row: TObjectList<TData> read FRow write FRow;
  end;
...

  if Assigned(Table) then
    Table.Row.Clear
  else
    Table := TTable.Create;
.
  for var I := Low(Asc) to High(Asc) do
  begin
    Table.Row.Add(TData.Create);
.
    for var K := Low(Asc[0]) to High(Asc[0]) do
      Table.Row.Last.Data.Add(Asc[I][K]);
  end;
.
ShowMessage(FloatToStr(Aprox(Table, advedtX.Value, advedtY.Value)));
Tam si môžem dať čo chcem.
23
Obecné / Re:DLL - tabuľky v nej či v DB
« Poslední příspěvek od Stanislav Hruška kdy 22-01-2022, 18:33:53 »
Tak nie. Triedu TArray nemám vytvárať! Pátram ďalej.
24
Obecné / Re:DLL - tabuľky v nej či v DB
« Poslední příspěvek od Stanislav Hruška kdy 22-01-2022, 18:10:08 »

Myslím si, že toto by mi malo vyriešiť môj problém:
Kód: [Vybrat]
xx: TArray<TArray<Currency>>Keď som to niekde videl, tak som to nevedel pochopiť. Pochopil som to, až keď som si to napísal sám. No medzitým som si niečo prečítal o TArray.
Nepotrebujem k tomu žiadnu triedu. Stačí premenná. Už len správne zaistiť plnenie.
Alebo sa tam skrýva nejaká zrada?
25
Obecné / Re:DLL - tabuľky v nej či v DB
« Poslední příspěvek od Stanislav Hruška kdy 22-01-2022, 16:55:57 »
Na dve veci  ;D Na nič a na hovno. Ďakujem. Bolo mi trochu divné, že to v druhom prípade nemám. Namiesto analýzy som sa na to vykašlal.
26
Obecné / Re:DLL - tabuľky v nej či v DB
« Poslední příspěvek od vandrovnik kdy 22-01-2022, 15:09:19 »
Nie. To mi funguje dobre. Najprv si v "hlavičke" (os X) zistím stĺpce, medzi ktorými sa nachádza parameter "X". Preto 0. To isté pre Y. Tak získam 4 hodnoty, ktoré mi určujú 4 bunky v poli, kde si musím nájsť výslednú hodnotu.
Testoval som to aj pre krajné stavy.
Ide mi len o to prepašovanie polí, alebo čohokoľvek iného vhodného, do funkcie.

Máš tam:
Kód: [Vybrat]
function TfrmMainForm.GetX2(const MaxX, MaxY: Integer; const ValueX: Currency): Integer;
var  X, Y: Integer;
begin
  Result := MaxX;
.
  for Y := 0 to MaxY do
  begin
    for X := 0 to MaxX do
    begin
      if Asc[0][X] >= ValueX then
      begin        Result := X;        Break;      end;
    end;
  end;
end;

K čemu tam tedy je cyklus pro Y?
27
Obecné / Re:DLL - tabuľky v nej či v DB
« Poslední příspěvek od Stanislav Hruška kdy 22-01-2022, 14:53:33 »
Nie. To mi funguje dobre. Najprv si v "hlavičke" (os X) zistím stĺpce, medzi ktorými sa nachádza parameter "X". Preto 0. To isté pre Y. Tak získam 4 hodnoty, ktoré mi určujú 4 bunky v poli, kde si musím nájsť výslednú hodnotu.
Testoval som to aj pre krajné stavy.
Ide mi len o to prepašovanie polí, alebo čohokoľvek iného vhodného, do funkcie.
28
Obecné / Re:DLL - tabuľky v nej či v DB
« Poslední příspěvek od vandrovnik kdy 22-01-2022, 14:39:10 »
Jen na letmé kouknutí, řádek 98, nemá tam být Asc[Y][X] ?
29
Obecné / Re:DLL - tabuľky v nej či v DB
« Poslední příspěvek od Stanislav Hruška kdy 22-01-2022, 14:26:57 »
V niektorých diskusiách som narazil na generiká (T<T>). Ale tam som bol úplne mimo. Je to v knižnici cesta pre mňa?
30
Obecné / Re:DLL - tabuľky v nej či v DB
« Poslední příspěvek od Stanislav Hruška kdy 22-01-2022, 14:16:30 »
Prikladám celé svoje terajšie riešenie. Ide mi funkciu Aprox
Kód: [Vybrat]
unit MainForm;
interface uses...
type
  TfrmMainForm = class(TForm)
...
  strict private
  const
    Asc: array[0..6, 0..6] of Currency =
    (( 0, 3.0, 4.5, 6.0, 9.0, 12.0, 15.0),
    (  0, 0.0, 0.0, 0.0, 0.0,  0.0,  0.0),
    ( 20, 0.0, 0.0, 0.0, 0.0,  0.0,  0.0),
    ( 40, 1.2, 1.7, 2.2, 2.7,  3.1,  3.3),
    ( 60, 2.4, 3.2, 3.9, 4.9,  5.6,  6.1),
    ( 80, 3.2, 4.3, 5.1, 6.4,  7.3,  8.0),
    (100, 3.9, 5.1, 6.1, 7.6,  8.7,  9.5));
    Asc1: array[0..10, 0..2] of Currency =
    ((0.3, 160, 100),
     (0.4, 150,  95),
     (0.5, 140,  90),
     (0.6, 130,  85),
     (0.7, 120,  80),
     (0.8, 110,  75),
     (0.9, 100,  70),
     (1.0,  90,  65),
     (1.1,  80,  60),
     (1.2,  70,  55),
     (1.3,  60,  50));
    function Aprox(const ValueX, ValueY: Currency): Real;
    function GetDeltaX(var X1, X2: Integer; const ValueX: Currency): Real;
    function GetDeltaY(var Y1, Y2: Integer; const ValueY: Currency): Real;
    function GetX2(const MaxX, MaxY: Integer; const ValueX: Currency): Integer;
    function GetY2(const MaxY: Integer; const ValueY: Currency): Integer;
  end;
var
  frmMainForm: TfrmMainForm;
implementation
{$R *.dfm}
.
function TfrmMainForm.Aprox(const ValueX, ValueY: Currency): Real;
var  X1, X2, Y1, Y2, MaxX, MaxY: Integer;
begin
  MaxY := High(Asc);
  MaxX := High(Asc[0]);
  X2 := GetX2(MaxX, MaxY, ValueX);
.
  if X2 = MaxX then
    X1 := X2
  else  if Asc[0][X2] <> ValueX then
    X1 := X2 - 1
  else
    X1 := X2;
.
  Y2 := GetY2(MaxY, ValueY);
.
  if Y2 = MaxY then
    Y1 := Y2
  else  if Asc[Y2][0] <> ValueY then
    Y1 := Y2 - 1
  else
    Y1 := Y2;
.
  var DeltaX := GetDeltaX(X1, X2, ValueX);
  var DeltaX1Value := Asc[Y1][X1] + (Asc[Y1][X2] - Asc[Y1][X1]) * DeltaX;
  var DeltaX2Value := Asc[Y2][X1] + (Asc[Y2][X2] - Asc[Y2][X1]) * DeltaX;
  Result := DeltaX1Value + ((DeltaX2Value - DeltaX1Value) * GetDeltaY(Y1, Y2, ValueY));
end;
.
procedure TfrmMainForm.btn1Click(Sender: TObject);
begin
ShowMessage(FloatToStr(Aprox(Asc, advedtX.Value, advedtY.Value)));
end;
.
function TfrmMainForm.GetDeltaX(var X1, X2: Integer; const ValueX: Currency): Real;
begin
  if Asc[0][X2] = Asc[0][X1] then
    Result := 1
  else
    Result := (ValueX - Asc[0][X1]) / (Asc[0][X2] - Asc[0][X1]);
end;
.
function TfrmMainForm.GetDeltaY(var Y1, Y2: Integer; const ValueY: Currency): Real;
begin
  if Asc[Y2][0] = Asc[Y1][0] then
    Result := 1
  else
    Result := (ValueY - Asc[Y1][0]) / (Asc[Y2][0] - Asc[Y1][0]);
end;
.
function TfrmMainForm.GetX2(const MaxX, MaxY: Integer; const ValueX: Currency): Integer;
var  X, Y: Integer;
begin
  Result := MaxX;
.
  for Y := 0 to MaxY do
  begin
    for X := 0 to MaxX do
    begin
      if Asc[0][X] >= ValueX then
      begin        Result := X;        Break;      end;
    end;
  end;
end;
.
function TfrmMainForm.GetY2(const MaxY: Integer; const ValueY: Currency): Integer;
var  Y: Integer;
begin
  Result := MaxY;
.
  for Y := 0 to MaxY do
  begin
    if Asc[Y][0] >= ValueY then
    begin      Result := Y;      Break;    end;
  end;
end;
Stran: 1 2 [3] 4 5 ... 10