Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AEP_LEKTsII.doc
Скачиваний:
90
Добавлен:
28.03.2015
Размер:
1.27 Mб
Скачать

6.5 Типтердің үйлесімділігі

Кейде, мысалы, өрнектерде және салыстыру операцияларында типтердің үйлесімділігі қажет. Сонымен қатар типтердің үйлесімділігі меншіктеу бойынша үйлестіру үшін маңызды предпосылка болып табылады.

Типтердің үйлесімділігі орын алады, егер келесі шарттардың кемінде біреу орындалса:

  • - типтердің екеуі де бірдей болса;

  • - типтердің екеуі де нақты типтер болса;

  • - типтердің екеуі де бүтінсанды болса;

  • - бір тип екіншінің ішкі диапазоны болатын болса;

  • - типтердің екеуі де бірдей бір базалық типтің ішкі диапазоны болатын болса;

  • - типтердің екеуі де базалық типтері үйлесімді болатын жиындық типтер болса;

  • - типтердің екеуі де компоненттер саны бірдей болатын қапталған жолдық типтер болса;

  • - бір тип жолдық, ал екінші тип жолдық немесе қапталған жолдық немесе символдық тип болса;

  • - бір тип нұсқағыш (Pointer), ал екінші көрсерткіштердің кез келген типі болатын болса;

Т1 типтің мәні Т2 типпен меншіктеу бойынша үйлесімді болып табылады (яғни, Т1:=Т2 рұқсат етілген), егер келесі шарттардың біреуі орындалатын болса:

  • - Т1 және Т2 барабар типтерге ие болатын болса, және олардың біреуі де файлдық тип немесе өзінің деңгейлерінің біреуінде файлдық типтегі компонентті қамтығын құрылымды тип болмаса;

  • - Т1 және Т2 үйлесімді реттік типтер болып табылса, және Т2 типтің мәндері Т1-дің мүмкін болатын мәндер аралығына түсетін болса;

  • - Т1 және Т2 нақты типтер болып табылса, және Т2 типтің мәндері Т1-дің мүмкін болатын мәндер аралығына түсетін болса;

  • - Т1 нақты тип, ал Т2 бүтінсанды тип болып табылса;

  • - Т1 және Т2 жолдық типтер болса;

  • - Т1 жолдық тип, ал Т2 символдық тип болып табылса;

  • - Т1 жолдық тип, ал Т2 қапталған жолдық тип болатын болса;

  • - Т1 және Т2 үйлесімді қапталған жолдық типтер болатын болса;

  • - Т1 және Т2 үйлесімді жиындық типтер болып, және Т2 тип мәнінің брлық мүшелері Т1-дің мүмкін болатын мәндер аралығына түсетін болса;

  • - Т1 және Т2 үйлесімді "нұсқағыш" типтер болып табылса;

Егер меншіктеу бойынша үйлесімділік қажет болып алдыңғы тізімдегі бір де бір шарты орындалмаса компиляциялау кезеңіндн қате туралы хабарлама беріледі.

Динамикалық массивтер (Delphi, C). Динамикалық деп программаның орындалу барысында өлшемі өзгерілуі мүмкін болатын массивті атайды. Динамикалық массивтің өлшемін өзгерту үшін сондай массивтерді сүйемелдейтін программалау тілі құрамына кірістірілген функция немесе операторды ұсынуы тиіс. Динамикалық массивтер деректермен икемділеу жұмыс жасауға мүмкіндік береді, себебі деректердің сақталатын көлемдерін болжамдамауға, ал нақтылы қажет болатын көлемдеріне сәйкес массив өлшемін реттеуге мүмкіндік береді. Динамикалық емес кәдімгі массивтерді статикалық деп те атайды.

Паскальдағы статикалық массив мысалы:

wordArray : array [Word] of Integer; // Статикалық, өлшемі = High(Word) + 1

multiArray : array [Byte, 1..5] of Char; // Статикалық массив, 2 өлшемді

rangeArray : array [5..20] of String; // Статикалық массив, өлшемі= 16

Бір типті айнымалы-массивтерді бір біріне меншіктеуге болады, бұл кезде бір массивтің мазмұны екінші массивке көшіріледі: a1:=a2;

Массив типінің параметрін мәні бойынша жіберу барысында массив мазмұны – нақтылы параметр массивке - формальды параметрге көшіріледі:

procedure p(arr: array [1..10] of integer);

...

p(a1);

Әдетте, бұл жағдайда массивтің мазмұнын көшіру қажет емес, сондықтан массивті сілтеме бойынша жіберген дұрыс:

procedure r(var arr: array [1..10] of integer);

...

r(a1);

Массивтің элементтеріне индекстері бар айнымалылар арқылы сілтейді:

a1[3]:=a2[5];

b['f',w3]:='Hello';

c[3][4]:=3.14;

Массивтермен жұмыс жасағанда ең жиі кездесетін қате – индекстің өзгеру шекарасынан шығып кету (ол динамикалық массивтерде орын алмайды). Pascal ABC –те мұндай қатенің пайда болуы программа жұмысының аяқталуына әкеледі.

Жазба типі элементтердің немесе өрістердің берілген бір мөлшер санын қамтиды, ол элементтерінің типтері әртүрлі болуы мүмкін. Жазба типінің сипаттамасы әр өріс типін және өріс идентификаторын қамтиды.

Жазба типінің фиксацияланған бөлігі әр өріс үшін идентификаторы мен типімен бірге өрістердің фиксацияланған тізімін қамтиды. Әр өріс әрдайым бірдей бір тәсіл арқылы ізделінетін ақпаратты қамтиды. Жазба типіне мысал:

record

year: integer;

month: 1..12;

day: 1..31;

end

Әр вариант кемінде бір тұрақты арқылы идентификатталған. Барлық тұрақтылар бір бірінен өгеше болуы және қасиет орісінің типіне үйлесімді болатын реттік типке ие болуы тиіс. Варианттық және фиксацияланған өрістерге қол жеткізу бірдей. Варианттық бөлімде міндеті емес идентификаторды - өріс қасиетінің идентификаторын көрсетуге болады. Өріс қасиетінің идентификаторы бар кезде ол жазбаның қосымша фиксирленген өрісінің – қасиет өрісінің идентификаторы болып қалады. Программа қасиет өрісінің мәнін қазіргі кезде қандай вариант белсенді болып тұрғанын көрсету үшін қолдануы мүмкін. Қасиет өрісі көрсетілмесе программа вариантты басқа критерий бойынша таңдайды.

Жазба типтерінің мысалы:

Record

firstName,lastName : string[40];

birthDate : Date;

case citizen: boolean of True: (birthPlace: string[40]);

False : (country : string[20];

entryPort : string[20];

entryDate : Date;

exitDate : Date); end

record

x,y : real;

case kind : Figure of

rectangle : (height,wigth: real);

triangle : (size1,side2,angle: real);

circle : (radius: real);

end

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]