Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекцый для 1 курса-1 семестр.doc
Скачиваний:
3
Добавлен:
09.11.2019
Размер:
2.95 Mб
Скачать

Даныя карыстальніцкага тыпу

У мове Pascal уведзена дастатковая колькасць тыпаў даных, але яш­чэ ёсць магчымасць для ўвядзення новых тыпаў, якія больш падыходзяць для канкрэтных практычных мэт.

Мы разглядалі тыпы, якія ўводзяцца мовай Pascal. Гэта наперад вы­зна­ча­ныя тыпы. Для іх апісання ў мове існуюць стандартныя ідэн­ты­фі­ка­та­ры. Акрамя іх існуюць катэгорыі тыпаў даных, якія ўводзяцца праг­ра­міс­та­мі. Імя тыпу абазначаецца ідэнтыфікатарам. Да іх у першую чар­гу адносяцца пералічальныя і абмежаваныя (тып «дыяпазон») тыпы.

Аб’яўленне новых тыпаў робяць у блоку апісання тыпаў Type па на­ступ­наму прынцыпу:

TYPE

Новы_тып_1 = масіў_цэлых_лікаў;

Новы_тып_2 = мноства_сімвалаў;

...

Новы_тып_101 = цэлы_лік;

Новы_тып_102 = пералічаныя_тут_значэнні;

Апісанне тыпаў:

Вызначэнне тыпу:

Стандартныя тыпы не трэба вызначаць нанава.

Даныя пералічальнага тыпу

Пералічальны тып – гэта тып даных, у якіх колькасць усіх магчымых зна­чэн­няў абмежавана. Яго можна распісаць у рад па значэннях, пе­ра­ліч­ва­ю­чы праз коску ў круглых дужках назвы (ідэнтыфікатары) элементаў-зна­чэн­няў тыпу (гэтыя назвы павінны быць унікальнымі ў межах праг­ра­мы). Пералічальнаму тыпу можна надаць імя, тады ён апісваецца ў сек­цыі TYPE.

Фармат найменнага пералічальнага тыпу:

TYPE

Імя тыпу = (ідэнтыфікатар_1,..., ідэнтыфікатар_n);

VAR

Ідэнтыфікатар_зм_1, ідэнтыфікатар_зм_2,... : імя тыпу;

Фармат ненайменнага пералічальнага тыпу:

VAR Ідэнтыфікатар_зм_1, ідэнтыфікатар_зм_2,...: (ідэнтыфікатар_1,... ідэнтыфікатар_n);

Пераменная такога тыпу зможа ўтрымліваць тыя значэнні, якія ўка­за­ны ў яго пералічэнні, інакш – памылка. Максімальны лік элементаў у адным пе­ра­лі­чэн­ні роўны 65 535. Захоўваецца значэнне пералічальнага тыпу ў бяз­зна­ка­вым байце, калі пералічана не больш за 256 значэнняў, і як бяз­зна­ка­вае слова – у астатніх выпадках.

Прыклад.

TYPE

Personages = (NifNif, NufNuf, NafNaf);

VAR

Q,P : Personages;

Любы пералічальны тып мае ўнутраную нумарацыю значэнняў ад 0 да апошняга. Нумар кожнага значэння можна атрымаць функцыяй Ord(x), якая вяртае цэлы лік у форме Longint: Ord(NufNuf) 1.

Мае месца адваротны запіс: P := Personages(і), дзе 0  і  2, i – цэ­лае. Напрыклад, пры i=2 пераменная P атрымае значэнне NafNaf. У пе­ра­мен­ную P запісваецца значэнне, якое адпавядае зададзенаму па­рад­ка­ва­му нумару элемента пералічэння. Да пераменных пералічальнага ты­пу прымянімы функцыі Succ(x) і Pred(x).

Паколькі значэнні пералічальнага тыпу ўпарадкаваны, іх можна па­раў­ноў­ваць: хто мае большы парадкавы нумар, той і большы. Нап­ры­клад, вынік параўнання NufNuf  NafNaf ёсць true.

Недахопы пералічальнага тыпу: значэнні даных пералічальнага тыпу не могуць быць выведзены на экран, ці прынтэр, ці ў файл і не могуць быць уведзены з клавіятуры, бо гэта ўнутраныя даныя (але змагацца з гэ­тым можна, завёўшы, напрыклад, масіў радкоў з такімі назвамі, а індэксы ма­сі­ву – гэта тыя ж імёны даных пералічальнага тыпу).

Даныя інтэрвальнага тыпу

Мы можам вызначыць тып, які будзе ўтрымліваць значэнні толькі з аб­ме­жа­ва­на­га паддыяпазону некаторага базавага парадкавага тыпу.

Базавым тыпам, з якога вычляняюцца дыяпазоны, можа быць любы цэ­ла­лі­ка­вы тып, Char і любы з уведзеных праграмістам пералічальных ты­паў.

Для ўвядзення новага тыпу-дыяпазону ў блоку вызначэння тыпаў TYPE трэ­ба ўказаць імя гэтага тыпу і межы дыяпазону праз дзве кропкі:

CONST n=10;

TYPE Radius = 1..90;

CapsLetter = 'А'..'Я';

Diap = 2*n..3*n;

Межы могуць быць і выразамі, але нельга, каб выраз пачынаўся з дуж­кі, бо дужка – гэта адзнака пачатку пералічэння.

Кампілятар пры кожнай аперацыі з пераменнай інтэрвальнага тыпу мо­жа генерыраваць падпраграмы праверкі, каб устанавіць, застаецца ці не значэнне пераменнай сярод дыяпазону яе значэнняў. Для гэтага трэба ўста­на­віць дырэктыву кампілятара {$R+} (па змаўчанні {$R-}). Пры­клад аб’яўлення пераменных інтэрвальнага тыпу:

TYPE

Day = (sat, sun, mon, tue, wed, thu, fri);

пералічальны найменны

VAR

WorkDay : Day;

DayOff : mon..fri;

інтэрвальны на базе пералічальнага

Symbol : 'A'..'Z'; інтэрвальны на базе Char

З данымі інтэрвальнага тыпу могуць працаваць функцыі Succ, Pred, Ord.

Да іх можна прымяняць усе стандартныя падпраграмы і аперацыі, якія вызначаны для базавага тыпу. Толькі калі дыяпазон узяты з базавага ты­пу, які можа выводзіцца на экран ці ўводзіцца з клавіятуры (або ўвод-вы­вад у файл), тады і абмежаваныя даныя можна такім чынам уводзіць-вы­водзіць.