- •О.Ф.Тарасов, о.В.Алтухов
- •1 Заняття № 1 Вивчення інтегрованого середовища с
- •1.1 Теоретичні відомості
- •1.2 Хід роботи
- •1.3 Вимоги до звітів
- •1.4 Питання для контролю і самостійної роботи
- •2 Заняття № 2 Функції введення/виведення даних printf( ), scanf( ). Лінійні обчислювальні процеси
- •2.1 Теоретичні відомості
- •2.2 Хід роботи
- •2.3 Індивідуальне завдання до заняття №2
- •2.4 Питання для контролю і самостійної роботи
- •3 Заняття № 3 Розробка програм зі скалярними типами даних
- •3.1 Теоретичні відомості
- •Приклад
- •3.2 Хід роботи
- •3.3 Індивідуальне завдання до заняття № 3
- •3.4 Питання для контролю і самостійної роботи
- •4 Заняття № 4 Розробка програм з циклічними обчислювальними процесами
- •4.1 Теоретичні відомості
- •Алгоритм роботи оператора циклу for ( )
- •4.2 Хід роботи
- •4.3 Індивідуальне завдання до заняття № 4
- •4.4 Питання для контролю і самостійної роботи
- •5 Заняття № 5
- •Розгалуження обчислювального процесу.
- •Оператори, які реалізують розгалуження: if... Else, switch,
- •Умовна операція ( ? : )
- •5.1 Теоретичні відомості
- •Умовна тернарна операція ( ? : )
- •Оператор варіанта switch
- •Приклад
- •5.2 Хід роботи
- •5.3 Індивідуальне завдання до заняття № 5
- •5.4 Питання для контролю і самостійної роботи
- •6 Заняття № 6 Операції с, їхні пріоритети і використання. Перетворення типів
- •Пріоритет операцій і порядок виконання (асоційованість)
- •(Новий_тип) Операнд
- •Приклад
- •6.2 Хід роботи
- •6.3 Індивідуальне завдання до заняття № 6
- •6.4 Питання для контролю і самостійної роботи
- •7 Заняття № 7
- •7.1 Теоретичні відомості
- •Оголошення функцій (створення прототипів)
- •([ Список_типів_параметрів ])
- •Синтаксис визначення функцій
- •[ Return Значення_типу_що_повертається ]
- •Використання локальних і глобальних перемінних у функціях. Виклик функції
- •Приклад
- •7.2 Хід роботи
- •7.3 Індивідуальне завдання до заняття № 7
- •7.4 Питання для контролю і самостійної роботи
- •8 Заняття № 8
- •8.1 Теоретичні відомості
- •Основні операції з покажчиками
- •Покажчики і цілі величини
- •Динамічне розміщення покажчиків у пам'яті
- •Приклад
- •Приклад
- •8.2 Хід роботи
- •8.3 Індивідуальне завдання до заняття № 8
- •8.4 Питання для контролю і самостійної роботи
- •9 Заняття № 9
- •9.1 Теоретичні відомості
- •Приклад
- •9.2 Хід роботи
- •9.3 Індивідуальне завдання до заняття №9
- •9.4 Питання для контролю і самостійної роботи
- •10 Заняття № 10
- •10.1 Теоретичні відомості
- •Приклад
- •10.2 Хід роботи
- •10.3 Індивідуальне завдання до заняття № 10
- •10.4 Питання для контролю і самостійної роботи
- •Заняття №11 Обробка символьних даних
- •Теоретичні відомості
- •Індивідуальне завдання до заняття №11
- •Питання для контролю і самостійної роботи
- •Приклад
- •Хід роботи
- •Питання для контролю і самостійної роботи
- •Теоретичні відомості
- •Приклад
- •Індивідуальне завдання до завдання №13
- •Питання для контролю і самостійної роботи
- •Заняття № 14 Розробка програм зі складеними типами даних
- •Структури
- •Хід роботи
- •Питання для контролю і самостійної роботи
- •Заняття № 15 Використання покажчиків для роботи зі складеними типами даних (2години)
- •Теоретичні відомості
- •Приклад
- •Хід роботи
- •Питання для контролю і самостійної роботи
- •Використання покажчиків для роботи з функціями
- •Покажчики як параметри функції
- •[Const ] Тип * Ім'я_покажчика
- •Приклад
- •Хід роботи
- •Індивідуальне завдання до заняття №16
- •Питання для контролю і самостійної роботи
- •Використання функцій високого і низького рівня для роботи з потоками (файлами)
- •Функції для роботи з файлами
- •Хід роботи
- •Індивідуальне завдання до заняття №17
- •Питання для контролю і самостійної роботи
- •Розробка програм із багатофайловою структурою. Заголовочні файли. Класи пам'яті перемінних і функцій
- •Керування многофайловими проектами
- •Використання адміністратора проектів
- •Приклад
- •Основний файл проекту
- •Заголовний файл
- •Хід роботи
- •Індивідуальне завдання до заняття №18
- •Питання для контролю і самостійної роботи
- •Графічні функції
- •Графічні примітиви
- •Хід роботи
- •Індивідуальне завдання до заняття №19
- •Питання для контролю і самостійної роботи
- •Заняття№20 Розробка програм з використанням класів
- •Теоретичні відомості
- •Оголошення і визначення класу
- •Тіло класу
- •Інкапсуляція. Керування доступом до членів класу
- •Використання даних-членів класу
- •Хід роботи
- •Індивідуальне завдання до заняття №20
- •Питання для контролю і самостійної роботи
- •Заняття№21 Використання конструкторів і деструкторів у класах
- •Теоретичні відомості
- •Ініціалізація об'єктів класу
- •Деструктори
- •Виклик деструкторів
- •Хід роботи
- •Питання для контролю і самостійної роботи
- •"Друзі" класів (friend)
- •Хід роботи
- •Індивідуальне завдання до заняття №22
- •Контрольні питання для підготовки і самостійної роботи
- •Віртуальні базові класи
- •Віртуальні деструктори
- •Хід роботи
Основні операції з покажчиками
Найбільш важливі операції з покажчиками: операція звертання за адресою " * " (називається також разіменуванням покажчика або разадресацією, або операцією непрямої адресації) і операція визначення адреси " & ". Операція звертання за адресою служить для доступу до даних описаного типу із застосуванням їх фізичної адреси, тобто для присвоєння і зчитування даних.
Приклад
int*x; //Оголошення покажчика (не плутати з разадресацію)
int d = 4;
x = &d; //Покажчик містить адресу перемінної d
int у = *х; //Разадресація покажчика х, у = 4
У першому рядку приведене оголошення покажчика х, а у другому - оголошення перемінної d. У третьому рядку перемінній-покажчику х привласнюється адреса, де зберігається значення перемінної d, у четвертому рядку перемінній у привласнюється разіменоване значення покажчика х, тобто значення 4. Якщо першу операцію з покажчиком написати без адреси, тобто х =d (а х оголошений як int*x), то х буде вказувати на комірку пам'яті з адресою ??:4 (?? - у залежності від моделі пам'яті), і значення перемінної y буде дорівнювати значенню, що зберігається за зазначеною адресою.
Таким чином операція визначення адреси “ & “ повертає адресу пам'яті свого операнда (перемінної, константи, функції і т.д.).
Формат одержання адреси
Адреса = & Перемінна
Крім того, покажчики можна привласнювати один одному, якщо вони одного типу.
Приклад
int a = 6, *y; y = &a; //Покажчик y містить адресу a
int b, *x; x = y; b = *x; //Перемінна в = 6
Усім покажчикам для ініціалізації можна привласнювати константу NULL, при цьому гарантується, що ця адреса не збігається ні з якою іншою адресою, яка може бути зарезервована системою. Операції з покажчиками будуть також розглянуті при роботі з масивами.
Покажчики і цілі величини
Вираз цілого типу може складатися і відніматися з перемінної типу покажчик. Два покажчики на об'єкти того ж самого типу можуть відніматися і у цьому випадку результат має цілий тип.
Ім’я масиву має тип покажчика на тип елементів масиву і вміщує адресу першого елементу масиву. Покажчик може адресувати масив символів. Ініціалізація масиву символів може виконуватись рядком символів. В цьому випадку в кінці масиву автоматично розташовується символ “ \0”.
Приклад
сhar *a = "Slovo", c; //Ініціалізація покажчика рядком символів
c = *(a+3); // c = 'v'
char *d, *b = "ABCDE";
d = b + 4;
c = *(- - d);
char k = *d;
int r = *(d - b);
Динамічне розміщення покажчиків у пам'яті
Щоб не викликати конфлікт в операційній системі чи не порушити роботу програми, потрібно виділяти місце для зазначеного типу даних у допустимому просторі пам'яті, що називається «heap» або «купа».
Виділення (якщо є можливість) пам'яті і присвоєння її адреси покажчику, за допомогою якого можна працювати з описаним типом, здійснюється бібліотечною функцією malloc ( ) або alloc( ) (заголовочний файл <mem.h>), яку необхідно попередньо включити в програму директивою # include. Ці функції при наступних виділеннях пам'яті запобігають конфліктам між покажчиками. Оголошення та формат використання функції malloc ( ) має вигляд
void * malloc ( size_t size );
Покажчик = (Тип_покажчика *) malloc ( Розмір_
виділеної_пам'яті_байт )
Покажчик на один тип може бути перетворений у покажчик на інший тип. При цьому забезпечується можливість перетворення покажчика на тип об'єкта більшого розміру в покажчик на тип об'єкта меншого розміру і зворотно без змін.
Функція динамічного розподілу пам'яті malloc ( ) приймає розмір (у байтах) об'єкта, для якого виділяється пам'ять, і повертає покажчик на тип void, який перетворюється на тип Покажчика, розташованого зліва від знака операції присвоювання. Звільнення динамічно виділеної пам'яті виконується за допомогою функції free ( ).