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 Stanislav Hruška kdy 23-01-2022, 11:00:07 »
Snáď by malo ísť aj
Kód: [Vybrat]
TDim2RealArray = array of array of Real
22
Obecné / Re:DLL - tabuľky v nej či v DB
« Poslední příspěvek od Stanislav Hruška kdy 23-01-2022, 10:48:25 »
Aj som to skúšal. Ale nevedel som ako to inicializovať. Teraz si porovnám dva posledné príspevky. Ich + a -.
Hneď je svet krajší. Ďakujem.
Edit: tie dáta si tam nastrkám na požiadanie. V prípade potreby. Väčšinou budem potrebovať len pár tabuliek
23
Obecné / Re:DLL - tabuľky v nej či v DB
« Poslední příspěvek od pf1957 kdy 23-01-2022, 10:41:45 »
Tak som to mal aj predtým. Akurát som to skladal zo stringov. To čo momentálne mám sa mi vôbec nepáči. Hľadám ďalej.
Kdyz ty tabulky nemusis mit v ROM, tak je klidne muzes mit na heapu. Pak bych pouzil generica, jak jsi sam naznacoval, ale buhvi proc jsi to vzdal:
Kód: Delphi [Vybrat]
  1. TDim2RealArray = TArray<TArray<real>>

Pro kazdou tabulku bych nadefinoval promennou typu TDim2RealArray, kterou bych predaval jako parametr do vypoctu pres argument stejneho typu.

A nekde v inicializaci bych do tech promennych nastrkal data, napr.:
Kód: Delphi [Vybrat]
  1. Initialization
  2.  
  3.   AA := TArray<TArray<real>>.Create(
  4.     TArray<real>.Create(1.1, 1.2, 1.3, 1.4, 1.5 ...),
  5.     TArray<real>.Create(2.1, 2.2, 2.3, 2.4, 2.5 ...)
  6.     ...
  7.   );
  8.  
  9.   AB := TArray<TArray<real>>.Create(
  10.     TArray<real>.Create(11.1, 11.2 ...),
  11.     TArray<real>.Create(21.1, 22.2 ...),
  12.     TArray<real>.Create(31.1, 32.2 ...),
  13.     TArray<real>.Create(41.1, 42.2 ...),
  14.     TArray<real>.Create(51.1, 52.2 ...),
  15.     TArray<real>.Create(61.1, 62.2 ...)
  16.     ...
  17.   );
  18.  

Nebo spravne by to melo byt:
Kód: Delphi [Vybrat]
  1.   AA := TDim2RealArray.Create(
  2.     TArray<real>.Create(1.1, 1.2, 1.3, 1.4, 1.5 ...),
  3.     TArray<real>.Create(2.1, 2.2, 2.3, 2.4, 2.5 ...)
  4.     ...
  5.   );
  6.  
  7.   ...
  8.  


No a pak metoda, ktera s temi poli pracuje, napr.
Kód: Delphi [Vybrat]
  1. function TXxx.GetDim2RealValue(ARealArray: TDim2RealArray; ARowIdx,
  2.   AColIdx: integer): real;
  3. begin
  4.   Result := ARealArray[ARowIdx, AColIdx];
  5. end;
  6.  

= prace s tim je jako s obycejnym polem, jen rozmery pole budes misto Low/High ziskavat pomoci Length

24
Obecné / Re:DLL - tabuľky v nej či v DB
« Poslední příspěvek od Stanislav Hruška kdy 23-01-2022, 09:59:20 »
Tak som to mal aj predtým. Akurát som to skladal zo stringov. To čo momentálne mám sa mi vôbec nepáči. Hľadám ďalej. Toto riešenie vyzerá z môjho pohľadu lepšie
Kód: [Vybrat]
type
  TMatrix = array[1..3,1..3] of ;   //  Tu autor neuviedol definíciu
procedure MakeMat(var c: TMatrix; nr, nc: integer; a: array of double);
var
  I, K: integer;
begin
  SetLength(c, nr, nc);
  for I := 0 to nr-1 do
    for K := 0 to nc-1 do
      c[I, K] := a[I * nc + K];
end;
.
MakeMat(ya, 5, 11,
       [1.53,1.38,1.29,1.18,1.06,1.00,1.00,1.06,1.12,1.16,1.18,
        0.57,0.52,0.48,0.44,0.40,0.39,0.39,0.40,0.42,0.43,0.44,
        0.27,0.25,0.23,0.21,0.19,0.18,0.18,0.19,0.20,0.21,0.21,
        0.22,0.20,0.19,0.17,0.15,0.14,0.14,0.15,0.16,0.17,0.17,
        0.20,0.18,0.16,0.15,0.14,0.13,0.13,0.14,0.14,0.15,0.15]);
Teraz sa pokúsim o realizáciu.
Doteraz som neprišiel na spôsob, ako do funkcie priamo narvať const array. Všetky riešenia sú pomocou type Txx = yy. Pre viacrozmerné polia som našiel asi len to čo je tu uvedené.

25
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
26
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.
27
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.
28
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?
29
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.
30
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?
Stran: 1 2 [3] 4 5 ... 10