Студопедия

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

КАТЕГОРИИ:

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






Зертханалық жұмыс №13






Тақ ырыбы: Варианттар

Мақ саты Delphi ортасының жұ мысына жалпы сипаттама

Қ олданылатын материалдар мен қ ұ рал- жабдық тар:

Компьютер, Delphi программалау ортасы

 

Теориялық тү сініктеме:

Вариант бұ л компиляция кезең інде программист ө рнектегі қ андай да бір мә ліметтер типін немесе қ осалқ ы программаны шақ ыру параметрін кө рсете алмағ ан жағ дайда пайдалануғ а болатын, арнайы жасалғ ан Variant типі. Вариант айнымалысы жадыдан қ осымша 2 байт орын алады, онда айнымалының нақ ты типі жө ніндегі ақ парат орналасады. Бұ л ақ парат программаны жү ргізу кезең інде типтерге қ ажетті тү рлендіруді жү зеге асыратын компиляторғ а кодты қ ұ ру мү мкіндігін береді.

Вариант айнымалысына:

- бү тін жә не нақ ты санды;

- логикалық мә нді;

- жолды;

- уақ ыт немесе датаны;

- OLE объектісін;

- Элементі жоғ арыда аталғ ан типтердің бірінен қ ұ ралатын, ө лшемі мен ұ зындығ ы еркін алынғ ан массивті орналастыруғ а болады.

Варианттар сә йкес тү рлендіру нақ ты болғ ан жағ дайда бү тін санды, нақ ты, логикалық немесе уақ ыт жә не дата ө рнектеріне қ атыса алады. Мысалы, егер кез келген V вариантына ‘1.0’ жолы меншіктелсе, 1+v ө рнегінің дұ рыс нақ ты мә ні 2.0 болады. Ал, егер v: = ‘Текст’ болса, 1+v ө рнегі EVariantError қ атесін шақ ырады.

Варианттық типтің қ ұ рылымы тө мендегідей сипатталады:

TVarData=packed record

VType: Word;

Reserved1, Reserved2, Reserved3: Word;

Case Integer of

VarSmallInt: (VSmallInt: SmallInt);

VarInteger: (VInteger: Integer);

VarSingle: (VSingle: Single);

VarDouble: (VDouble: Double);

VarCurrency: (VCurrency: Currency);

VarDate: (VDate: Double);

VarOLEStr: (VOLEStr: PWideChar);

VarDispatch: (VDispatch: Pointer);

VarError: (VError: WordBool);

VarString: (VSting: Pointer);

VarArray: (VArray: PVarArray);

VarByRef: (VPointer: Pointer);

End;

Варианттық типі кез келген айнымалы 8 байттық варианттық бө ліктен тұ ратын 16 байттық жазу болып келеді, ол ө зіне мә ліметті немес адресті (яғ ни динамикалық орналасқ ан мә ліметтерге сілтеме) сақ тайды. Кез келген VType ө рісіне компилятор вариант қ ұ ру мезетінде мә ліметтердің жоқ екендігі туралы VarEmpty белгісін орналастырады. Орындалатын программада бұ л ө рістің мә ні варианттық бө лікте орналасқ ан ағ ымдағ ы мә ліметтер типіне сә йкес ө згереді. Бұ дан программа вариант жазуының ө рісіне тікелей кіре алмайды. Варианттық мә ліметтер типін VarType функциясының кө мегімен алуғ а болады, ал типті вариантқ а жаң а мә н меншіктеу жолымен ө згертуге болады.

Варианттарды мә ліметтердің басқ а типіне тү рлендіру

Варианттар ө рнектерде, олардың мә ндеріне басқ а типтерді меншіктегенде пайдаланылғ ан жағ дайда мә ліметтер варианттарында орналасқ ан типтер тө мендегі ереже бойынша тү рленеді:

Варианттардағ ы типтердің тү рлендірілуі

Қ олда-нылуы Варианттардағ ы мә ліметтер типі
Var Epty Бү тін Нақ ты Дата уақ ыт Жолдық Логикалық
Бү тін   Сә йкес типке тү рлен-діру Бү тінге дө ң ге-лектеу Бү тінге дө ң ге-лектеу Бү тін типке тү р- лен- діру False ү шін 0, ә йтпесе – 1, Byte ү шін 255
Нақ ты 0.0 Сә йкес типке тү рлен-діру Сә йкес типке тү рлен-діру Сә йкес типке тү рлен-діру Нақ ты типке тү р- лен- діру False ү шін 0, True ү шін – 1
Дата уақ ыт 30.12. 00: 00: 00 Double – ге тү рлен-діру Double – ге тү рлен-діру Тү рленді-рілмейді Датағ а тү рле неді Double – ге тү рлен-діру
Жолдық Бос жол Символ-дық тү рге тү рлен-діру Символ-дық тү рге тү рлен-діру Символ-дық тү рге тү рлен-діру Тү рлен- діріл- мейді False ү шін 0, True ү шін – 1
Логикалық False 0 – False ә йтпесе - True 0 – False ә йтпесе - True 0 – False ә йтпесе - True ‘False’ - 0 - False ә йтпесе - True Тү рленді-рілмейді

 

