
- •Міністерство освіти Та науки україни Запорізький національний технічний університет
- •Методичні вказівки
- •Загальні положення
- •1 Типи даних та арифметичні вирази
- •1.1 Теоретичні відомості
- •1.2 Порядок виконання роботи
- •1.3 Приклад
- •1.5 Завдання на лабораторну роботу
- •1.6 Контрольні запитання
- •2 Умовні оператори
- •2.1 Теоретичні відомості
- •2.2 Порядок виконання роботи
- •2.3 Приклад
- •2.5 Завдання на лабораторну роботу
- •2.6 Контрольні запитання
- •3 Оператори циклів
- •3.1 Теоретичні відомості
- •3.2 Порядок виконання роботи
- •3.3 Приклад
- •3.5 Завдання на лабораторну роботу
- •3.6 Контрольні запитання
- •4 Масиви
- •4.1 Теоретичні відомості
- •4.2 Порядок виконання роботи
- •4.3 Приклад
- •4.5 Завдання на лабораторну роботу
- •4.6 Контрольні запитання
- •5 Робота з динамічною пам’яттю
- •5.1 Теоретичні відомості
- •5.2 Порядок виконання роботи
- •5.3 Приклад
- •5.5 Завдання на лабораторну роботу
- •5.6 Контрольні запитання
- •6 Функції. Створення та використання
- •6.1 Теоретичні відомості
- •6.2 Порядок виконання роботи
- •6.3 Приклад
- •6.5 Завдання на лабораторну роботу
- •6.6 Контрольні запитання
- •7 Абстрактні типи даних
- •7.1 Теоретичні відомості
- •7.2 Порядок виконання роботи
- •7.3 Приклад
- •7.5 Завдання на лабораторну роботу
- •7.6 Контрольні запитання
- •8 Пошук та сортування
- •8.1 Теоретичні відомості
- •8.2 Порядок виконання роботи
- •8.3 Приклад
- •8.5 Завдання на лабораторну роботу
- •8.6 Контрольні запитання
- •9 Основи ооп
- •9.1 Теоретичні відомості
- •9.2 Порядок виконання роботи
- •9.3 Приклад
- •9.5 Завдання на лабораторну роботу
- •9.6 Контрольні запитання
- •10 Створення похідних класів
- •10.1 Теоретичні відомості
- •10.2 Порядок виконання роботи
- •10.3 Приклад
- •10.5 Завдання на лабораторну роботу
- •10.6 Контрольні запитання
- •11 Основи Об’єктно орієнтованого проектування
- •11.1 Теоретичні відомості
- •11.2 Порядок виконання роботи
- •11.4 Завдання на лабораторну роботу
- •11.5 Контрольні запитання
- •12 СТворення графічного інтерфейсу користувача
- •12.1 Порядок виконання роботи
- •12.3 Завдання на лабораторну роботу
- •12.4 Контрольні запитання
- •Література
- •69039 М. Запоріжжя, знту, друкарня, вул Жуковського, 64
6.3 Приклад
Завдання. Створити функцію обчислення факторіала.
//бібліотека функцій стандартного вводу/виводу #include <stdio.h> //бібліотека функцій консольного вводу/виводу #include <conio.h>
//прототип функції обчислення факторіала int factorial(int a);
int main(void) { int a; printf("Enter a: "); scanf("%i",&a); //введення початкових даних //виклик функції обчислення факторіала int r=factorial(a); //виведення результату printf("factorial of a is %i",r); getch(); return 0; }
//реалізація функції обчислення факторіала int factorial(int a){ int r=1; // i змінюється від 2 до a for(int i=2;i<=a;i++) r=r*i; //перемноження всіх i return r; }
|
Листінг 6.1 – Приклад виконання індивідуального завдання
6.4 Зміст звіту
Звіт з лабораторної роботи повинен містити:
мету роботи;
завдання на виконання роботи;
схему алгоритму роботи програми;
текст програми;
результати роботи програми для різних початкових даних;
висновки.
6.5 Завдання на лабораторну роботу
Переробіть завдання на лабораторну роботу №5, використавши функції для реалізації основної частини програми.
6.6 Контрольні запитання
При підготовці до захисту лабораторної роботи використовуйте контрольні запитання.
6.6.1 Що таке функція на мові Сі(С++)? Для чого вона застосовується?
6.6.2 Опишіть механізм передачі параметрів у функцію.
6.6.3 Як використовується оператор return у функції?
6.6.4 Що ми маємо на увазі, коли говоримо про тип функції?
6.6.5 Чим відрізняються прототип, визначення і виклик функції?
6.6.6 Запишіть приклад прототипу функції, що повертає покажчик на змінну типу unsigned long.
6.6.7 Як передати в функцію масив та визначити останній елемент масиву? Привести приклад.
6.6.8 Чи є різниця між наступними двома заголовками функцій?
void func(int a[]) void func(int *a)
6.6.9 В чому різниця між функціями, прототипи яких мають вигляд:
int *fp(int,float) int fp(int *,float)
6.6.10 Як повернути з функції покажчик на елемент масиву?
6.6.11 Що таке перевантаження функцій? Для чого воно застосовується?
6.6.12 Навести приклади прототипів перевантажених функцій із сигнатурами, що розрізняються за кількістю аргументів і за типом аргументів.
7 Абстрактні типи даних
Мета роботи: ознайомитись з технікою створення, зберігання і обробки динамічних списків на мові програмування C++.
7.1 Теоретичні відомості
Список це послідовність елементів, визначеного типу:
List: x1, a2,…an, n>=0.
Тип списку визначає множина операторів, заданих у списку. Найпростішим є однозв’язаний список, над яким задані наступні операції:
insert (x, p, l) – вставляє елемент x на позицію p у списку l.
locate (x, l) – повертає позицію x у списку l.
retrieve (p, l) – повертає елемент, що стоїть на позиції p у списку l.
delete (p, l) – видаляє елемент, що стоїть на позиції p у списку l.
next (p, l) – повертає наступний елемент відносно позиції p.
previous (p, l) – повертає попередній.
make null – (l) – обнуляє список.
first (l) – повертає перший елемент списку.
last (l) – останній елемент списку.
Найпростіший спосіб реалізації – за допомогою масивів. Кожний елемент списку зберігається у відповідному масиву. Але така форма є незручною, оскільки операції insert і delete вимагають велику кількість перестановок елементів. Крім того, максимальна довжина списку обмежена розміром масиву. Інший спосіб – за допомогою покажчиків. Для зв’язування елементів між собою застосовуються покажчики. Список складається з комірок, які зберігають елемент списку та покажчик на наступну комірку:
Struct node
{
int data;
node * next;
}
Інші варіанти списків:
– двоїв`язаний список: елемент посилається на попередній і на наступний елемент.
struct node
{int data;
node * next;
node * prev};
– кільцеві списки: поле next останнього елементу посилається на перший елемент. У кільцевому двозв`язному поле prev першого елементу посилається на останній.
– спеціальні види списків: стеки, черги, дерева, графи.
Стек – спеціальний вид списків, доступ до елементів якого відбувається за принципом LIFO (Last In First Out). Додавання та видалення елементів зі стеку можливе лише з одного боку списку, який називається вершиною стеку.
Операції над стеком:
Make Null (S) – очищення стеку;
Top (S) – повертає елемент з вершини стеку;
Pop (S) – видаляє елемент з вершини стеку. Вершиною стеку стане попередній елемент;
Push (x, S) – вставляє елемент в вершину стеку. Новий елемент стає вершиною стеку, а стара вершина – стає наступним елементом;
IsEmpty (S) – повертає істину, якщо стек пустий.
Черги – спеціальний вид списку, елементи якого вставляються з одного боку (голова), а видаляються з іншого (хвіст).
Операції над чергами:
Make Null (Q) – очищення черги;
Front (Q) – повертає перший елемент черги;
Enquence (x, Q) – вставляє елемент x в кінець черги Q, який стає її кінцем;
Dequene (Q) – видаляє перший елемент черги;
Is Empty (Q) – перевіряє, чи є черга пустою.
Абстрактний тип даних дерево зберігає інформацію щодо ієрархії об’єктів. Кожний елемент дерева має одного батька та декілька нащадків. Два елементи не можуть бути батьками і нащадками одночасно один до одного. Елемент, який має нащадків називають гілкою або вузлом. Якщо не має нащадків – лист. У дереві є один елемент, що не має батьків – корінь.
Дерево застосовується в задачах пошуку та сортування інформації при виконанні математичних виразів, та у багатьох інших випадках, как треба задати ієрархію між об’єктами.
Операції:
Parent (n, T) – повертає батька для вузла n;
Left Most Child (h, T) – повертає самого лівого нащадка для вузла h;
Right Sibling (n, T) – повертає брата вузла n, що стоїть правіше;
Label (n, T) – повертає мітку вузла n, якщо задана. Мітки застосовуються при обході дерева;
Create (…) – група операцій для створення потомків вузлів;
Root (T) – повертає корінь дерева T;
Make NULL (T) – очищення дерева.
Дерева розрізняються в залежності від максимальної кількості нащадків: бінарне – максимальна кількість нащадків 2, тринарне - 3 і т.д. Регулярне – всі вузли мають максимальну кількість нащадків.
Довжина дерева це максимальна кількість елементів у ланцюжку „Корінь – лист”
Будь-який вузол та всі його нащадки є піддеревом до усього дерева.
Граф це абстрактний тип даних, який описує множину елементів та зв’язків між ними. Складається з вершин (об’єктів) та дуг (зв’язків).
Графи можуть бути направлені (зв’язок діє в обидві строки). Дуги можуть мати значення. Приклад: міста на мапі – вершини графи, відстані душ.
Зазвичай зберігається в вигляді масивів – матриць інциндентності. Елемент матриці [i] [j] зберігає значення дуги між i-ою та j-ою вершиною графа.