Початки програмування на С++
Типи даних • Тип даних - це множина допустимих значень, які може приймати той чи інший об'єкт, а також множина допустимих операцій, які застосовні до нього. У сучасному розумінні тип також залежить від внутрішнього представлення інформації.
Що визначає тип даних • Внутрішнє представлення даних в пам'яті комп'ютера; • Обсяг пам'яті, що виділяється під дані; • Множина (діапазон) значень, які можуть приймати величини цього типу; • Операції та функції, які можна застосовувати до даних цього типу.
Класифікація типів даних
Специфікатори типів Існує чотири специфікатори типу даних, уточнюючих внутрішнє представлення та діапазон базових типів: • short (короткий) • long (довгий) • signed (знаковий) • unsigned (беззнаковий)
Цілочисельний тип Від кількості пам'яті, що відводиться під об'єкт залежить множина допустимих значень, які може приймати об'єкт: short int - займає 2 байти, отже, має діапазон від -32 768 до +32 767; int - займає 4 байти, отже, має діапазон від 2 147 483 648 до +2 147 483 647; long int - займає 4 байти, отже, має діапазон від -2 147 483 648 до +2 147 483 647; long int - займає 8 байтів, отже, має діапазон від -9 223 372 036 854 775 808 до +9 223 372 036 854 775 807.
Типи з плаваючою крапкою • float (з одинарною точністю) • double (з подвійною точністю) Для представлення дійсних чисел використовуються два формати: 1. з фіксованою крапкою [знак] [ціла частина]. [дробова частина] Наприклад: -8. 13; . 168 (аналогічно 0. 168); 183. (аналогічно 183. 0). 2. з плаваючою крапкою (експоненційної форми) мантиса Е / е порядок Наприклад: 5. 235 e +02 (5. 235 x 102 = 523. 5); -3. 4 Е 03 (-3. 4 x 10 -03 = - 0. 0034)
Символьний тип даних • тип сhar -1 байт • Тип wchar_t призначений для роботи з набором символів, для кодування яких недостатньо 1 байта, наприклад в кодуванні Unicode. Розмір типу wchar_t – 2 байти Тип char може використовуватися зі специфікатором signed та unsigned. У даних типу signed char можна зберігати значення в діапазоні від -128 до 127. При використанні типу unsigned char значення можуть знаходитися в діапазоні від 0 до 255.
Логічний (булевий) тип даних • тип BOOL Можливі значення • TRUE (1) • FALSE (0)
Тип void • • • вказівка про неповернення функцією значення; вказівка про неотримання параметрів функцією; створення нетипізованих покажчиків.
Перетворення типів - це приведення значення змінної одного типу в значення іншого типу. • Явне • Неявне
Перетворення цілого типу • • Ціле зі знаком перетвориться до більш короткого цілого зі знаком, з втратою інформації: пропадають всі розряди числа, які знаходяться вище (або, відповідно - нижче) границі, що визначає максимальний розмір змінної. Ціле зі знаком перетвориться до більш довгого цілого зі знаком шляхом розмноження знака. Тобто всі додані біти двійкового числа будуть зайняті тим же числом, яке знаходилося в знаковому біті: якщо число було додатнім, то це буде, відповідно 0, якщо від’ємним, то 1. Ціле зі знаком до цілого без знака. Першим кроком ціле зі знаком перетвориться до цілого зі знаком відповідного цільового типу. У одержаного значення біт знаку не відкидається, а розглядається рівноправним по відношенню до решти бітів, тобто тепер всі біти утворюють числове значення. Перетворення цілого зі знаком до плаваючого типу відбувається без втрати інформації, за винятком випадку перетворення типу long int або unsigned long int до типу float, коли точність часто може бути втрачена.
Перетворення цілого без знаку • Ціле без знаку перетворюється до більш короткого цілого без знаку або із знаком шляхом усічення. • Ціле без знаку перетворюється до більш довгого цілого без знаку або із знаком шляхом додавання нулів зліва. • Ціле без знаку перетворюється до цілого зі знаком того ж розміру. Якщо взяти для прикладу, unsigned short і short - числа в діапазоні від 32768 до 65535 перетворяться на від’ємні. • Ціле без знаку перетворюється до плаваючого типу. Спочатку воно перетворюється до значення типу signed long, яке потім перетворюється в плаваючий тип.
Перетворення типів з плаваючою крапкою • Величини типу float перетворюються до типу double без зміни значення. • Величини double перетворюються до float c деякою втратою точності, тобто, кількості знаків після коми. Якщо значення дуже велике для float, то відбувається втрата значущості, про що повідомляється під час виконання. • При перетворенні величини з плаваючою крапкою до цілих типів вона спочатку перетворюється до типу long (дробова частина плаваючої величини при цьому відкидається), а потім величина типу long перетвориться до необхідного цілого типу. Якщо значення дуже велике для long, то результат перетворення не визначений.
Втрата інформації при деяких перетвореннях
Приклад перетворення типів
Структура програми • Програма на мові С + + являє собою набір функцій. Одна з функцій повинна мати ім'я main. Операційна система передає управління в програму користувача на функцію з цим ім'ям і тим самим починається виконання програми. Від функцій в програмі функція main відрізняється тим, що її не можна викликати зсередини програми, а її параметри, якщо вони існують, звичайно задаються ОС. Хоча це необов'язково, main буває першою функцією в тексті програми.
• Блок програми - це описи та інструкції, об'єднані в одну конструкцію шляхом укладення їх у фігурні дужки.
Структура програми #директиви препроцесора опис; • main ( ) { . . . return 0; } function 1 ( ) { } function 2 ( ) { } . . . function n ( ) { }
Змінні • Змінна - це іменована ділянка пам'яті, в якій зберігається значення, яке може бути змінене програмою. Всі змінні перед їх використанням повинні бути оголошені. • Загальна форма оголошення має такий вигляд: тип список_змінних;
Імена змінних (ідентифікатори) • Перший символ повинен бути буквою або символом підкреслення, наступні символи повинні бути буквами, цифрами або символами підкреслення. • Верхні і нижні регістри символів розглядаються як різні. • Ідентифікатор не може збігатися з ключовим словом або з ім'ям бібліотечної функції.
Оголошення змінних може бути розташоване в трьох місцях: • усередині функції (локальні) • у визначенні параметрів функції (формальні) • поза всіма функціями (глобальні)
Локальні змінні Змінні, оголошені усередині функцій, називаються локальними змінними • Локальну змінну можна використовувати тільки всередині блоку, в якому вона оголошена • Локальні змінні існують тільки під час виконання програмного блоку, в якому вони оголошені, створюються вони при вході в блок, а руйнуються - при виході з нього.
Формальні параметри Якщо функція має аргументи, то мають бути оголошені змінні, які приймають їх значення. Ці змінні називаються формальними параметрами функції. • Оголошуються після імені функції всередині круглих дужок: int is_in(int a, int c)
Глобальні змінні • Глобальні змінні видимі і можуть використовуватися в будь-якому місці програми • Глобальні змінні зберігаються в окремій фіксованій області пам'яті, створеній компілятором спеціально для цього. • Глобальні змінні використовуються в тих випадках, коли різні функції програми використовують одні й ті ж дані.
Арифметичні операції Оператор Операція + Унарний мінус, віднімання Додавання -- Декремент ++ Інкремент * Множення / Ділення % Залишок від ділення
Логічні операції Оператор Операція && І || АБО ! НЕ
Порозрядні операції Оператор & | ~ ^ >> << Операція І АБО НЕ Виключаюче АБО Зсув вправо Зсув вліво
Операції порівняння Оператор Операція < Менше <= Менше-рівне > Більше >= Більше-рівне != Не дорівнює == Дорівнює
Директиви препроцесора – це інструкції компілятору • #define • #endif • #ifdef - “якщо визначено” • #elif • #error – припинення компіляції • #ifndef -“якщо не визначено” • #else • #if • #include • #undef
Директива # define визначає ідентифікатор і послідовність символів, яка буде підставлятися замість ідентифікатора кожен раз, коли він зустрінеться у вихідному файлі. Ідентифікатор називається іменем макросу, а сам процес заміни – макрозаміною. У загальному вигляді директива виглядає таким чином: # define ім’я_макроса послідовність_символів #undef –анулює ім’я макроса
Директива # include • Директива # include дає вказівку компілятору читати ще один вихідний файл - на додаток до того файлу, в якому знаходиться сама ця директива. # include “user. h" # include
Директиви #if, #else, #elif, #endif • Директиви умовної компіляції дають можливість в залежності від значення константного виразу включати або виключати ті чи інші частини коду.
Етапи створення програми