Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Ашық массивтер






Object Pascal тілінде қ осалқ ы программада ұ зындығ ы айнымалы болып келген массивтерді сипаттау ү шін «ашық массивтер» деп аталатын массивтер пайдаланылады.

Ашық массив дегеніміз – массив элементінің барлық типін сипаттайтын, бірақ оның ө лшемі мен шекарасын анық тайтын қ осалқ ы программаның формальды параметрі:

Procedure Myself(JpenArray: array of integer);

Қ осалқ ы программаның ішінде мұ ндай параметр тө менгі шекарасы нольден басталатын бір ө лшемді массив ретінде қ абылданады. Ашық массивтің жоғ арғ ы шекарасы “High” деп аталатын стандартты функция арқ ылы анық талады. Нольді тө менгі индекспен мә н ретінде пайдалана отырып, ал жоғ арғ ы мә н High функциясымен анық талатын массивті қ осалқ ы программа ұ зындығ ы кез келген санмен алынғ ан бір ө лшемді массив ретінде анық тайды.

Procedure TfmExample, bbRunClick(Sender: TObject);

{Ашық массивті пайдалану мысалы: программа П компонентіне ұ зындық тары ә р тү рлі бір ө лшемді екі массивтің мазмұ нын бір ғ ана П процедурасының кө мегімен шығ арады}.

Procedure ArrayPrint(aArray: array of integer);

Var k: integer;

S: string;

Begin

S: =’’;

For k: =0 to High(aArray) do

S: =s+IntToStr(aArray[k]);

mmOutput.Lines.Add(s);

end;

const

a: array[-1..2] of integer=(0, 1, 2, 3);

b: array[5..7] of integer=(4, 5, 6);

begin

ArrayPrint(A);

ArrayPrint(B);

End;

 

Бұ л мысалда байқ ап отырғ андай, шақ ыру параметрі ретінде ArrayPrint процедурасына берілген А жә не В массивтерінің шекараларының мә ндері болмайды. Дегенмен, ашық массивтердің ө лшемділігі барлық уақ ытта 1-ге тең, мұ ны компилятор қ адағ алап отырады.

Егер біз программағ а екі ө лшемді с массивін қ оссақ, var c: array[1..3, 1..5] of integer; оның шақ ырылуы:

ArrayPrint(C);

қ ате жө нінде хабарламаны сө зсіз шығ арады.

Массив конструкторы

Қ осалқ ы программаны шақ ырғ анда ашық массив тү ріндегі формальды параметрдің орнына массив конструкторын кө рсетуге болады. Массив конструкторы дегеніміз ү тір арқ ылы ажыратылып, квадрат жақ шағ а алынғ ан масссив элементтерінің мә ндері. Алдынғ ы мысалдағ ы:

const

a: array[-1..2] of integer=(0, 1, 2, 3);

b: array[5..7] of integer=(4, 5, 6);

begin

ArrayPrint(A);

ArrayPrint(B);

End;

 

жазуының орнына

begin

ArrayPrint(A);

ArrayPrint(B);

End;

деп жазуғ а болады.

Вариантты массив параметрлері

Delphi 32 жү йесінде қ осалқ ы программағ а ұ зындығ ы мен ө лшемі айнымалы болып келген массивті бергенде вариантты массивтерді пайдаланғ ан ың ғ айлы. Тө менгі мысалда GetArrayAverage функциясының кө мегімен ө лшемі 5-тен артпайтын ұ зындығ ы айнымалы болып келген вариантты массивтің барлық элементтерінің арифметикалық ортасы анық талады:

Function GetArrayAverage(const V: Variant): Double;

{ұ зындығ ы мен ө лшемі айнымалы болып келген массивтің арифметикалық орта мә нін береді}

Var

I, j, k, l, m: integer;

Sum: Double;

NItem: integer;

Begin

Result: =-1E-309;

If((var type(v) and VarArray)< > VarArray) or

(VarArrayDimCount(v)> 5) then

Exit;

Sum: =0;

NItem: =0;

//Массив элементтерінің саннын есептейміз

For K: =0 to VarArrayDimCount(v) do

NItem: =Nitem+VarArrayHighBound(v, k)-

VarArrayLowBound(v, k);

//Элементтердің қ осындысын есептейміз

Case VarArrayDimCont(v) of

1: for i: = VarArrayLowBound(v, 1) to VarArrayHighBound(v, 1) do

Sum: =Sum+v[i];

2: for i: = VarArrayLowBound(v, 1) to VarArrayHighBound(v, 1) do

Sum: =Sum+v[i, j];

3: for i: = VarArrayLowBound(v, 1) to VarArrayHighBound(v, 1) do

for j: = VarArrayLowBound(v, 2) to VarArrayHighBound(v, 2) do

for k: = VarArrayLowBound(v, 3) to VarArrayHighBound(v, 3) do

Sum: =Sum+v[I, j, k];

4: for i: = VarArrayLowBound(v, 1) to VarArrayHighBound(v, 1) do

for j: = VarArrayLowBound(v, 2) to VarArrayHighBound(v, 2) do

for k: = VarArrayLowBound(v, 3) to VarArrayHighBound(v, 3) do

for l: = VarArrayLowBound(v, 4) to VarArrayHighBound(v, 4) do

Sum: =Sum+v[I, j, k, l];

5: for i: = VarArrayLowBound(v, 1) to VarArrayHighBound(v, 1) do

for j: = VarArrayLowBound(v, 2) to VarArrayHighBound(v, 2) do

for k: = VarArrayLowBound(v, 3) to VarArrayHighBound(v, 3) do

for l: = VarArrayLowBound(v, 4) to VarArrayHighBound(v, 4) do

for m: = VarArrayLowBound(v, 5) to VarArrayHighBound(v, 5) do

 

Sum: =Sum+v[I, j, k, l, m];

End;

Result: =sum/NItem

End;


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.009 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал