- •О.Ф.Тарасов, о.В.Алтухов
- •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
- •Контрольні питання для підготовки і самостійної роботи
- •Віртуальні базові класи
- •Віртуальні деструктори
- •Хід роботи
Хід роботи
Вивчити теоретичні відомості.
Відповідно до індивідуального завдання розробити алгоритм рішення задачі. На базі заняття №11 реалізувати завдання, при цьому використовувати бібліотечні функції, розглянуті на лекції й у теоретичній частині заняття. Наприклад, використовувати функції пошуку одиночних символів і послідовностей у заданому рядку. Забезпечити можливість передачі даних з оточення (з командного рядка).
Розробити програму.
Набрати програму на комп'ютері, налагодити її і вивчити роботу операторів.
Одержати результати.
Оформити звіт.
Підготуватися до захисту роботи, вивчивши контрольні питання по даній темі.
Індивідуальні завдання до заняття №12 взяти з попереднього заняття №11.
Вимоги до змісту звіту приведені в занятті №1.
Питання для контролю і самостійної роботи
Який заголовочний файл необхідний для роботи з бібліотечними функціями обробки символьних даних ?
Який символ необхідний наприкінці рядка для нормальної роботи з рядками ?
Що означає модифікатор const при оголошенні формальних параметрів функцій ?
Як оголосити масив покажчиків ?
Для чого можна використовувати масив покажчиків при роботі із символьними даними ?
Поясніть формати приведених у теоретичній частині функцій.
Який тип має і’мя функції ?
Що означає буква n у функціях strncmp( ), strnset( ) ?
Що означає буква i у strcmpi( ) ?
Що означає додаткова буква r у функції strrchr( ) ?
Що адресує покажчик на n - ний символ у рядку ?
Як виконати передачу даних з оточення (з командного рядка) у функцію main( ) ?
Як виконується порівняння букв і слов ?
Заняття № 13
Вкладені цикли. Багатомірні масиви. Масиви покажчиків
(2години)
Ціль роботи: вивчити конструкції мови С і оператори для обробки багатомірних масивів із застосуванням оператора циклу for.
Теоретичні відомості
Масиви і покажчики, індексні вирази
Ідентифікатор масиву є покажчиком на тип елементів цього масиву і адресує його перший елемент. По визначенню, оператор індексування [ ] інтерпретується таким чином, що А[ j ] еквівалентно *(А + j). Відповідно до правил перетворення, що виконуються при операції "+", якщо А є ім'ям масиву (ім'я масиву є покажчиком на тип елементів масиву), те індексне вирази А[ j ] указує на j - ий елемент масиву А. Таким чином j є індексом масиву і має цілий тип (int). Індексування є комутативною операцією, тому припустимі записи j[А], *(j+А).
Багатомірний масив у С можна оголосити в такий спосіб:
[ <Клас_пам'яті ] Тип_даних Ім'я_масиву> [ <Розмір_масиву1> ] [<Розмір_масиву2> ][ <…> ][ <Розмір_масиву_N> ]
Кожний Розмір_масиву_i може бути заданий константним вирази м. Вирази типу А[ i ][ j ][ ][ k ] називається індексним. У випадку використання багатомірних масивів інтерпретація індексного вирази наступна: А[ i ][ j ][ ][ k ] являє собою n-мірний масив з рангом i*j*...*k, тоді якщо A зустрічається у вираженні, воно розглядається як вектор, що містить i (n -1)-мірних масивів з рангом j*...*k. Ім'я масиву A є покажчиком на цей вектор. Якщо до покажчика застосовується оператор ( * ) у явному чи в неявному вигляді (як результат індексування), то результат буде вказувати на елемент (n -1)-мірного масиву.
Розглянемо, наприклад масив int x[N][M] - масив цілих чисел розмірності N * M. Масиви в мові С зберігаються по рядках (останній індекс змінюється найшвидше). Перший індекс (N) в оголошенні масиву дозволяє визначити обсяг необхідної для масиву пам'яті, але не грає ніякої ролі в обчисленні переміщення покажчика при доступі до елемента масиву – х[ i ][ j ]. Даний елемент розташований фактично в i+1 рядку, j+1 стовпці, тому що індекси в масиві починаються з нульового. Масив розглядається як одномірний (вектор), що містить N елементів, кожний з яких є масивом (у даному випадку) з М елементів типу int. Ім'я масиву x є покажчиком на тип: масив, який має М елементів типу int і адресує нульовий елемент цього масиву. Розглянемо елемент масиву x[ i ][ j ]. У вираженні *x[ i ], що еквівалентно *( x+i ), x – покажчик на нульовий елемент масиву. Для доступу до i-того елемента-масива х переміщується на і довжин об'єкта, на який указує покажчик, а саме на і довжин одномірного масиву (рядка з М елементів типу int), тобто на (i * М * sizеof( int)). У результаті індексної операції виходить покажчик, що адресує нульовий елемент i-го одномірного масиву (рядка) х[ i ][ 0 ]. Для другого індексу знову застосовується той же алгоритм. Покажчик переміщується на величину ( j * sizеof( int )), після чого відбувається разіменування (разадресація). Після разадресації результат буде мати тип int. Елемент масиву можна представити також у вигляді *( * ( х + i ) + j ).
Таким чином, загальне переміщення у байтах покажчика на нульовий елемент масиву X[N][M] при доступі x[ i ][ j ] обчислюється по формулі
(( i * M + j) * sizеof( int )).
Для тривимірного масиву float х3D[N][M][K] величина переміщення в байтах для доступу до елемента х3D[ i ][ j ][ k ] обчислюється по формулі
і * ( M + K ) + j * R + k) * sizеof( float ).
Для доступу до елемента масиву х3D[ i ][ j ][ k ] можна також використовувати вирази *( *( *( х3D + i ) + j ) + k ).