Funkcia vykoná danú matematickú operáciu nad časťou lokálnych štruktúr (riadiaca funkcia).
Deklarácia
%StructCalcOp(
in _recA[fromRowA]^fromColA, IN _recA[toRowA]^toColA,
in _recB[fromRowB]^fromColB,
in _recC[fromRowC]^fromRowC,
INT in _operation [, IN BOOL _bInvalidIsZero = @TRUE]
)
Parametre
_recA[fromRowA]^fromColA,
_recA[toRowA]^toColA
Odkaz na hodnotu políčka lokálnej štruktúrovanej
premennej.
_recB[fromRowB]^fromColB
Odkaz na hodnotu políčka lokálnej štruktúrovanej
premennej.
_recC[fromRowC]^fromRowC
Odkaz na hodnotu políčka lokálnej štruktúrovanej
premennej.
INT IN _operation
Typ vykonávanej matematickej operácie.
IN BOOL _bInvalidIsZero
Nepovinný parameter. Určuje správanie sa
matematickej operácie v prípade, ak má niektorý z operandov
neplatnú hodnotu.
Popis
Hodnota parametra _operation určuje matematickú operáciu
podľa tejto tabuľky:
Hodnota
Matematická operácia
0
+
1
-
2
*
3
/
Matematická operácia je vykonaná nasledovne:
C = A + B
pričom:
Symbol A predstavuje oblasť hodnôt lokálnej štruktúrovanej premennej, ktorá
je daná jej ľavým horným rohom (políčkom _recA[fromRowA]^fromColA) a pravým
dolným rohom (políčko _recA[toRowA]^toColA). Štruktúrovaná premenná použitá
v prvom a druhom parametri musí byť preto tá istá. Týmto sú definované aj
rozmery (počet riadkov a stĺpcov). Rozmery sa použijú pri určení oblastí B a C,
ktoré sú v parametroch uvedené len ich pravým horným rohom.
Matematická operácia (určená parametrom) sa vykonáva medzi jednotlivými
zodpovedajúcimi políčkami oblastí A a B. Výsledok sa zapisuje do oblasti
C.
Nastavený parameter _bInvalidIsZero je interpretovaný týmto spôsobom:
- v prípade operátorov + a - na operandy pred výpočtom
- v prípade * a / je výsledok 0
Príklad
Nasledujúci príklad vykoná sčítanie dvoch matíc.
Prvá je
ohraničená políčkami _A[1]^_firstColNr (pričom _firstColNr je nastavená na
hodnotu 1) a _A[2]^_lastColNr (pričom _lastColNr je nastavená na poradové
číslo posledného stĺpca príslušnej štruktúry).
Druhá je daná políčkom _B[1]^_firstColNr a má dva riadky a rovnaký počet
stĺpcov ako matica v rámci premennej _A.
Výsledok sa zapíše do zodpovedajúcich políčok v rámci premennej _C.
BEGIN
RECORD (SD.BIG) _A
RECORD (SD.BIG) _B
RECORD (SD.BIG) _C
REDIM _A[20]
REDIM _B[20]
REDIM _C[20]
INT _firstColNr, _lastColNr
_firstColNr := 1
_lastColNr := _A\CNR
_A[1]^R1 := 1
_A[2]^R1 := 2
_B[1]^R1 := 1
_B[2]^R1 := 2
%StructCalcOp(_A[1]^_firstColNr,_A[2]^_lastColNr,_B[1]^_firstColNr,_C[1]^_firstColNr,0)
END