
- •Визначувані типи
- •Опис визначуваного типу
- •Класифікація відомих визначуваних типів
- •Використання визначуваного типу
- •Підтипи
- •Перелічувані типи. 1
- •Перелічувані типи. 2
- •Об'єднаний тип
- •Складений тип
- •Рядковий тип
- •Представлення рядків
- •Представлення рядкового літерала в мові Pascal
- •Операції над рядковими знченнямив мові Pascal
- •Представлення рядкового літерала в мові с
- •Індексовані типи
- •Устрій одновимірних мультизначень
- •Устрій двовимірних мультизначень
- •Опис устрою мультизначення індексованого типу
- •Устрій паспорту індексованого типу
- •Приклади опису устрою індексованого типу. 1
- •Приклади опису устрою індексованого типу. 2
- •Індексатор
- •Основні властивості індексованих типів
- •Опис об'єктів індексованого типу. 1
- •Опис об'єктів індексованого типу. 2
- •Ініціалізація об'єктів індексованого типу
- •Ініціалізація при створенні об'єкту
- •Ініціалізація об'єкту оператором привласнення
- •Особливості індексованого типу в мові с.1
- •Особливості індексованого типу в мові с.2
- •Іменовані (комбіновані) типи
- •Механізм обробки значень іменованого типу
- •Відмінності в застосуванні іменованого та індексованого типів
- •Використання типізованих вказівних змінних іменованого типу
- •Спеціальний випадок використання типізованих вказівних змінних іменованого типу
- •Структури даних. Визначення
- •Структури даних. Визначення
- •Лінійні структури даних
- •Лінійний список
- •Лінійний список
- •Підходи до реалізації списку
- •Моделювання лінійного списку. 1
- •Векторне представлення лінійного списку. 1
- •Векторне представлення лінійного списку. 2
- •Векторне представлення стеку
- •Векторне представлення черги
- •Моделювання лінійного списку. 2
- •Зв’язане представлення черги. 2
- •Нелінійні структури даних
- •Представлення дерев
- •Устрій дерева як структури даних
- •Види дерев як структур даних
- •Моделювання дерева. Приклад 2
Опис об'єктів індексованого типу. 2
C:
float fMatr [ 10 ][ 20 ] ;
паспорт
10, 20 – межеві пари;
(0…9) (0…19) – дискретні діапазони;
float – індикатор типу компонентів.
Оскільки для опису індексів у мові С використовується вираз, то нижнім значенням межевої пари вважається нуль, а значення межевої пари не може бути від’ємним.
Бачимо, що в мові С визначуваний індексований тип використовується анонімно, без позначення, тому лише в описі програмного об'єкта.
Ініціалізація об'єктів індексованого типу
У мовах програмування ініціалізувати об'єкти можна трьома способами:
за умовчанням (у контексті механізму розподілу пам'яті);
при створенні об'єкту;
за допомогою оператора присвоювання.
Ініціалізація за умовчанням здійснюється відповідно до вивчених стратегій розподілу пам’яті. Тому далі розглятимуться останні два способи.
Ініціалізація при створенні об'єкту
Об'єкти ініціалізуються значеннями типів, еквівалентним типу значень компонентів мультизначень.
Значення ініціалізації виробляють R-вирази. Список R-виразів беруть з обох боків у символи "(", ")" (мова Pascal) або у символи “{”, “}” (мова С).
Якщо мультизначення багатовимірне, то список, який відповідає кожному виміру також береться в відповідні дужки.
Pascal:
Приклад 1:
const
digit : array [0..5] of integer = (0, 1, 2, 3, 4, 5);
DigitChar : array [0..5] of char = ('0', '1', '3', '4', '5')
Приклад 2:
type
A = 1..3;
B = 1..5;
const
matr : array [A, B] of real = ((0.0, 1.1, 1.2, 2.1, 3.2),
(1.1, 2.1, 3.0, 2.1, 3.3),
(3.1, 0.0, 5.1, 6.3, 7.0));
С:
int nP [4][3] ={{11, 12, 13} , { 21, 22, 23},
{31, 32, 33}, { 41, 42, 43}};
int nP [][3] ={{11, 12, 13} , { 21, 22, 23},
{31, 32, 33}, { 41, 42, 43}};
int nP [][3] ={{11, 11, 11} ,
{12, 12}, { 13}};
// ={{11, 11, 11} , {12, 12, 0}, { 13, 0, 0}}
Ініціалізуючи при описі, можна не вказувати значення граничної пари першого індексу в паспорті, а наявність значень наступних індексів обов'язкова. Ініціалізація значення за невказаним значенням індексу відбуватиметься за замовчуванням. Якщо кількість ініціалізованих значень у мультизначеннях менша від значення відповідного індексу, то частина мультизначення ініціалізується нулями, а якщо більше - помилка.
Ініціалізація об'єкту оператором привласнення
type t = array ['a'..'d'] of integer; var a : t; const b: t = (65, 66, 67, 68); … begin … a := b; … end. |
var a : array [1.. 4, 1..5] of char; nI : 1..4; nJ : 1..5; cT : char; begin cT := ' A'; nI := 1; while nI < 4 do begin nJ := 1; while nJ > 5 do begin a[nI, nJ] := cT; cT := char(integer(cT) + 1); nJ := nJ + 1; end; nI := nI + 1; end; |