Do výpočtu vektora najčastejšie vstupuje iný vektor (môže byť taktiež vypočítaný), alebo zoznam (pole) vektorov. Počet vektorov vstupujúcich do výpočtu nie je umelo obmedzený, avšak čím viac vektorov je potrebné spracovať, tým viac stúpa časová a pamäťová náročnosť výpočtu.
Pri načítaní hodnôt a zoznamov vektorov sú rozlišované dva typy funkcií. Prvý typ sprístupňuje obsah entít cez ich meno a druhý vracia načítaný obsah do lokálnej premennej príslušného typu. Odporúča sa použiť druhý typ - načítanie obsahu do lokálnej premennej.
- Sprístupnenie obsahu:
- Načítanie do lokálnej premennej:
Nasledovný príklad načítava hodnoty vektora Vector.Src v rovnakom časovom rozsahu, ako je načítavaný výsledný vypočítaný vektor s rovnakým krokom ako má výsledný vypočítaný vektor.
Blok kódu |
---|
language | eda-l |
---|
theme | RDark |
---|
title | Načítanie hodnôt vektora |
---|
|
VECTOR _v;
-- Hodnoty budú prístupné cez identifikátor Vector.Src
%LoadVector(Vector.Src, _BT, _ET, _STEP);
-- Hodnoty budú prístupné cez premennú _v
_v := %LoadVectorData("Vector.Src", _BT, _ET, _STEP); |
Načítanie vektora s parametrami
Do výpočtu vypočítaného vektora je možné voliteľne podsunúť parametre. Počet parametrov odovzdaných do výpočtu vektora je možné získať funkciou %GetParamsNr. Parameter je identifikovaný svojim indexom. Hodnotu kontrétneho parametra je možné priradiť do lokálnej premennej funkciou %GetParamValue. Ak hodnota parametra nie je kompatibilná s typom lokálnej premennej, do ktorej je priraďovaná, je generovaná chyba.
Blok kódu |
---|
language | eda-l |
---|
theme | RDark |
---|
title | Vector.Calc |
---|
|
REAL _value;
VECTOR _v;
IF %GetParamsNr() > 0 THEN
-- Priradí hodnotu parametra na indexe 1 do premennej _value
%GetParamValue(1, _value);
END IF;
%CreateVectorInit(_v, _value, _BT, _ET, _STEP);
RETURN _v; |
Načíta vektor Vector.Calc s podsunutím hodnoty prvého parametra 2,5.
Blok kódu |
---|
language | eda-l |
---|
theme | RDark |
---|
title | Vector.Result |
---|
|
%LoadVektorWithParams(Vector.Calc, _BT, _ET, _STEP, 2.5);
RETURN Vector.Calc; |
Pre zvýšenie prehľadnosti kódu a zjednodušenie práce s parametrami je odporúčané použitie pomenovaných parametrov.
Načítanie vektora s pomenovanými parametrami
Ide o načítanie vektora, ktorý má jasne menom definované parametre. Hodnoty sú týmto parametrom automaticky pridelené pri načítaní vektora. Nezadané parametre budú obsahovať neplatnú hodnotu. Nasledovný príklad pozostáva z dvoch vektorov. Vektor, ktorý spracováva výpočet s parametrami (Vector.Calc) a vektor, ktorý načítava vektor Vector.Calca odovzdáva mu hodnoty parametrov (Vector.Result).
Nasledujúci predpis zobrazuje vektor Vector.Calc, ktorý má definovaný pomenovaný parameter _value typu reálne číslo (1).
Blok kódu |
---|
language | eda-l |
---|
theme | RDark |
---|
title | Vector.Calc |
---|
|
PARAM REAL _value; -- (1)
VECTOR _v;
%CreateVectorInit(_v, _value, _BT, _ET, _STEP);
RETURN _v; |
Vektor Vector.Result už len volá načítanie vektora Vector.Calc, ktorému odovzdá hodnotu parametra _value (1). Ako hodnotu parametra je možné zadať akýkoľvek výraz, ktorého výsledný typ je kompatibilný s typom parametra.
Blok kódu |
---|
language | eda-l |
---|
theme | RDark |
---|
title | Vector.Result |
---|
|
VECTOR _v;
v := %LoadVectorData("Vector.Calc", _BT, _ET, _STEP, , , _value => 2.5); -- (1)
RETURN _v; |
Načítanie zoznamu vektorov
Načítanie zoznamu vektorov je zvyčajne realizované načítaním scenára vektorov (%LoadScenario, %LoadScenarioData) alebo skupiny vektorov (%LoadGroup, %LoadGroupData). Je však možné načítať aj ľubovolný zoznam vektorov na základe SQL príkazu (%LoadFilter, %LoadFilterSimple). Ak do výpočtu vstupujú aj hodnoty vektorov z načítaného zoznamu, je potrebné ich načítať/sprístupniť.
Blok kódu |
---|
language | eda-l |
---|
theme | RDark |
---|
title | Načítanie zoznamu vektorov |
---|
|
INT _i, _nr;
VECTOR _v;
%CreateVector(_v, _BT, _ET, _STEP);
%LoadScenario(Scenario.Test, 1);
_nr := %ValuesNr(Scenario.Test);
IF _nr > 0 THEN
-- Sprístupní hodnoty vektorov v zozname
FOR _i = 1 TO _nr LOOP
%LoadVector(Scenario.Test[_i], _BT, _ET, _STEP);
END LOOP;
-- Vypočíta súčet hodnôt na rovnakých indexoch
_v := %Sum(Scenario.Test);
END IF; |
Štruktúra VECTORS môže okrem EDA vektorov obsahovať aj odkazy na lokálne vektory (premenné typu VECTOR). V prípade odovzdania takejto štruktúry do iného vypočítaného vektora, budú hodnoty zdrojového lokálneho vektora dostupné na modifikáciu aj vo vnorenom vypočítanom vektore, pričom zmena hodnôt sa prejaví v každej úrovni vnorenia.
...
Nasledovný predpis predstavuje jednoduchý príklad použitia odkazov na lokálne vektory v poli vektorov.
Blok kódu |
---|
|
VECTOR _v1, _v2;
VECTORS _w;
INT _i, _j;
%CreateVector(_v1, 5);
%CreateVector(_v2, 10);
-- Do poľa vektorov pridá lokálne vektory _v1 a _v2
_w := _w + _v1 + _v2;
-- Modifikuje hodnoty lokálnych vektorov nepriamo cez zoznam vektorov
FOR _i = 1 TO %ValuesNr(_w) LOOP
FOR _j = 1 TO %ValuesNr(_w[_i]) LOOP
_w[_i][_j] := _i + _j;
END LOOP;
END LOOP; |