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

Тыпізаваныя канстанты тыпу «мноства»

Канстанта тыпу «мноства»:

Канстанта-элемент:

Прыклад.

CONST Xset : SET OF Char=['а', 'б', 'в'];

Разгледзім выкарыстанне даных з тыпам «мноства».

Задача. Запраграміраваць рэшата Эратасфена для пошуку простых лі­каў велічыні  255.

Алгарытм. Сярод усёй сукупнасці лікаў ад 2 да 255 выкраслім крат­ныя чарговаму простаму.

PROGRAM Proct;

VAR

Prime : SET OF 2..255;

j, i, m : Integer;

BEGIN

Write ('увядзі m <= 255');

Readln (m);

Prime := [2..m];

FOR i := 2 TO m DO

IF i IN Prime THEN

FOR j := 2 TO (m DIV i) DO

Prime := Prime-[i * j];

{выключылі ўсе кратныя простаму ліку i}

Writeln ('простыя лікі <=', m);

FOR i := 2 TO m DO

IF i IN Prime THEN Write (i:4);

END.

Заданне. Зададзена паслядоўнасць розных сімвалаў. Падлічыць, ко­ль­кі сярод іх сімвалаў-лічбаў.

Алгарытм. Бяром чарговы сімвал, пакуль ён не «.». Калі ён у мнос­т­ве сімвалаў-лічбаў, падлічваем яго. Раздрукоўваем вынік.

Масівы

Пераменныя тыпу «масіў», або масіў, – гэта ўпарадкаваная су­куп­насць ад­на­ты­пных даных, якія захоўваюцца паслядоўна.

Тып «масіў» вызначаецца наступнай канструкцыяй:

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

Тып індэксаў паказвае, у якіх межах змяняецца індэкс масіву. Тып кам­па­нен­таў – любы вядомы тып даных.

Калі ў апісанні масіву зададзены адзін індэкс, масіў называецца ад­на­мер­ным, два – двухмерным, nn-мерным. Памеры масіву абмежаваны то­ль­кі аб’ёмам памяці. Для Turbo Pascal – гэта прыблізна 64 кб.

У секцыі TYPE можна вызначыць тыпы масіваў. Гэта будуць най­мен­ныя тыпы масіваў, якія потым скарыстоўваюцца пры вызначэннях пе­ра­мен­ных тыпу «масіў».

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

Індэксіраваныя элементы масіву называюцца індэксіраванымі пе­ра­мен­ны­мі і могуць быць выкарыстаны як простыя пераменныя.

TYPE

Array01to10 = ARRAY [ 1..10] OF Real;

Array11to20 = ARRAY [11..20] OF Real;

Гэтыя два тыпы (Array01to10 і Array11to20) па-рознаму ну­ма­ру­юць свае элементы, хаця абодва ўтрымліваюць наборы з 10 значэнняў ты­пу Real.

VAR

a01to10 : array01to10;

a11to20 : array11to20;

Доступ да i-га элемента масіву:

a01to10[i], i=1,…,10,

a11to20[i], i=11,…,20.

Прыклад 1.

CONST k=4; n=6;

TYPE TVector = ARRAY [1..4] OF Integer;

TMatrica = ARRAY [-4..4, -4..4] OF Real;

TMassiv = ARRAY [1..4] OF TVector;

VAR Matr : TMatrica;

Vect : TVector;

M : TMassiv; масіў масіваў}

Mas : ARRAY [1..k, 1..n] OF Char;

Доступ да элемента masij  mas[i,j]. Доступ да элементаў масіву M можна ажыццявіць і так: m[i][j], і так: m[i,j].

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

Прыклад 2.

TYPE

MonthType = (January, February, March, April, May);

ComplectType = ARRAY [MonthType] OF Word;

SpringType = ARRAY [March..May] OF Word;

VAR

Complect : ComplectType; {5 элементаў тыпу Word}

Spring : SpringType; {3 элементы тыпу Word}

Alpfa : ARRAY [A..Z] OF Char; {26 элементаў}

Switch : ARRAY [boolean] OF Byte; {2 элементы}

Зварот да элементаў вызначаных масіваў:

Spring[April]; Alpfa[X]; Switch[true];

Прыклад 3.

VAR

M : ARRAY[-10..0, A..C, boolean] OF Byte;

Эквівалентны запіс:

M : ARRAY[-10..0] OF ARRAY[A..C] OF

ARRAY[boolean] OF Byte;

У апошнім выпадку M[0] – масіў-матрыца тыпу

ARRAY [A..C] OF ARRAY [boolean] OF Byte;

ці

M[0] – ARRAY [A..C, boolean] OF Byte.

M[0, B] – гэта вектар тыпу ARRAY [boolean] OF Byte.

M[0, B, false] – значэнне тыпу Byte.

Выкарыстоўваць жа элементы M[0], M[0, B] даволі складана, бо трэ­ба клапаціцца аб сумяшчальнасці тыпаў даных.

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

A : ARRAY[1..5, 1..5] OF Byte;

{a[1,1], a[1,2], a[1,3],…, a[1,5], a[2,1],…, a[5,5]}

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

Калі праграма ці фрагмент яе кампілюецца ў рэжыме {$R+}, тады пры звароце да элементаў масіваў будзе правярацца належнасць зна­чэн­ня індэкса аб’яўленаму дыяпазону, і ў выпадку памылкі (парушэнне межаў дыяпазону) узнікне памылка Range check Error.

Прыклад 4.

v : ARRAY [1..10] OF Integer;

Зварот да элемента v[11] дасць памылку на кроку кампіляцыі ў рэ­жы­ме {$R+}.

Калі ў рэжыме {$R-} узнікне аналагічная сітуацыя, праграма будзе пра­ца­ваць далей, і некарэктнае значэнне індэкса можа здабыць якое-небудзь значэнне, але ўсё ж не з патрэбнага масіву. Звы­чай­на праграму адладжваюць у рэжыме {$R+}, а эксплуатуюць пры рэ­жы­ме {$R-}.

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