- •Визначувані типи
- •Опис визначуваного типу
- •Класифікація відомих визначуваних типів
- •Використання визначуваного типу
- •Підтипи
- •Перелічувані типи. 1
- •Перелічувані типи. 2
- •Об'єднаний тип
- •Складений тип
- •Рядковий тип
- •Представлення рядків
- •Представлення рядкового літерала в мові Pascal
- •Операції над рядковими знченнямив мові Pascal
- •Представлення рядкового літерала в мові с
- •Індексовані типи
- •Устрій одновимірних мультизначень
- •Устрій двовимірних мультизначень
- •Опис устрою мультизначення індексованого типу
- •Устрій паспорту індексованого типу
- •Приклади опису устрою індексованого типу. 1
- •Приклади опису устрою індексованого типу. 2
- •Індексатор
- •Основні властивості індексованих типів
- •Опис об'єктів індексованого типу. 1
- •Опис об'єктів індексованого типу. 2
- •Ініціалізація об'єктів індексованого типу
- •Ініціалізація при створенні об'єкту
- •Ініціалізація об'єкту оператором привласнення
- •Особливості індексованого типу в мові с.1
- •Особливості індексованого типу в мові с.2
- •Іменовані (комбіновані) типи
- •Механізм обробки значень іменованого типу
- •Відмінності в застосуванні іменованого та індексованого типів
- •Використання типізованих вказівних змінних іменованого типу
- •Спеціальний випадок використання типізованих вказівних змінних іменованого типу
- •Структури даних. Визначення
- •Структури даних. Визначення
- •Лінійні структури даних
- •Лінійний список
- •Лінійний список
- •Підходи до реалізації списку
- •Моделювання лінійного списку. 1
- •Векторне представлення лінійного списку. 1
- •Векторне представлення лінійного списку. 2
- •Векторне представлення стеку
- •Векторне представлення черги
- •Моделювання лінійного списку. 2
- •Зв’язане представлення черги. 2
- •Нелінійні структури даних
- •Представлення дерев
- •Устрій дерева як структури даних
- •Види дерев як структур даних
- •Моделювання дерева. Приклад 2
Об'єднаний тип
Тип, значення якого в будь-який момент часу є значенням одного з типів, оголошених в опису, називається об'єднаним (united type) або об'єднанням.
При створенні об'єкта цього типу пам'ять для його значення відводиться під більше (за розміром) значення типу, оголошеного в об'єднанні, тому, що всі значення об’єкту об’єднаного типу розміщуються на єдиній ділянці пам’яті. Тип є лише в мові С.
Доступ до значень об'єднаного типу відбувається шляхом зазначення позначення об'єкту цього типу та позначення відповідного компонента типу, що ввійшов в опис типу.
С:
union perform
{
int m_nVal;
char m_cLit;
};
perform MyUnion, *pMyUnion;
int nI;
pMyUnion = &MyUnion;
MyUnion.m_cLit = 'A'; // MyUnion.m_ nVal = 99 =>
// MyUnion.m_cLit == 'c';
pMyUnion->m_cLit = MyUnion.m_cLit;
(*pMyUnion).m_cLit = 'B';
nI = MyUnion.m_nVal;
nI = sizeof(perform); // nI == 2
Розміщення в пам’яті значення об’єднання
Тут значення компонента об’єднання m_nVal займають два байти (тому що вони належать типу integer), а значення компонента m_cLit – один байт.
С:
union int_or_long {
int i;
float l;
} a_number = {45};
main(){
// {45, 6.305843e-44)
a_number.l = 22.89; // {7864, 22.89)
}
union int_or_long {
int i;
float l;
} a_number = {45.78};
main(){
// {45, 6.305843e-44)
a_number.l = 22.89; // {7864, 22.89)
}
Складений тип
Типи, значення яких утворюються з кількох значень одного того ж самого чи різних типів, називаються складеними (aggregate types).
Оскільки значення складеного типу утворюється з кількох значень, то воно називається мультизначенням. Якщо мультизначення утворюється зі|із| значень одного й того самого типу, то воно називається гомогенним. Якщо мультизначення складається зі значень різних типів, то воно називається гетерогенним.
До складених визначуваних типів належать рядковий, індексований, іменований і множинний типи.
Рядковий тип
Цей тип можна було б віднести до напередвизначених типів, коли б не змінна довжина його мультизначення.
Мультизначення рядкового типу утворюється зі значень символьного типу і тому є гомогенним. Мультизначення можна подати ланцюжком символів, довжина якого зазначається при описі типу. Самовиражене мультизначення рядкового типу є рядковим літералом, або рядком (string).
Представлення рядків
Існує три види представлень значень рядків рядкового типу:
із статичною довжиною (довжина рядка зазначена в ньому ж кількістю символів, заданих при описі; використовується в мовах Fortran, Cobol, Pascal, Ada);
з обмеженою динамічною довжиною (довжина рядка зазначається в ньому ж спеціальним символом, зазвичай Ø; використовується в мовах С, С++);
із динамічною довжиною (довжина рядка не зазначається, пам'ять захоплюється та вивільняється динамічно; використовується в мовах програмування Snobol, Perl).
Представлення рядкового літерала в мові Pascal
У мові Pascal довжина рядка зазвичай обмежується 255 символами. Це пов'язано з тим, що довжина мультизначення зберігається в ньому ж, у першому байті, представлення із статистичною довжиною, а максимальне значення, яке можна зберігати в байті пам’яті є 255.
У мові Pascal для опису рядкового типу використовується зарезервований ідентифікатор string, а кількість складових мультизначення вказується в символах ”[ та ”]”.
type
My = string[10];
var
myString : my;
cLit : char;
begin
myString := 'Name';
cLit := myString [1]; // cLit := MyString; cLit := ‘tt’;
myString := myString +'1';
// myString[0] = #5 myString = 'Name1'
myString := myString[0] +'1';
// myString[0] = #2 myString = #5’1’
end.
