Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Ашық массивтер
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;
|