Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


J: k..l;




де n – m >= l—k, то розпаковку масиву pa можна було б виконати так:

FOR j:= k ТО l DO a[j —k+ m]:= pa [j];

Після виконання цього оператора масив ра буде розпако­ваний:

a [m]:= ра [k]; а [т + 1]:= pa [k + 1]; .... a [l — k + m]: = pa [l].

У мові Паскаль є стандартна процедура unpack для розпаковки масиву.

unpack (pa, а, i)

Ця процедура рівносильна

FOR j:= k ТО l DO а[j — k + i]:=ра [j]

Для упаковки масиву е також стандартна процедура — раск:

раск (а, і, pa).

Ця процедура рівносильна

FOR j:= k ТО l DO ра [j]:= a[j – k + i].

Зазначимо, що упаковка і розпаковка масивів, компоненти яких належать до будь-якого іншого типу, відмінного від char, виконується так само.

 

Тип даних string. Масиви символів мають один недо­лік — їх довжина не може змінюватися під час виконан­ня програми. Під час роботи з літерними величинами дово­диться в основному мати справу з рядками, довжина яких наперед невідома. Для запису таких алгоритмів в мові Паскаль передбачений тип даних string (рядок) (в стандарт­ному Паскалі використання цього типу не передбачено). Змінні типу string на відміну від звичайного масиву симво­лів можуть набувати значень змінної довжини.

Описуючи змінні типу string, вказують максимальну довжину (атрибут довжини), яка не повинна перевищувати 255. Наприклад,

VAR line, line 1 : string [150];

line2 : string [40];

Тут описано три змінні типу string. Перші дві змінні можуть мати будь-яку довжину від 0 до 150, змінна line 2 — довільну довжину від 0 до 40. Зауважимо, що довжину 0 має порожній рядок (рядок, який не містить жодного символу). Наприклад, після оператора присвоювання line 2 :=‘’ змінна line 2 є порожнім рядком.

Для вводу значень змінних типу string використовуєть­ся оператор readln, а не read. Одним оператором можна ввес­ти тільки один рядок.

Два рядки, як і масиви символів, можна порівнювати, використовуючи операції відношення. Порівнювання вико­нується так, як і порівнювання масивів символів. Єдина відмінність тільки в тому, що рядки можуть мати різну довжину. Якщо перший рядок коротший, ніж другий, і всі його символи збігаються з відповідними символами другого рядка, то більшим вважається другий, довший, рядок. Отже, наступні логічні вирази матимуть значення true:

'DELTA' > 'ALPHA', 'APPLE' < 'PEAR', 'fir' < 'fire', 'ELEPHANT' < 'MOUSE';

вирази матимуть значення false:

'MOUSE' < 'ELEPHANT', 'DELTA' < > 'DELTA',’fir’ > 'fire'.

Операції, стандартні функції і процедури для роботи з рядками.

У мові Паскаль можна використовувати опера­цію з'єднання (склеювання, конкатенації) рядків, яка по­значається знаком +.

Наприклад, після виконання оператора присвоєння

x:= 'ТРАНС' + 'ФОРМА' + 'ТОР'

рядкова змінна х матиме значення ‘ТРАНСФОРМАТОР’. Для роботи з рядками у мові Паскаль є ряд стандартних (вбудованих) функцій.

Функція length— для заданого значення типу string видає ціле число, яке дорівнює кількості символів в зна­ченні рядка.

Наприклад, після виконання операторів (u, v — рядко­ві змінні)

u:= ‘’; v:= 'ALPHA';

write (length (v), length (u));

v:= 'КОНСТРУКТОР';

write (length ('АВТО') + length (v));

буде видано три числа: 5, 0, 15.

Функція concatвиконує операцію з'єднання рядків, які є аргументами функції. Наприклад, результатом функ­ції concat ('ТРАНС', 'ФОРМА', 'ТОР') буде рядок 'ТРАНСФОРМАТОР'. Цього ж результату можна досягти, якщо використати знак +.

Функція pos (u, v) (u, v — рядки) визначає, чи містить­ся перший рядок у другому. Результатом функції – є ціле число, яке дорівнює номеру першої зліва позиції, почина­ючи з якої рядок u входить у рядок v. Якщо перший рядок не міститься в другому, то функція видає значення 0.

Наприклад,

значення pos ('ФОРМА', 'ТРАНСФОРМАТОР') до­рівнює 6,

