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

Структуры даных і праца з імі сродкамі мовы Pascal Парадкавыя тыпы

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

1) усе магчымыя значэнні парадкавага тыпу ўяўляюць сабой абме­жа­ва­нае ўпа­рад­ка­ва­нае мноства;

2) да любога парадкавага тыпу можна прымяняць стандартную функ­цыю Ord, якая ў якасці выніку вяртае парадкавы нумар канкрэтнага зна­чэн­ня ў дадзеным тыпе;

3) да любога парадкавага тыпу можна прымяняць стандартныя функ­цыі Pred і Sucс, якія вяртаюць адпаведна папярэдняе і наступнае зна­чэнні;

4) да любога парадкавага тыпу могуць быць прыменены стандартныя фун­к­цыі Low і High, якія вяртаюць найменшае і найбольшае значэнні ве­лі­чынь дадзенага тыпу.

Структураваныя тыпы даных вызначаюць упарадкаваную су­куп­насць скалярных пераменных і характарызуюцца тыпам сваіх кам­па­нен­таў.

Мноствы

Тып «мноства» ўтвараецца спецыяльнай канструкцыяй:

SET OF базавы_парадкавы_тып

Мноства ў мове Pascal – гэта абмежаваная (<=256 элементаў) су­куп­насць папарна розных аб’ектаў аднаго скалярнага парадкавага тыпу (Word, Integer, Shorting), які называецца базавым. Скалярныя ты­пы Byte і Char уводзяцца мовай і могуць быць асновай для пабудовы мност­ваў, бо іх колькасць роўна 256.

Базавы тып задаецца пералічэннем, дыяпазонам ці іменем тыпу.

TYPE

SetOfChar = SET OF Char; {мноства з сімвалаў}

SetOfByte = SET OF Byte; {мноства з лікаў}

SetOfDigit = SET OF 0..9; {мноства - інтэрвал лікаў}

SetOfDChar = SET OF '0'..'9';{мноства - інтэрвал сімвалаў}

VAR

SChar : SetOfChar;

SByte : SetOfBYTE;

SDigit : SetOfDigit;

Кожны аб’ект у мностве называецца элементам мноства. Калі мнос­т­ва не мае элементаў, яно называецца пустым. Вобласць значэнняў тыпу «мнос­т­ва» – набор разнастайных падмностваў, якія складзены з элемен­таў ба­за­ва­га тыпу.

Выява мноства:

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

SDigit := [0,2,4,6,8];

SDigit := [10]; {памылка}

SChar := ['a'..'z','A'..'Z','б','г'];

SChar := [2]; {памылка}

Парадак чаргавання элементаў унутры дужак не мае значэння, так­сама як не мае значэння колькасць паўтарэнняў элемента. Напрыклад:

Schar := ['a', 'a', 'а', 'а'] эквівалентна аднаразоваму ўпа­мі­нан­ню сімвала 'a'.

Прыклад.

VAR

x : Byte;

S : SET OF Byte;

. . .

x := 3;

S := [1, 2, x];

S := S+[x+1];

Мноства можа пашырацца ці скарачацца па ходу праграмы. Існуюць пра­цэ­ду­ры Exclude і Include, якія адпаведна выдаляюць і дабаўляюць эле­мент у мноства. Працэдура Include(S, i) выдаляе з мноства S эле­мент, зададзены параметрам і. Працэдура Exclude(S, i) дабаўляе да мно­ст­ва S элемент, зададзены параметрам і.

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

Аб’яднанне мностваў

(тое, што ўваходзіць у 1-е і 2-е мноствы)

Рысунак

У матэматыцы

У мове Pascal

Абазначэнне

Прыклад

Абазначэнне

Прыклад

Перасячэнне мностваў

(тое, што агульнае ў 1-м і 2-м мноствах)

Рысунак

У матэматыцы

У мове Pascal

Абазначэнне

Прыклад

Абазначэнне

Прыклад

Рознасць мностваў

(тое, што ёсць толькі ў 1-м мностве, за выключэннем таго, што ёсць у абодвух)

Рысунак

У матэматыцы

У мове Pascal

Абазначэнне

Прыклад

Абазначэнне

Прыклад

Вынік гэтых аперацый – заўсёды мноства.

Другая група аперацый – гэта аперацыі параўнання ці адносін: =, <>, >=, <=. Вынік заўсёды true ці false.

Аперацыя

Назва

Форма

Тлумачэнне: false – у адваротным выпадку

=

Праверка на роўнасць

S1=S2

True, калі S1 і S2 складаюцца з аднолькавых элементаў

<>

Праверка на няроўнасць

S1<>S2

True, калі S1 і S2 адрозніваюцца хоць адным элементам

<=

Праверка на падмноства 

S1<=S2

True, калі ўсе элементы S1 уваходзяць у S2 незалежна ад парадку чаргавання

>=

Праверка на падмноства 

S1>=S2

True, калі ўсе элементы S2 у S1

IN

Праверка на ўваходжанне элемента ў мноства

E IN S1

E IN […]

True, калі значэнне элемента E належыць базаваму тыпу мноства і ўваходзіць у мноства S1 ці мноства-канстанту ([...])

Аперацыю IN добра скарыстоўваць, калі трэба праверыць пападанне зна­чэн­ня ў дыяпазоны пералічальных тыпаў:

IF ch IN ['a'.. 'x', 'A'.. 'X'] THEN

IF j IN [100..200] THEN

Тут скарыстаны канстанты тыпу «мноства». Гэтым спрашчаюцца ла­гіч­ныя аператары. Параўнайце наступную ўмову:

C IN ['0'.. '9', 'A'.. 'Z'];

і такую:

(C>='0') AND (C<='9') OR (C>='A') AND (C<='Z');

Вартасці мностваў відавочны:

1) эканоміцца памяць, бо аб’ём памяці, які займае адзін элемент мно­ства, роў­ны 1 біту. Значыць, аб’ём мноства з 256 элементаў складае ўсяго 32 бай­ты, а адвольнага – (MaxNum DIV 8)-(MinNum DIV 8)+1;

2) эканоміцца час, бо распрацоўшчыкі транслятараў звычайна звя­зва­юць эле­мен­ты мноства з машынным словам, у якім: код «1» – пры­сут­насць эле­мен­та ў мностве, «0» – адсутнасць.

Значыць, параўнанне мностваў і аперацыі над мноствамі рэалізаваны на ўзроўні апрацоўкі бітаў.

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

Тып «мноствы» істотна пашырае гібкасць мовы.