Упаковані масиви
Як правило, одне ціле число або один символ займають у пам'яті ЕОМдва байти. У той же час для зображення символу достатньо одного байта. З метою економії пам'яті машини у мові програмування Паскаль запроваджено поняття упакованого масиву. Елементи упакованого масиву зберігаються по два у двох байтах ЕОМ. І хоча при цьому заощаджується місце в пам'яті, але збільшується час доступу до компонентів масиву.
Елементи упакованого масиву використовуються в програмі так само, як елементи не упакованого масиву. Тільки пам'ять машини автоматично виділяється менше.
Наприклад, масиви А та АР описані як
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 – який був*)