Змінні і типи даних - студопедія
Поняття тип даних (data type) включає в себе і спосіб кодування даних, і операції, які можна виконувати над цими даними. Наприклад, до типу даних integer (цілі числа) відносяться числові дані, що складаються з цілих чисел, які зберігаються в двійковому додатковому коді. Над цілими числами можна виконувати звичайні арифметичні операції і операції порівняння. До типу даних real, або речові числа (в деяких мовах він називається float), відносяться числові дані, які містять дійсні числа, представлені в форматі з плаваючою комою. Над даними типу real можна виконувати ті ж операції, що і над цілими числами. Однак зверніть увагу на те, що при складанні двох цілих чисел та при складанні двох дійсних чисел виконуються різні дії.
Припустимо, що ми хочемо використовувати змінну WeightLimit в нашій програмі для звернення до комірки пам'яті, що містить числове значення, представлене в довічним додатковому коді. У мовах С, C ++, Java і С # ми б скористалися виразом
яке означає: «Ім'я WeightLimit буде використовуватися далі в програмі по відношенню до комірки пам'яті, що містить значення, представлене в довічним додатковому коді». В одному вираженні можна оголосити тип декількох змінних. Наприклад, вираз
int Height. Width;
оголошує обидві змінні, Height і Width, як змінні типу integer. Крім того, багато мов дозволяють при описі змінної задавати її первісне значення1. Таким чином, вираз
int WeightLimit = 100;
не тільки оголошує змінну WeightLimit змінної типу integer, але гакже привласнює їй початкове значення 100.
Іншими поширеними типами даних є character (символьний тип) і Boolean (логічний тип). До символьному типу даних character відносяться дані, що складаються з символів, що зберігаються в кодуванні ASCII або Unicode. Над такими даними можна виконувати операцію порівняння, тобто визначати, чи знаходиться один символ перед іншим в алфавітному порядку, перевірку, чи є ланцюжок символів подцепочкой інший, а також операцію конкатенації, тобто тобто додавання одного ланцюжка символів в кінець іншого.
До логічного типу даних Bool ean відносяться елементи даних, які можуть приймати тільки два значення - true (істина) або false (брехня). До таких змінних можна застосовувати операцію запиту, є поточне значення змінної істиною або брехнею. Наприклад, якщо змінна EndOfList є змінною логічного типу, то можна використовувати такий вислів
if (EndOfList) then (.) else (.).
Приклад того, як можна описати одні й ті ж змінні в різних мовах програмування, представлений в табл. 5.1. (Змінні Length і Width є змінними дійсного типу, змінні Price, Tax і Total - цілочисельні змінні, а змінна Symbol є змінною символьного типу.) Зверніть увагу на те, що мови більше розрізняються за формою, ніж за змістом. У розділі 5.4 ми розглянемо, як транслює програма використовує відомості, зібрані з таких декларативних виразів, щоб перетворити програми, написану на мові високого рівня, в машинні команди. А поки зверніть увагу на те, що таку інформацію можна використовувати для пошуку помилок. Наприклад, вираз, яке вимагає складання двох змінних символьного типу, по всій видимості, містить помилку.
Таблиця 5.1. Опис змінних в різних мовах програмування
Опис змінних в мові Pascal var
Lehgth, Width: real; Price, Tax, Total: integer; ____________________________________________ Symbol: ____________ char; ___________________
Опис змінних в мовах С, C ++, С # float Length, Width; і Java int Price. Tax, Total: ____________________________________________char Symbol; ______________________________
Опис змінних в мові FORTRAN REAL Length, Width
IMTEGER Price. Tax. Total __________________________________________________CHARACTER Symbol_______________________________
Змінні в програмі можуть бути не тільки даними простих типів, але також структурами даних (data structure), тобто даними, упорядкованими якимось чином. Наприклад, текст зазвичай розглядається як довгий ланцюжок символів, а облікові записи продажів можна представити у вигляді таблиці, в якій в рядку записуються продажу, зроблені певним співробітником, а в стовпці - продажу, зроблені в певний день.
Найбільш поширеною структурою даних є однорідний масив (homogeneous array). Однорідний масив являє собою набір значень одного типу, наприклад одновимірний список, двовимірну таблицю або таблицю з великою кількістю вимірювань. У більшості мов програмування для того, щоб описати масив, потрібно задати кількість вимірювань, а також число елементів в кожному вимірі. Наприклад, структура, описана вираженням в мові С int Scores [2] [9];
означає: «Мінлива Scores буде використовуватися в програмі для позначення двовимірного масиву цілих чисел, що складається з двох рядків і дев'яти стовпців» (рис. 5.5). Те ж саме вираз на мові FORTRAN буде виглядати наступним чином:
INTEGER Scores (2.9).
Після опису масиву до нього можна звертатися по заданому імені. А до окремих елементів масиву можна звертатися за допомогою цілих чисел, які називаються індексами (indices). Вони визначають рядок і ряд, в якому знаходиться елемент масиву. Однак діапазон індексів змінюється від мови до мови. Наприклад, в мові С (і його похідних C ++, Java і С #) індекси починаються з 0. Тобто елемент, що знаходиться у другому рядку і четвертому стовпці масиву Scores, можна позначити за допомогою виразу Scores [1] [3], а елемент , розташований в першому рядку і першому стовпці, буде позначатися як Scores [0] [0]. Навпаки, в мові FORTRAN індекси починаються з 1, тому елемент, розташований у другому рядку і четвертому стовпці, буде позначатися як Scores (2,4) (див. Рис. 5.5).
Деякі мови програмування надають програмісту свободу у виборі інтервалу індексів для однорідного масиву. Наприклад, вираз Scores: array [3..4. 12..20] of integer:
Таблиця 5.1. Опис змінних в
різних мовах програмування
Width Tax. Total

в мові Pascal описує такий же двовимірний масив цілих чисел Scores, як і наведений вище, за винятком того, що рядки тут визначені значеннями 3 і 4, а стовпці пронумеровані від 12 до 20. Тому елемент, розташований в другому ряду і четвертому стовпці, буде позначатися виразом Scores [4,15].
На відміну від однорідного масиву, в якому елементи даних відносяться до одного типу, неоднорідний масив (heterogeneous array) може містити дані різних типів. Наприклад, сукупність даних про співробітника компанії може складатися з елемента символьного типу Name, елемента целочисленного типу Аді і елемента дійсного типу Ski 11 Rating. У мовах Pascal і С (рис. 5.6) такий тип масиву називається відповідно записом (record) і структурою (structure).
Опис неоднорідного масиву в Pascal
Name: packed array [1..8] of char; Age: integer; SkillRating: real end
Опис неоднорідного масиву в С
float SkillRating;> Employee:

До компоненту неоднорідного масиву зазвичай звертаються по імені масиву, після якого ставиться крапка і потім вказується ім'я цього компонента. Наприклад, до компоненту Age масиву Employee (див. Рис. 5.6) можна звернутися за допомогою виразу Employee.Age.
У розділі 7 ми розглянемо, як абстрактні структури, такі як масиви, реалізуються в машині. Зокрема, ми покажемо, що дані, які містить масив, можуть бути розкидані по оперативної пам'яті або по пристрою зберігання даних. Саме тому ми розглядаємо структури даних, як концептуальну форму упорядкування даних. Насправді, розташування даних в пристрої машини може абсолютно відрізнятися від їх абстрактної структури.
Константи і літерали
Іноді в програмі використовуються фіксовані, наперед задані значення. Наприклад, програма, що керує повітряним рухом певного аеропорту, може містити різні посилання на положення цього аеропорту щодо рівня моря. В процесі написання програми це значення, скажімо, 645 футів, можна кожного разу записувати числом. Така явна запис значення називається літералом (literal). В результаті використання литералов виходять такі вирази, як
EffectiveAlt <- Altimeter - 645
де EffectiveAlt і Altimeter - змінні, а 645 - літерал.
Для того щоб уникнути цих труднощів, в мовах програмування існує можливість привласнювати постійним значенням описові імена. Такі імена називаються константами (constant). Наприклад, описовий оператор мови Ada
AirportAlt constant Integer: = 645:
присвоює імені Ai rportAl t фіксоване значення 645 целочисленного типу. Те ж саме вираз можна записати на Java:
final int AirportAlt = 645;
а на C ++ і С # воно матиме такий вигляд:
const AirportAlt = 645.
Після такого виразу ім'я AirportAlt можна використовувати замість литерала 645. Використовуючи цю константу в нашому псевдокоді, вираз
EffectiveAlt <- Alireter - 645
можна переписати як
EffectiveAlt <- Alimeter - AirportAlt.
Неважко помітити, що останній вираз краще відображає зміст твердження. Крім того, якщо програму, яка містить такі константи, використовувати в іншому аеропорту, який знаходиться на висоті 267 футів над рівнем моря, то все, що потрібно зробити, це змінити параметри одного оператора опису.