ВУЗ:
Составители:
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
- …
- следующая ›
- последняя »
