Упаковані масиви

Як правило, одне ціле число або один символ займають у пам'яті ЕОМдва байти. У той же час для зображення символу достатньо одного байта. З метою економії пам'яті машини у мові програмування Паскаль запроваджено поняття упакованого масиву. Елементи упакованого масиву зберігаються по два у двох байтах ЕОМ. І хоча при цьому заощаджується місце в пам'яті, але збільшується час доступу до компонентів масиву.

Елементи упакованого масиву використовуються в програмі так само, як елементи не упакованого масиву. Тільки пам'ять машини автоматично виділяється менше.

Наприклад, масиви А та АР описані як

Var AP: Packed Array [1..3] of Boolean;

A: Array [1..3] of Boolean;

Зазвичай упакований масиви ідентичні в сенсі обсягу і характеру інформації, що зберігається, але розрізняються способами представлення в пам'яті ЕОМ.

Упакований масив можна описувати у розділі змінних або з використанням розділу типів.

Опис у розділі типів:

Назва типу типу = Packed Array [ім'я індексу] of тип елемента;

Var ім'я змінної: назва типу;

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

До упакованих символьних масивів у мові програмування Паскаль належить рядки символів, які задаються або розділ операторів, або розділ констант (рядки символів, а чи не символьні рядки String, про які йтиметься далі). Як відомо, тип константи однозначно визначається її записом. Тому якщо, наприклад, у розділі констант визначено константу S='end', вона належить до типу: Packed Array [1..3] of Char.

Вважається, що символьні константи мають тип упакованих масивів:

Packed Array [1..n] of Char;

де n - Довжина рядка.

Символьні масиви та константи можуть брати участь в операціях присвоєння та порівняння.

Нехай,наприклад, опис символів масиву має вигляд:

Type Mas = Packed Array [1..7] of Char;

Тоді можна записати такий оператор:

Якщо до рядків і упакованих символьних векторів застосовують операції порівняння, то аргументи обов'язково повинні містити однакову кількість символів, тобто. їх типи д/б ідентичними. Операції порівняння виконуються посимвольно, зліва направо.

Приклад: String ) - функція типу String, зчеплення рядків;

2) Copy (ім'я рядка, № поч. символу, кількість символів) – функція копіювання;

3) Delete (ім'я рядка, № поч. символу, кількість символів) – функція видалення;

4) Insert (ім'я підрядка, ім'я рядка, № поч. символу в рядку) - вставка;

5) Length (ім'я рядка) - функція типу Integer, обчислює довжину рядка;

6) Pos (ім'я підрядка, ім'я рядка)- функція типу Integer, шукає у рядку перше входження підрядка і дає № позиції, з якої вона починається; якщо підрядок не знайдено, значення функції буде = 0;

7) Str (число Real або Integer >, ім'я рядка) – процедура, що перетворює число типу Real або Integer у рядок символів так, як це робить процедура Writeln перед викликом; параметри, якщо вони є, задають формат перетворення;

8) Val (ім'я рядка, число Real або Integer, параметр) – процедура, що перетворює рядок символів у внутрішнє уявлення ціле чи речове числа; параметр = 0, якщо перетворення проведено успішно, інакше він містить номер позиції в рядку, де виявлено помилковий символ;

9) Upcase (символ) - функція типу Char, повертає символ у верхньому регістрі, якщо він визначений для нього, або самсимвол, якщо йому немає верхнього регістра.

Приклад: Upcase(‘a’) дасть A,

Приклад:

st:= concat ('12','345'); (*вийде st ® 12345*)

insert('-',st1,2); (*вийде st1 ® 3-45*)

delete(st, pos('2',st),3); (*вийде st ® 15*)

str(pi:6:2,st); (*вийде st ® 3.14*)

st1:='3.1415'; (*вийде st1 ® 3.1415*)

val(st1,x,y); (*вийде y=2, x – який був*)