У випадку багатовимірних масивів елементи їх розміщуються послідовно в пам’яті в порядку задання розмірностей. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

У випадку багатовимірних масивів елементи їх розміщуються послідовно в пам’яті в порядку задання розмірностей.



Якщо масиви використовуються в якості типізованих констант, то їх константні значення задаються переліком значень всіх елементів по кожній розмірності, елементи 1-ї розмірності обмежуються дужками. Якщо ж більше ніж одна, то кожен наступний рівень передбачає зовнішньою парою дужок.

б) Регулярнийтипрядкисимволів:

Структура даних, елементи якої є символами у Pascal є рядки символів. По способу організації і розміщення у пам’яті подібні до масивів. Їх відносять до однієї групи складених типів – регулярних.

Рядок – це деякий набір однотипних елементів. Проте їх кількість може змінюватися, але не перевищує деякої фіксованої межі

В ранніх версіях Pascal рядки навіть оголошувалися як масиви(упорядковані масиви символів).

В Turbo Pascal рядки символів оголошуються службовим словом STRING. При оголошенні може задаватися граничне значення довжини рядка, що слідує після слова string у квадратних дужках.

Це значення може лежати в межах від 0 до 255.

Реальна довжина рядка може бути меншою, але не більшою. Якщо така ситуація виникає, то залишок, що перевищує граничну довжину, втрачається.

Величини записуються в апострофах.

Наприклад

Var

S1: string;

S2: string[6];

S1:=’ABCDEFGH’;

S2:=S1; {S2=’ABCDEF’}

Для того, щоб апостроф сам став символом, а не лише його обмеженням, він повинен бути записаний двічі.

В пам’яті під рядки символів відводяться ділянки, кількість байт яких на одиницю більше від вказаної граничної довжини. Додатковий байт, який має нульовий номер, містить символ, код якого дорівнює реальній межі рядка. Якщо реальна менша від граничної, відведенні, але не використанні байти містять пусті символи, код яких дорівнює нулю.

Реальну довжину рядка легко змінити, при цьому інформація, яка знаходиться в хвості ділянки не втрачається і відновлюється, якщо повернутися до початкової довжини.

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

При роботі із окремими елементами рядка слід пам’ятати, що цей елемент матиме типу char і для окремих стандартних підпрограм, що працюють з рядками він буде незастосовний.

Зауваження Рядок з одного символу і окремий символ типу char не одне і теж.

Для роботи із рядками символів, крім операцій індексного доступу можуть виконуватися операції об’єднання та порівняння та ряд дій, що реалізуються стандартними процедурами і функціями.

Об’єднання (конкатенація).

Конкатенація – приєднання одного рядка в кінець іншого.

Наприклад

S:=’і’ + ‘ стань’ + ‘ зіркою’; {і стань зіркою}

Якщо результат конкатенації перевищує граничну довжину, то надлишок просто ігнорується.

Операція порівняння

Два рядки рівні, якщо вони мають однакову кількість елементів і елементи відповідні рівні.

Наприклад

S1: string;

S2:string;

S1:= ‘ABCD’; {S1=S2}

S2:= ‘ABCD’;

Порівняння рядків порівнюється по-байтно, починаючи з першого символа.

в) Регулярнийтипмножини

Множини і тип даних теж відносяться до регулярних складених типів. Це означає, що елементи таких структур даних будуть однотипні значення (цілі числа, символи, перелічувальні типи). На відмінну від масивів, де кількість елементів є фіксованою і незміною, множини можуть змінювати свій склад, проте кількість елементів не може перевищувати деякого фіксованого значення. І масиви, і рядки можуть мати декілька однакових елементів, у множині всі елементи різні.

Оголошення множини, при доповненні стандартних слів set of, після яких вказується ідентифікатор елементів множини. В якості базових типів можуть бути лише порядкові типи і кількістю елементів до 256. це цілі byte, shorting, символи char, логічні boolean.

Наприклад

Var

A: set of byte;

B: set of 0..100;

C: set of char;

D: set of rainbow;

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

Наприклад

A:=[109,100,0,5..50];

B:=[100,0..99];

C:=[‘A’,’Z’];

D:=[red];

Множини можуть бути пустими[ ].

В пам’яті множини представляються у вигляді чисел достатньо великого розміру. Кожне із цих чисел в своєму подвійному записі матиме одиничний біт у позиції, що відповідає присутньому елементу. Таким чином множини займають у пам’яті 256 бітів і до 32 байт.

Якщо базовий тип є перелічувальний або інтервальний із меншою ніж 256 елементів, то і відповідне поле в пам’яті буде менше. Заданя перелічувальних типів визначає порядок бітів, що відповідають кожному елементу.

5. Комбінованіструктуриданих.

а) Записи

Масиви, рядки, множини давали складені структури даних, елементи яких були одного і того ж типу. Кількість елементів в них могла б бути різною. В масивах фіксованою, в рядках і множинах могла б змінюватися, але тип був би спільним. Часто виникає проблема у формування структур даних, елементи яких мають різний тип.

Об’єднання цих типів в одну структуру

Оголошуються записи за допомогою слова record. Після нього слідує перелік окремих елементів запису. Елементи описуються через ідентифікатор і тип, що розділюється двокрапкою.

В кінці запис закривається службовим словом end.

TYPE

<ім’я типу запису> = RECORD

<ідентифікатор1>: <тип поля>;

<ідентифікатор2>: <тип поля>;

...

END;

Наприклад

Type

Student = record

Name: string;

Yy, mm, dd: word;

Pol: (female, male);

Educ: (state, pay);

Usp:real;

End;

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

Оскільки записи є комбінаціями різних полів, то доступ до окремого поля повинен здійснюватися при допомозі складеної ідентифікації, кожне поле має своє ім’я.

Якщо весь запис позначається деяким ідентифікатором деякої змінної, то кожне ім’я поля має вигляд

<ідентифікатор запису>.<ідентифікатор поля запису>

Наприклад

A.name, a.year, a.pol, a.educ

Враховуючи, що запис є комбінацією різних типів, можна будувати записи із записів.

Наприклад

Дату народження можна оголосити не трьома цілими числами, а записом трьох чисел.

Type

Date = record

Yy: integer;

Mm, dd: byte;

Таким чином ми отримуємо запис в записі.

Для доступу до окремих полів дати народження, в цьому випадку теж використовуються складені ідентифікатори.

Враховуючи скомбінованість структури, ввід і вивід даних можливе лише по окремих полях.

Якщо запис містить невелику кількість полів, то використання складених ідентифікаторів не є обтяжливим, але коли полів багато і щоразу використовується звернення до більшості з них, то використання загального імені запису в кожному випадку вимагає конструктивної роботи по набору тексту. Тому в таких випадках використовуються спеціальні оператори приєднання або оператори надзапису.

WITH <ім’я запису>DO <оператор над полями>;

Наприклад

With a do

Begin

Readln(name);

With date born do

Readln(yy, mm, dd);

Readln(usp);

Операції над записами зводяться до операцій відношення до порівняння на рівність і не рівність.

Рівні – записи, в яких структура і значення всіх полів однакові.

Наприклад

Програма формування бази даних про студентів у вигляді масиву із п записів.

Type

Student = record

{}

end;

Var

a: array[1..n] of student;

i, j: byte;

Begin

for i:=1 to n do

with a[i] do

Begin

writeln(‘введіть ім’я’);

readln(name);

With date born do

Begin

writeln(‘введіть дату народження’);

readln(yy,mm,dd);

end;

writeln(‘введіть стать: 0-жін; 1-чол’);

readln(j);

if j=1 then pol:=male else pol:=female;

writeln(‘введіть форму навчання: 0-держ; 1-плат’);

readln(j);

if j=1 then educ:=pay else educ:=state;

writeln(‘введіть успішність’);

readln(usp);

end;

Формування баз даних має свої переваги і недоліки. До переваг відносять те, що масив розміщується у швидкій оперативній пам’яті, а це значно зменшує час роботи.

Крім того, розміри масивів є фіксованими, а отже збільшити кількість записів не вдасться.

Набагато зручніше реалізовувати бази даних у вигляді файлів.

б) Записизваріантами

Часто бази даних повинні містити інформацію, структура якої залежить від значень окремих полів.

Наприклад

В базі даних про студентів для хлопців актуальним може бути відношення до військової служби (придатний, непридатний) і зріст (в танкові війська до 175 см), а для дівчат інтерес може мати колір волосся, очей, улюблена косметика.



Поделиться:


Последнее изменение этой страницы: 2016-09-19; просмотров: 235; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.151.141 (0.02 с.)