Мұ ндағ ы

Бү тінге: VarByte, VarSmallInt, VarInteger, VarError;

Нақ тығ а: VarSingle, VarDouble, VarCurrency;

Жолдық қ а: VarString, VarOleStr жатады.

Варианттармен жұ мыс істеуге арналғ ан қ осалқ ы программалар

Варианттармен жұ мыс істеу ү шін тө мендегідей қ осалқ ы программаларды пайдалануғ а болады:

1. Function VarAsType(ConstV: Variant; VarType: Integer): Variant;

2. Procedure VarCast(VArDest: Variant; const Sourse: Variant; VarType: Integer);

3. Procedure VarClear(var V: Variant);

4. Procedure VarCopy(VarDest: Variant; const Source: Variant);

5. Function

VarForm_DateTime(DateTime: TDateTime): Variant;

6. Function VarIsEmpty(const V: Variant): Boolean;

7. Function VarIsNull(const V: Variant): Boolean;

8. Function VarToDateTime (const V: Variant): TDateTime;

9. Function VarToStr(const V: Variant): string;

10. FunctionVarType(const V: Variant): Integer;

1 – функция – кез келген варианттың мә ліметін VarType параметрімен анық талатын типке тү рлендіреді.

2 – прцедура – Sourse вариантының мә ліметін VarType параметрімен анық талғ ан типке тү рлендіріп, нә тижені Dest айнымалысына орналастырады.

3 – процедура динамикалық жадыны босатады, егер ол вариантпен байланысты болса жә не оғ ан VarEmpty типін береді.

4 – процедура Dest вариантына Sourse параметрін кө шіреді.

5 – функция – типі дата – уақ ыт болып келген DataTime мә ліметтерінен тұ ратын вариантты береді.

6 – функция – егер V – да мә ліметтер болмаса, True мә нін береді.

7 – функция – егер V варианты анық талмағ ан мә ліметтер типінен тұ ратын болса, True мә нін береді.

8 – функция – V варианттының мә ліметтерін дата – уақ ыт типіне тү рлендіреді.

9 – функция – V варианттының мә ліметтерін жолғ а тү рлендіреді.

10 – функция – Вариантта сақ талғ ан мә ліметтер типін береді.

Вариантты массивтер

Варианттың мә ні мә ліметтер массиві болуы мү мкін, мұ ндай вариаттар – вариантты массивтер деп аталады. Вариантты массив элементтерінің мә ндері вариант ү шін мү мкін болатын кез келген мә ндер болуы мү мкін, бірақ оғ ан VarString жолы кірмейді. Вариантты массив элементтерінің мә ндері варианттарда бола алады, олай болса мұ ндай массивте бір мезгілде ә ртү рлі мә ліметтер типі сақ талады.

Var

V: Variant;

Begin

//5 элементтен тұ ратын бір ө лшемді вариатты массив қ ұ райық

Var: =VarArrayCreate([0, 4], varVariant);

//Толтырамыз:

V[0]: =1;

V[1]: =1234.5678;

V[2]: = ‘салем’;

V[3]: =True;

//Массивтің 5 – элементі тағ ы бір массив болсын.

V[4]: =VArArrayof([1..10, 100..1000]);

Caption: =V[2];

LBOutput.Caption: =InttoStr(V[4][2]);

End;

Вариантты массивтермен жасалатын барлық ә рекеттер тө мендегі процедуралар мен функциялардың кө мегімен жү зеге асырылады:

1. Function VarArrayCreate(const Bounds: array of integer; Vartype: Integer): variant; - Bounds параметрі арқ ылы мө лшері мен шекарасының ө лшемі кө рсетілген типті элементтерден вариантты массив қ ұ рады;

2. Function VarArrayDimCount(const A: Variant): Integer; - Варианты А массиві ө лшемінің мө лшерін (санын) береді, егер А массив болмаса, 0 – ге тең.

3. Function VarArrayHighBound (const A: Variant: Dim: Integer): Integer; - Dim ө лшемі бойынша вариантты А массиві жоғ арғ ы шекарасының индексін береді;

4. Function VarArrayLock(var a: Variant): Pointer; - массивті бұ ғ аттап, мә ліметтерге байланысты кө рсеткішті береді;

5. Function VarArrayLowBound (const A: Variant; Dim: Integer): Integer; - Dim ө лшемі бойынша А вариатты массиві тө менгі шекарасының индексін береді;

6. Function VarArray (const Values: array of Variant): Variant; - Values ашық массивіндегі мә ндерден тұ ратын бір ө лшемді вариантты массив қ ұ рады. Бұ л жағ дайда вариантты масивінің тө менгі шекарасының индексі 0 – ге тең;

7. Procefure varArrayRedim(Var A: variant; HighBound: Integer); - А вариантты массивтің жоғ арғ ы индексінің шекарасын шамасына ө згердеді. Егер массив VarArrayLock функциясымен бұ ғ атталғ ан болса, онда процедураның шақ ырылуы жойылады;

8. Function VarArrayRef(const A: Variant): Variant; - Вариантты массивке сілтемені береді. АРІ функцияларды шақ ыруда пайдаланылады;

9. Procedure VarArrayUnlock(var A: Variant) – VarArrayLock функциясының ә рекетін жоқ қ а шығ арады.

Пайдаланушының варианттары

Delphi – дің 6 – нұ сқ асынан бастап, варианттың мә ндеріндегі сипатындағ ы шектеулерді толық алып тастайтын пайдаланушының варианттары жұ мыс істейді. Бұ л варианттың қ асиеттерімен толық танысу ү шін тө мендегідей вариантты қ арастырайық: комплекстік сандарды сақ тап, оларды басқ а типке тү рлендіріп жә не олармен қ ажетті ә рекетті жү зеге асыратын вариантты пайдаланайық. Пайдаланушының вариантын қ ұ ру – ондағ ы сақ талатын мә ліметтердің кү рделілігіне тә уелді болады. Delphi – ді жасаушылардың қ ұ рғ ан VarCmplx модуліне қ осылғ ан вариантты пайдаланайық. Тө мендегідей оқ иғ а ө ндеушісін қ ұ райық.

Uses VarCmplx; //Бұ л сілтеме міндетті тү рде қ ажет!

Procedure TfmExample.bbRunClick(Sender: TObject);

Var

V1, V2: Variant;

Begin //кездейсоқ екі комплекс сан қ ұ рамыз:

V1: =VarComlexCreate(Trunc(Random*1000)/100, Trunc(Random*1000)/ 100);

Width mmOutput.Lines do

Begin

Add(‘ ’); //Бос бө лінетін жол

Add(‘1-ші сан’#9+V1);

Add(‘2-сан’#9+V2);

Add(‘қ осу’#9+(V1+V2));

Add(‘Азайту’#9+(V1-V2));

Add(‘Кө бейту’#9+(V1*V2));

Add(‘Бө лу’#9+(V1/V2));

End;

End;

Енді тү сініктеме берейік:

Trunc(Random*1000)/100 конструкциясы комплекс санмен 3 мә нді цифр алынуы ү шін қ ажет.

Келтірілген мысалдан байқ ап отырғ анымыздай жаң а вариант комплекстік сандармен жақ сы сү йемелденеді: VarComlexCreate функциясы комплекстік саннан қ ұ ралатын вариант қ ұ рады, ары қ арай вариант математикалық операцияларды орындап, оны жолдық типке тү рлендіреді. Сондай – ақ, VarCmplx модулінің мә тіні вариантқ а қ осымша қ асиет береді (ескертусіз Source\RT1\Common\ VarCmplx.pas – та орнаалсады), кө лемі 30000 байттан астам.

Пайдаланушының вариантын қ ұ ру ү ш кезең де жү реді.

1. Алдымен TVarData жазуына жаң а мә ліметтер орналасады немесе оғ ан сілтеме жасалады.

2. TCustomVariantType арнайы кластың тікелей немесе жанама ұ рпағ ы болып табылатын класс хабарланады. Бұ л класта варианттың қ асиеттерін жү зеге асыруғ а қ ажетті барлық ә дістер қ арастырылады: оғ ан жаң а мә ндер меншіктеу, сақ талғ ан мә ндерді басқ а типтерге тү рлендіру, қ ажетті математикалық операцияларды орындау.

3. Жаң а кластың ұ рапқ тарын хабарлауғ а жә не олардың типін анық тауғ а қ ажетті қ осымша ә дістер қ ұ рылады.

4. Кө рсетілген қ адамдарды орындағ аннан кейін жаң а қ асиеттермен байытылғ ан толық вариант алынады: ол тек жоғ арыда кестеде келтірілген мә ндерді ғ ана сақ тап қ оймай, басқ а да кез келген мә ндерді, оның ішінде қ асиеттер мен ә дістерді де сақ тай алады.

Тапсырма:

Тапсырманы орындауғ а ә дістемелік нұ сқ аулар:

 

Ұ сынылатын ә дебиеттер: [1-9]

Бекіту сұ рақ тары:

1. Вариант дегеніміз не?

2. Вариант айнымалысы ретінде қ андай типтерді алуғ а болады?

3. Варианттық типтің қ ұ рылымы қ алай сипатталады? Мысал келтірің із.

4. Мә ліметтер вариантында орналасқ ан типтерді қ алай тү рлендіруге болады?

5. Варианттармен жұ мыс істеуге арналғ ан қ андай қ осалқ ы программалар бар?

6. Варианттық мә ліметтер типін қ андай функцияның кө мегімен алуғ а болады?

7. Вариантты массивтер дегеніміз не? Олардың негізгі айырмашылығ ы неде?

8. Пайдаланушының варианттарының қ андай ерекшелігі бар?

9. Пайдаланушының вариантың қ ұ ру қ анша кезең нен тұ рады? Ә рбір кезең ге сипаттама берің із.


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

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