значення pos ('ІН', 'ФОРМА') дорівнює 0,

значення pos('IH', 'ІНФОРМАТИКА') дорівнює 1.

Функція copy (s, i, j) формує символьний рядок довжиною в j символів, починаючи з позиції i початкового рядка s.

Так, оператор

write (copy ('ТРАНСФОРМАТОР', 6, 5) видає слово 'ФОРМА', а оператор

write (copy (s, length (s) — 1, 2) — два останніх символи рядкової змінної s.

Операції вирізання алгоритмічної мови а [р : q] від­повідає в мові Паскаль функція

copy (а, р, m), де m = q — р + 1.

Для роботи з рядками можна використовувати також вбудовані процедури.

Процедура delete (s, і, j) вилучає з рядка s j символів, починаючи з позиції і. Так, після виконання операторів

х:= 'трансформатор';

delete (x, 6, 5);

writein (x)

буде виведено рядок 'транстор'.

Процедура insert (s1, s2, i) вставляє рядок s1 в рядок s2 перед символом s2[i].

Процедура str(x,s)перетворює чисельне значення х у відповідний символьний рядок, значення якого присвоюється рядковій змінній s. Якщо, наприклад, значення цілої змінної z дорівнює 1988, то після виконання оператора про­цедури ster(z, line) значення рядкової змінної line дорівню­ватиме '1988'.

Процедура val (s, v, с) перетворює рядковий вираз s у ціле чи дійсне значення (залежно від типу змінної v) і присвоює це значення змінній v; с — це ціла змінна. Якщо при перетворенні помилку не виявлено, то с набуває зна­чення 0, інакше ціла змінна с набуває значення позиції першого помилкового символу; значення v у цьому випад­ку не визначене. Якщо, наприклад, s має значення '125', то val (s, х, і) присвоїть х значення 125, а i — значення 0.

Якщо s має значення '3R5', то

val (s, х, с) присвоїть с значення 2, а х буде невизначеним.

 

2.10. Множини

У мові Паскаль використовується такий складений (структурований) тип, як множина (тип SET). Поняття мно­жини у мові Паскаль дещо вужче, ніж традиційне матема­тичне поняття. Множина може складатися з довільної кількості, включаючи нуль, компонент одного типу.

Означення типу множина має таку форму:

TYPE ім'я типу = SET OF тип компонент

Тип компонент (його ще називають базовим) — це до­вільний простий тип, крім real. Для цілого типу можна за­давати лише діапазони. Множина (тип SET) містить еле­менти базового типу, всі підмножини початкової множини і порожню множину.

Нехай, наприклад, задано такі означення і описи:

TYPE numbers = SET OF 1..3;

charset = SET OF 'A'.. ‘Z';

primarycolor = (red, green, blue);

color = SET OF primarycolor;

VAR nsl, ns2 : numbers;

chars : charset;

colorl, color2, соlогЗ : color;

Тут numbers, charset, color — імена типу множина. Значеннями змінних типу SET є конкретні множини. Тоді значеннями змінних nsl і ns2 може бути одна з множин [ ] (порожня множина), [І], [2], [З], [1, 2], [1, З], [2, З], [1, 2, З]. Зауважимо, що для позначення множини замість фі­гурних дужок у мові Паскаль використовуються квадрат­ні. Змінна chars має тип множини, ім'я якого charset. Зна­ченнями цієї змінної може бути будь-яка з множин [ ], [‘A’], [‘B’],…,[‘Z’], [‘A’,’B’],…, [‘A’, ‘Z’],…, [‘A’..’Z’].

Змінні colorl, color2, соїогЗ можуть мати значеннями одну з множин [ ], [red], [green], [blue], [red, green], [red, blue], [red, green, blue]. Кожна з множин є комбінацією основних кольорів (червоного, зеленого, синього; primary color — основний колір); порожня множина озна­чає відсутність кольору взагалі.

Для вище описаних змінних можна записати, наприклад, такі оператори присвоювання:

ns1:= [2, 3]; ns2:=[];

chars:= ['A'..'H', 'P'];

color1 := [red, blue];

Як бачимо, в програмі множина задається у вигляді списку елементів, які взято в квадратні дужки. У дужках може не бути елементів, може стояти один або кілька еле­ментів, які відокремлюються один від одного комами. Еле­ментом може бути константа, змінна, вираз, значення яко­го належать базовому типу, а також інтервал значень (па­ра елементів, які відокремлені двома крапками).

Множина, яка описується за допомогою інтервалa, в якого перше граничне значення більше другого, тракту­ється як порожня. Наприклад, множини [3..1], ['С’..'А'], [blue..red] трактуються як порожні множини.

Змінні, які належать до типу множина, можуть бути описані безпосередньо в розділі VAR, без попереднього означення імені типу в розділі TYPE. Наприклад,

VAR nsl, ns2: SET OF 1..3;

При роботі з множинами можна використовувати опе­рації об'єднання (+), перетину (*), різниці (—) множин.

Наприклад,

[1, 2]+ [2, 3] ® [1, 2, 3]

[1, 2] * [2, 3] ® [2]

[1, 2, 3] - [1] ® [2, 3]

['A'..'H', 'P'] — ['D'..’H'] ® ['A', 'В', 'С', 'P']

За допомогою таких операцій можна будувати вирази, значення яких належать даному типу. В операторах при­своювання для змінних типу множина права частина в за­гальному випадку є виразом того самого типу.

Множини можна порівнювати за допомогою операцій відношень =,<>,<=,>=. Логічний вираз S1 = S2, де S1 і S2 однотипні множини, має значення true, якщо S1 і S2 містять одні й ті самі елементи. Якщо множини 51 і S2 відрізняються хоча б одним елементом, то значення виразу S1 < > S2 є true. Значення true мають також ви­рази:

S1 < = S2, якщо множина S1 є підмножиною множи­ни S2;

SI > = S2, якщо множини S2 є підмножиною множини S1.

Наприклад, значення true мають вирази:

[2, 3] = [2, 3];

['A'...'Z'] - ['С', ‘К'] < = ['A'..'Z']

[1, 2, 3] = [1..3]

[2]<>[1..3]

[ ] < = [red, blue]

Значення виразів

[2] < = [3]

[1,2]*[ ]<>[ ]

[3..1] >=[2] є false.

Є спеціальна операція IN, яка дає змогу перевірити, чи належить елемент даній множині. Загальний вигляд опе­рації входження такий:

вираз базового типу IN вираз типу множина Результатом операції е значення типу boolean : true — якщо значення виразу зліва є елементом множини, яка є значенням виразу справа; false — якщо не є елементом мно­жини.

Використання операції входження дає змогу в деяких випадках записувати логічні вирази значно простіше.

Наприклад, оператор

IF (х = 2) OR (x = 4) OR (x = 5) OR (x = 6) OR (x = 7) THEN... можна записати так:

IF x IN [2, 4...7] THEN...

2.11. Записи

У мові Паскаль для подання сукупності даних різних типів є структурований тип запису. Запис (тип RECORD) — це структура даних, яка складається з фіксованого числа компонентів, які називаються полями. При цьому поля мо­жуть бути різних типів.

Записи зручно використовувати тоді, коли необхідно об'єднати різні дані, які належать до одного об'єкта.

Наприклад, інформація про книгу в бібліотеці може бути подана у формі запису, який містить такі дані:

Шифр

Автор

Назва

Видавництво

Рік видання

Анотація

Ціна

Прапорець, який показує, чи видано книгу, чи ні. Ан­кетні відомості про учня можуть містити, зокрема, такі поля:

Прізвище

Ім'я

Стать

Рік народження

Клас

Оцінки

Отже, записи, як і масиви, використовуються для опису впорядкованої сукупності величин. Проте між ними є суттєві відмінності.

Так, компоненти масиву повинні бути одного типу, а компоненти запису можуть мати різні типи. Іншим є й механізм вибору компонентів масиву і запису. Для масивів використовується обчислювальний вибір компонентів, при якому змінна з індексами однозначно вказує на потрібний компонент. У записах кожному компоненту присвоюється власне ім'я, яке й використовується для вибору поля.

Означення типу запис у мові Паскаль має вигляд:

TYPE ім'я типу =

RECORD

ім'я m1, ім'я n1, …: тип 1;

ім'я m2, ім'я n2, …: тип 2;

………………………….

ім'я mk, ім'я nk, …: тип k

END;

Тут імена mj, nj, …, j = 1,2, …, k, — це імена полів, які є окремими компонентами запису.

Приклади означення структур типу запис:

1. TYPE complex = RECORD

re : real;


Поделиться:

Дата добавления: 2015-08-05; просмотров: 72; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты