- •Структуры даных і праца з імі сродкамі мовы Pascal Парадкавыя тыпы
- •Мноствы
- •Тыпізаваныя канстанты тыпу «мноства»
- •Дзеянні над масівамі
- •Дзеянні над элементамі масіву
- •Пераменныя тыпу «масіў» са стартавым значэннем, ці тыпізаваныя канстанты-масівы
- •Канстанты з тыпам «масіў»
- •Камбінаваны тып «запісы»
- •Змяненне (прывядзенне) тыпаў і значэнняў
- •Радкі сімвалаў
- •Наданне значэння радкам
- •Радковыя выразы
- •Рэдагаванне радкоў
- •Пераўтварэнне радкоў
Структуры даных і праца з імі сродкамі мовы 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» – адсутнасць.
Значыць, параўнанне мностваў і аперацыі над мноствамі рэалізаваны на ўзроўні апрацоўкі бітаў.
Недахопы мностваў – немагчымасць іх вываду (напрыклад, на экран) ці ўводу (напрыклад, з клавіятуры). Існуе магчымасць толькі пераканацца, што элемент належыць мноству. Аднак можна зрабіць наступнае: узяць нейкую рабочую пераменную, прабегчы па ўсіх базавых элементах пэўнага мноства і, пераканаўшыся, што элемент з мноства, друкаваць яго.
Тып «мноствы» істотна пашырае гібкасць мовы.