ВУЗ:
Составители:
29
function VarArrayLowBound(const A:
Variant; Dim: Integer): Integer;
ȼɨɡɜɪɚɳɚɟɬ ɧɢɠɧɸɸ ɝɪɚ-
ɧɢɰɭ ɢɡɦɟɪɟɧɢɹ Dim ɞɥɹ
ɦɚɫɫɢɜɚ
function VarArrayHighBound(const A:
Variant; Dim: Integer): Integer;
ȼɨɡɜɪɚɳɚɟɬ ɜɟɪɯɧɸɸ ɝɪɚ-
ɧɢɰɭ ɢɡɦɟɪɟɧɢɹ Dim ɞɥɹ
ɦɚɫɫɢɜɚ
function VarArrayLock(const A: Variant):
Pointer;
Ȼɥɨɤɢɪɭɟɬ ɜɚɪɢɚɧɬɧɵɣ ɦɚɫ-
ɫɢɜ ɢ ɜɨɡɜɪɚɳɚɟɬ ɫɫɵɥɤɭ ɧɚ
ɧɟɝɨ
procedure VarArrayUnlock(var A: Vari-
ant);
ɋɧɢɦɚɟɬ ɛɥɨɤɢɪɨɜɤɭ ɫ ɜɚ-
ɪɢɚɧɬɧɨɝɨ ɦɚɫɫɢɜɚ, ɡɚɞɚɧ-
ɧɭɸ ɩɪɟɞɵɞɭɳɟɣ ɮɭɧɤɰɢɟɣ
function VarIsNull(const V: Variant): Boo-
lean;
ȼɨɡɜɪɚɳɚɟɬ ɢɫɬɢɧɭ, ɟɫɥɢ
ɜɚɪɢɚɧɬ ɫɨɞɟɪɠɢɬ ɩɭɫɬɨɟ
ɡɧɚɱɟɧɢɟ
procedure VarArrayRedim(A: Variant;
HighBound: Integer);
ɂɡɦɟɧɹɟɬ ɪɚɡɦɟɪ ɜɚɪɢɚɧɬ-
ɧɨɝɨ ɦɚɫɫɢɜɚ
ȼ ɫɥɟɞɭɸɳɟɦ ɩɭɧɤɬɟ ɩɪɢɜɟɞɟɧ ɩɪɢɦɟɪ ɩɪɨɝɪɚɦɦɢɪɨɜɚɧɢɹ ɜɚɪɢ-
ɚɧɬɧɵɯ ɦɚɫɫɢɜɨɜ.
2.10. Ɉɛɪɚɛɨɬɤɚ ɦɚɫɫɢɜɨɜ ɞɚɧɧɵɯ
Ɋɚɫɫɦɨɬɪɢɦ ɮɭɧɤɰɢɨɧɚɥɶɧɵɟ ɜɨɡɦɨɠɧɨɫɬɢ ɛɟɡɨɩɚɫɧɵɯ ɦɚɫɫɢɜɨɜ ɧɚ
ɩɪɢɦɟɪɟ.
2.10.1. ɋɨɡɞɚɧɢɟ ɫɟɪɜɟɪɚ
Ʉɚɤ ɢ ɜ ɩɪɟɞɵɞɭɳɟɦ ɩɪɢɦɟɪɟ, ɫɨɡɞɚɞɢɦ ɜɧɟɲɧɢɣ ɫɟɪɜɟɪ ɚɜɬɨɦɚɬɢɡɚ-
ɰɢɢ. ȼ ɪɟɞɚɤɬɨɪɟ ɛɢɛɥɢɨɬɟɤɢ ɬɢɩɨɜ ɨɩɪɟɞɟɥɢɦ ɞɜɚ ɢɧɬɟɪɮɟɣɫɚ – IvectSrv
ɢ IMatrixSrv
. ȼ ɩɟɪɜɨɦ ɢɧɬɟɪɮɟɣɫɟ ɫɨɡɞɚɞɢɦ ɦɟɬɨɞ ChangeVect, ɜɵɩɨɥ-
ɧɹɸɳɢɣ ɩɟɪɟɫɬɚɧɨɜɤɭ ɷɥɟɦɟɧɬɨɜ ɦɚɫɫɢɜɚ. Ɍɢɩ ɩɟɪɜɨɝɨ ɩɚɪɚɦɟɬɪɚ (ɢɫ-
ɯɨɞɧɵɣ ɦɚɫɫɢɜ) ɨɩɪɟɞɟɥɢɦ ɤɚɤ Variant
ɫ ɦɨɞɢɮɢɤɚɬɨɪɨɦ in
, ɬɢɩ ɜɬɨɪɨɝɨ
(ɪɟɡɭɥɶɬɚɬ ɜɵɱɢɫɥɟɧɢɣ)
– Variant ɫ ɦɨɞɢɮɢɤɚɬɨɪɨɦ out.
ȼɨ ɜɬɨɪɨɦ ɢɧɬɟɪɮɟɣɫɟ IMatrixSrv ɞɥɹ ɬɪɚɧɫɩɨɧɢɪɨɜɚɧɢɹ ɦɚɬɪɢɰɵ
ɫɨɡɞɚɞɢɦ ɦɟɬɨɞ Trans ɫ ɚɧɚɥɨɝɢɱɧɵɦɢ ɩɚɪɚɦɟɬɪɚɦɢ. ɋɝɟɧɟɪɢɪɭɟɦ ɦɨɞɭɥɶ
ɫ ɨɩɪɟɞɟɥɟɧɢɟɦ ɤɨɦɩɨɧɟɧɬɧɨɝɨ ɤɥɚɫɫɚ ɢ ɡɚɩɢɲɟɦ ɜ ɧɟɝɨ ɪɟɚɥɢɡɚɰɢɸ
ɭɩɨɦɹɧɭɬɵɯ ɦɟɬɨɞɨɜ:
type
TVectSrv = class(TAutoObject, IVectSrv, IMatrixSrv)
protected
procedure ChangeVect(v:OleVariant; out z:OleVariant); safecall;
30
procedure Trans(a: OleVariant; out b: OleVariant); safecall;
end;
implementation
uses ComServ, variants;
procedure TVectSrv.ChangeVect(v: OleVariant; out z: OleVariant);
var dim, i,j: integer;
begin
dim := VarArrayDimCount(v); // ɱɢɫɥɨ ɢɡɦɟɪɟɧɢɣ
if dim = 1 then
begin
z := v;
// Ɉɩɪɟɞɟɥɹɟɦ ɪɚɡɦɟɪɧɨɫɬɢ ɩɨ X ɩɟɪɟɞɚɧɧɨɝɨ ɦɚɫɫɢɜɚ
i := VarArrayLowBound(v,1);
j := VarArrayHighBound(v,1);
// Ɇɟɧɹɟɦ ɦɟɫɬɚɦɢ ɩɟɪɜɵɣ ɢ ɩɨɫɥɟɞɧɢɣ ɷɥɟɦɟɧɬ
z[i]:=v[j];
z[j]:=v[i];
end;
end;
procedure TVectSrv.Trans(a: OleVariant; out b: OleVariant);
var dim, n, m, i0,j0,i, j: integer;
begin
b := a;
dim := VarArrayDimCount(a); // ɱɢɫɥɨ ɢɡɦɟɪɟɧɢɣ
if dim = 2 then
begin
// Ɉɩɪɟɞɟɥɹɟɦ ɪɚɡɦɟɪɧɨɫɬɢ ɩɨ X ɩɟɪɟɞɚɧɧɨɝɨ ɦɚɫɫɢɜɚ
i0 := VarArrayLowBound(a,1);
n := VarArrayHighBound(a,1);
// .. ɢ ɪɚɡɦɟɪɧɨɫɬɢ ɩɨ Y
j0 := VarArrayLowBound(a,2);
m := VarArrayHighBound(a,2);
// Ɍɪɚɧɫɩɨɧɢɪɭɟɦ
for i := i0 to n do
for j := j0 to m do
b[i,j] := a[j,i];
end;
end;
function VarArrayLowBound(const A: ���������� ������ ���- procedure Trans(a: OleVariant; out b: OleVariant); safecall; Variant; Dim: Integer): Integer; ���� ��������� Dim ��� end; ������� ���������� ������� ���- implementation function VarArrayHighBound(const A: Variant; Dim: Integer): Integer; ���� ��������� Dim ��� ������� uses ComServ, variants; function VarArrayLock(const A: Variant): ��������� ���������� ���- procedure TVectSrv.ChangeVect(v: OleVariant; out z: OleVariant); Pointer; ��� � ���������� ������ �� ���� var dim, i,j: integer; ������� ���������� � ��- begin procedure VarArrayUnlock(var A: Vari- dim := VarArrayDimCount(v); // ����� ��������� ant); ��������� �������, �����- ��� ���������� �������� if dim = 1 then begin function VarIsNull(const V: Variant): Boo- ���������� ������, ���� z := v; lean; ������� �������� ������ �������� // ���������� ����������� �� X ����������� ������� �������� ������ �������- i := VarArrayLowBound(v,1); procedure VarArrayRedim(A: Variant; j := VarArrayHighBound(v,1); HighBound: Integer); ���� ������� // ������ ������� ������ � ��������� ������� z[i]:=v[j]; � ��������� ������ �������� ������ ���������������� ����- z[j]:=v[i]; ������ ��������. end; end; 2.10. ��������� �������� ������ procedure TVectSrv.Trans(a: OleVariant; out b: OleVariant); ���������� �������������� ����������� ���������� �������� �� var dim, n, m, i0,j0,i, j: integer; �������. begin 2.10.1. �������� ������� b := a; dim := VarArrayDimCount(a); // ����� ��������� ��� � � ���������� �������, �������� ������� ������ ����������- if dim = 2 then ���. � ��������� ���������� ����� ��������� ��� ���������� – IvectSrv begin � IMatrixSrv. � ������ ���������� �������� ����� ChangeVect, �����- // ���������� ����������� �� X ����������� ������� ������ ������������ ��������� �������. ��� ������� ��������� (��- i0 := VarArrayLowBound(a,1); ������ ������) ��������� ��� Variant � ������������� in, ��� ������� n := VarArrayHighBound(a,1); (��������� ����������) – Variant � ������������� out. // .. � ����������� �� Y �� ������ ���������� IMatrixSrv ��� ���������������� ������� j0 := VarArrayLowBound(a,2); �������� ����� Trans � ������������ �����������. ����������� ������ m := VarArrayHighBound(a,2); � ������������ ������������� ������ � ������� � ���� ���������� ���������� �������: // ������������� for i := i0 to n do type for j := j0 to m do TVectSrv = class(TAutoObject, IVectSrv, IMatrixSrv) b[i,j] := a[j,i]; protected end; procedure ChangeVect(v:OleVariant; out z:OleVariant); safecall; end; 29 30
Страницы
- « первая
- ‹ предыдущая
- …
- 13
- 14
- 15
- 16
- 17
- …
- следующая ›
- последняя »