Основні поняття структур
5. Бурков В.Н. Основи математичної теорії активних систем. - М: Наука, 1977. - 254.
6. Ауреліо Печчеї. Людські якості. - М: Прогрес, 1985. - 311.
Типи даних розрізняються, починаючи з нижніх рівнів системи. В усіх мовах програмування розрізняються типи даних
пояснюється це тим, що для чисел цих типів відводяться різні обсяги пам'яті, використовуються різні регістри мікропроцесора, а для операцій з ними застосовуються різні команди і різні ядра мікропроцесора.
Концепція типу даних з'явилася в мовах програмування високого рівня як відображення того, що оброблювані дані можуть мати:
· Різні безлічі допустимих значень,
· Зберігатися в пам'яті комп'ютера різним чином,
· Займати різні обсяги пам'яті
· Оброблятися за допомогою різних команд процесора.
Чи існують мови без типів? Теоретично не може існувати мов, в яких відсутні типи даних.
Це випливає з того, що всі мови засновані на машині Тьюринга або на лямбда-численні.
Практично це не можливо. Можна класифікувати мови програмування за способом визначення типів даних:
1. Мови з поліморфним типом даних. Вони не пов'язують змінні, константи, формальні параметри, які повертаються значення функцій з певними типами, підтримуючи єдиний поліморфний тип даних.
У чистому вигляді таких мов не зустрічається, але близькі приклади - MS Visual Basic - тип variant, Пролог. У цих мовах змінна може приймати значення будь-якого типу, в параметри функції можна передавати значення будь-яких типів, і повернути функція також може значення будь-якого типу.
Зіставлення типів значень змінних і параметрів з застосовуваними до них операціями здійснюється безпосередньо при виконанні цих операцій.
Наприклад. вираз a + b, може означати
· Складання чисел, якщо a і b мають числові значення.
· З'єднання рядків в одну, якщо a і b мають строкові значення.
· Неприпустима (помилкова) операція, якщо типи значень a і b несумісні.
Такий порядок називають динамічною типізацією. Мови, що підтримують тільки динамічну типізацію, називають іноді безтипових. однак, типи даних в них все одно є.
2. Мови з неявним визначенням типів. BASIC є прикладом мови без типів, але це строго типізований мову в ньому розрізняються:
· Строкові типи (додається символ $),
· Числові типи (нічого не додається).
3. Мови з типом, визначеним користувачем. Відомі мови, в яких типи даних визначаються автоматично, а не задаються користувачем.
Кожноїзмінної, параметру, функції приписується певний тип даних.
В цьому випадку для будь-якого виразу можливість його виконання та тип отриманого значення можуть бути визначені без виконання програми. Такий підхід називають статичної типізацією.
При цьому правила поводження зі змінними, виразами і параметрами різних типів можуть бути як дуже суворими (С ++), так і досить ліберальними (Сі).
Наприклад. в класичному мовою Сі практично всі типи даних сумісні - їх можна застосовувати спільно в будь-яких виразах, привласнювати значення змінної одного типу змінної іншого майже без обмежень.
Компілятор генерує код, що забезпечує перетворення типів, а логічна коректність такого перетворення залишається на совісті програміста.
Подібні мови називають мовами зі слабкою типізацією. Протилежністю є мови з сильною типізацією. Ада, де кожна операція вимагає операндів строго заданих типів. Ніякі автоматичні перетворення типів не підтримуються.
На практиці мови програмування підтримують кілька моделей визначення типів одночасно
Практичне застосування. Т іпи мов програмування не завжди строго відповідають подібним математичним типам.
Наприклад, тип ціле число більшості мов програмування не відповідає прийнятому в математиці. Оскільки в математиці даний тип не має обмежень ні зверху, ні знизу, а в мовах програмування дані обмеження є.
У мовах і системах є безліч цілих типів, що відрізняються визначеним обсягом займаної пам'яті.
якщо розглядати клас як тип даних, то визначення класу, - фактично є визначенням предиката типу. Також можлива перевірка предиката як на етапі компіляції (перевірка відповідності типів), так і на етапі виконання (поліморфізм; дуже тісно пов'язане з поліморфними типами). Для базових типів подібні предикати задані творцями мови спочатку.
У мовах програмування класифікують змінні відповідно до деяких характеристиками і виділяють:
Що представляють собою окремі значення, безлічі значень або безлічі множин.
Будь-яка константа, змінна, вираз чи функція відноситься до деякого типу.
Основні принципи концепції типу наступні:
1. Будь-який тип даних визначає безліч значень, до яких відноситься деяка константа, яка може приймати змінна або вираз і яке може формуватися функцією або операцією
2. Тип будь-якої змінної позначається константою, змінною або виразом, може бути виведений з її вигляду або по її опису. Для цього немає необхідності проводити будь-які обчислення
3. Кожна операція або функція вимагає аргументів для її визначення і дає результат певного типу. Якщо операція допікає аргументи декількох типів, наприклад «+» використовується як для складання дійсних чисел, так і для складання цілих чисел, то тип результату регламентується цілком певними правилами.
4. Найважливіші основні операції - порівняння і присвоювання. т. е. Перевірка відносини рівності (і порядку в разі упорядкований-них типів), і чин за "установці рівності".
Основна мета будь-якої програми полягає в обробці даних. Дані різного типу зберігаються і обробляються по-різному. У будь-якій алгоритмічній мові кожна константа, змінна, результат обчислення виразу або функції повинні мати певний тип.
Тип даних визначає:
· Внутрішнє представлення даних в пам'яті комп'ютера;
· Безліч значень, які можуть приймати величини цього типу;
· Операції і функції, які можна застосовувати до величинам цього типу.
Обов'язкове опис типу дозволяє компілятору проводити перевірку допустимості різних конструкцій програми. Від вибору типу величини залежить послідовність машинних команд, побудована компілятором.
Всі типи мови С ++ можна розділити на:
· Прості (скалярні), можуть бути стандартними і певними програмістом.
У мові С ++ визначено шість стандартних простих типів даних для представлення цілих, дійсних, символьних і логічних величин. На основі цих типів, а також масивів і покажчиків (покажчик не є самостійним типом, він завжди пов'язаний з будь-яким іншим конкретним типом), можна вводити опис власних простих або структурованих типів.
До структурованим типами відносяться:
Прості типи поділяються на:
· Типи з плаваючою точкою.
Для опису стандартних типів визначені наступні ключові слова:
int (цілий); Розмір типу int стандартом ANSI не визначається. Він залежить від реалізації. Для 16-розрядного процесора під величини цього типу відводиться 2 байти, для 32-розрядної - 4 байта.
char (символьний); Символьний тип (char). Під величину символьного типу відводиться кількість байт, достатню для розміщення будь-якого символу з набору символів для даного комп'ютера. Як правило, це 1 байт.
Тип char, як і інші цілі типи, може бути зі знаком або без знаку.
У величинах зі знаком можна зберігати значення в діапазоні від -128 до 127. При використанні специфікатор unsignedзначенія можуть перебувати в межах від 0 до 255. Величини типу char застосовуються також для зберігання цілих чисел, що не перевищують межі зазначених діапазонів.
wchar_t дабл-ю-чар-підкреслення-ти (розширений символьний); Тип wchar_t призначений для роботи з набором символів, для кодування яких недостатньо 1 байта, наприклад, Unicode. Розмір цього типу залежить від реалізації; як правило, він відповідає типу short.
bool (логічний); Логічний тип (bool). Величини логічного типу можуть приймати тільки значення true і false. Внутрішня форма подання значення false - 0 (нуль). Будь-яке інше значення інтерпретується як true. При перетворенні до цілого типу true має значення 1.
float (речовинний); типу даних для зберігання речових значень: Внутрішнє подання дійсного числа складається з мантиси і порядку. Довжина мантиси визначає точність числа, а довжина близько - його діапазон.
Константи з плаваючою точкою мають за замовчуванням тип double. Можна явно вказати тип константи за допомогою суфіксів F, f (float) і L, l (long). Наприклад, константа 2E + 6L матиме тип longdouble.
Таблиця - Діапазони значень простих типів даних для IBM PC
double (речовинний з подвійною точністю). типу даних для зберігання речових значень: СМ. float
Існує чотири специфікатор типу, уточнюючих внутрішнє уявлення і діапазон значень стандартних типів:
short (короткий); Специфікатор short перед ім'ям типу вказує компілятору, що під число потрібно відвести 2 байта.
long (довгий); Специфікатор long означає, що ціла величина буде займати 4 байти.
signed (зі знаком); При використанні специфікатор signed старший біт числа інтерпретується як знаковий (0 - позитивне число, 1 - негативне).
unsigned (без знака). Константам, яке трапляється в програмі, приписується тип відповідно до їх виду. Програміст може явно вказати необхідний тип за допомогою суфіксів L, l (long) і U, u (unsigned). Наприклад, константа 32L має тип long і займає 4 байта.
Типи shortint, longint, signedint іunsignedint можна скорочувати до short, long, signed іunsignedсоответственно.