- •Вимоги до оформлення звітів
- •Лабораторна робота 1. Використання зв‘язаних динамічних структур даних для подання послідовностей об‘єктів
- •Теоретичні відомості Динамічні структури даних
- •Неповні оголошення структур
- •Порядок виконання роботи
- •Звіт повинен містити
- •Контрольні питання для підготовки та самостійної роботи
- •Лабораторна робота 2. Робота з структурами даних типу «дерево»
- •Теоретичні відомості
- •Порядок виконання роботи
- •Індивідуальні завдання
- •Контрольні питання для підготовки та самостійної роботи
- •Лабораторна робота 3. Правила та послідовність опису систем на етапі аналізу
- •Теоретичні відомості
- •Аспекти опису систем
- •Порядок виконання роботи
- •Контрольні питання для підготовки та самостійної роботи
- •Приклад виконання завдання
- •Лабораторна робота 4. Аналіз об‘єкта проектування як системи, побудова і-дерева. Розробка графа зв‘язків елементів
- •Теоретичні відомості
- •Рівні, аспекти проектування. Блочно-ієрархічний підхід до проектування
- •Ієрархічні рівні описів проектованих об'єктів
- •Порядок виконання роботи
- •Контрольні питання для підготовки та самостійної роботи
- •Лабораторна робота 5. Формалізація інформації про структуру сукупності об‘єктів близького призначення з використанням і-або-дерев
- •Теоретичні відомості
- •Порядок виконання роботи
- •Контрольні питання для підготовки та самостійної роботи
- •Лабораторна робота 6. Порівняльний аналіз об‘єктів проектування з використанням критеріїв якості на базі методу експертних оцінок із застосуванням Exсel
- •Теоретичні відомості
- •Послідовність опису критеріїв розвитку
- •Порядок виконання роботи
- •Контрольні питання для підготовки та самостійної роботи
- •Лабораторна робота 7. Асоціативні методи рішення творчих (винахідницьких) задач
- •Теоретичні відомості Подолання психологічної інерції
- •Асоціативні методи рішення творчих задач
- •Порядок виконання роботи
- •Контрольні питання для підготовки та самостійної роботи
- •Лабораторна робота 8. Розробка програмного забезпечення для моделювання поведінки об‘єктів предметної області
- •Зміст і порядок виконання роботи
- •Контрольні питання для підготовки та самостійної роботи
- •Лабораторна робота 9. Застосування метричного апарата для оцінки якості розробки об’єктно-орієнтованої структури додатків
- •Теоретичні відомості
- •Метрики зв’язності за даними
- •Метрики зв’язності по методах
- •Метрики зв’язності по методах
- •Порядок виконання роботи
- •Контрольні питання для підготовки та самостійної роботи
- •Література
- •165/2007. Підп. До друку Формат 60х84/16.
- •84313, М. Краматорськ, вул. Шкадінова, 72
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ
ДОНБАСЬКА ДЕРЖАВНА МАШИНОБУДІВНА АКАДЕМІЯ
СИСТЕМНИЙ АНАЛІЗ
МЕТОДИЧНІ ВКАЗІВКИ ДО ЛАБОРАТОРНИХ, КОНТРОЛЬНИХ ТА САМОСТІЙНИХ РОБІТ
(для студентів спеціальності 122 "Комп'ютерні науки та інформаційні технології" денної та заочної форм навчання )
Переутверждено
на заседании кафедры КИТ
Протокол №3 от 05.10.2015
Краматорськ 2016
УДК 62-82:658.512.011.56
Системний аналіз : методичні вказівки до лабораторних, контрольних та самостійних робіт (для студентів спеціальності 122 "Комп'ютерні науки та інформаційні технології"денної та заочної форм навчання) / Укл. О.Ф. Тарасов, С.О. Короткий, Ю.А. Шабаліна. – Краматорськ: ДДМА, 2016. – 52 с.
Методичні вказівки містять рекомендації з виконання та вимоги до оформлення лабораторних та контрольних робіт, а також питання для самостійної роботи студентів спеціальності 122 "Комп'ютерні науки та інформаційні технології" з дисципліни «Системний аналіз».
Укладачі: О.Ф. Тарасов, проф.,
С.О. Короткий, ст. викл.,
Ю.А. Шабаліна, ас.
Відповідальний за випуск О.Ф. Тарасов, проф.
ЗМІСТ
Лабораторна робота 1. Використання зв‘язаних динамічних структур даних для подання послідовностей об‘єктів 5
Лабораторна робота 2. Робота з структурами даних типу «дерево» 16
Лабораторна робота 3. Правила та послідовність опису систем на етапі аналізу 18
Лабораторна робота 4. Аналіз об‘єкта проектування як системи, побудова І-дерева. Розробка графа зв‘язків елементів 23
Лабораторна робота 5. Формалізація інформації про структуру сукупності об‘єктів близького призначення з використанням І-АБО-дерев 29
Лабораторна робота 6. Порівняльний аналіз об‘єктів проектування з використанням критеріїв якості на базі методу експертних оцінок із застосуванням Exсel 31
Лабораторна робота 7. Асоціативні методи рішення творчих (винахідницьких) задач 35
Лабораторна робота 8. Розробка програмного забезпечення для моделювання поведінки об‘єктів предметної області 40
Лабораторна робота 9. Застосування метричного апарата для оцінки якості розробки об’єктно-орієнтованої структури додатків 42
ЛІТЕРАТУРА 52
Вимоги до оформлення звітів
Звіти з виконаних лабораторних робіт оформляються відповідно до методичних вказівок «Структура та правила оформлення текстових документів» на основі ДСТУ 3008.95 «Документація, звіти в сфері науки та техніки. Структура та правила оформлення». Звіти оформляються на окремих аркушах формату А4. Наприкінці триместру після захисту всіх робіт звіти зшиваються з титульним аркушем та здаються на кафедру.
Лабораторна робота 1. Використання зв‘язаних динамічних структур даних для подання послідовностей об‘єктів
Мета роботи: вивчити та навчитися використовувати зв‘язані структури даних для створення стеків, списків різного виду та інших динамічних структур даних.
Теоретичні відомості Динамічні структури даних
Динамічні структури даних розширюються та стискаються залежно від того, що в них зберігається. Звичайно динамічні структури даних використовують покажчики для посилань на елементи, які є подібними. Трьома найпоширенішими динамічними структурами даних є списки, стеки та дерева. При розгляді реалізації програм із використанням динамічних структур даних будемо використовувати мову С.
Для створення однозв‘язних списків використовуємо структури, що включають покажчик, який вказує на наступний у списку елемент свого власного типу даних. Таку структуру можна оголосити в такий спосіб:
struct item { // item – тип структури
int data; //будь-які дані
struct item *next; } // покажчик на іншу структуру типу item
Структура типу item має два члени: ціле дане, яке містить інформацію, що зберігається в структурі, та покажчик next на тип struct item. У будь-яких оголошеннях структур мова С дозволяє оголосити покажчик на власний тип структури. Таким чином, створюється тип даних, що може зв‘язуватися із представниками структур того ж типу.
Два або більша кількість змінних типу item можуть формувати список, просто зв‘язуючись один з одним за допомогою покажчика на наступний елемент (рисунок 1). Покажчик next містить адрес наступної в списку структури того ж типу.
Рисунок 1 – Використання покажчиків на наступний елемент списку
Щоб створити список, спочатку оголошується структура, подібна item, у якій можуть запам‘ятовуватися члени будь-якого типу даних, що характеризують об‘єкт. Для спрощення запису при програмуванні звичайно використовують визначення типів typedef:
typedef struct item { // item – тип структури
int data;
struct item *next;
} Item; // Item – також тип структури
typedef Item *Iptr; // Iptr – тип покажчика на структуру
typedef Iptr *Iref; // Iref – тип покажчика на покажчик на структуру.
Iptr символізує struct Item *, бо має тип покажчика на тип Item. Iref – це тип покажчика на покажчик на тип Item. Застосування typedef необов‘язково, але оголошені типи роблять текст програми зрозумілішим.
Далі оголошується покажчик head на тип Item, що буде служити заголовком списку (тобто адресувати елемент при вершині списку):
Iptr head = NULL; // NULL служить для ініціалізації покажчика.
Якщо покажчик head дорівнює нулю, список є порожнім. Щоб почати список, перевіряється його елемент head, і якщо він виявиться нульовим – динамічно виділяється пам‘ять для нового елемента типу Item:
if (head = = NULL) { // Немає елемента списку
head=(Iptr)malloc(sizeof(Item)); // Виділення пам‘яті під головний елемент
head->data = 1; // Ініціалізація даного головної структури
head->next = NULL;} // Ініціалізація покажчика головної структури
Член data нового елемента списку (структури типу Item) установлюється рівним 1, його член next прирівнюється макровизначенню NULL. Тепер у списку є один (головний) елемент, на який вказує покажчик head.
Вставка нової структури в список, що адресується покажчиком head, виконується наступними операторами:
Iptr p; // покажчик p на тип Item
p = (Iptr)malloc(sizeof(Item)); // Виділення пам‘яті під елемент типу Item
p -> data = 2; // Ініціалізація даних нової структури
p -> next = head -> next; // head->next у цей момент NULL
head -> next = p; } // Покажчик адресує новий елемент списку
Після того, як виділиться пам‘ять для нового елемента, на який вказує покажчик p, відбувається присвоєння члену структури data значення 2. Члену p->next привласнюється значення члена next головного елемента списку, який адресується покажчиком heаd (у цей момент це нуль). А член head->next головного елемента, у свою чергу, адресує нову структуру (через покажчик р).
Шляхом послідовного розіменування покажчика на заголовок можна одержати доступ до будь-якого елемента списку. Вираз head->data забезпечує доступ до члена data у першому елементі списку. Щоб одержати доступ до інших членів, потрібно використовувати оператори, подібні наступним (кожний з них привласнює змінній i типу int значення члена data різних елементів списку):
int i = head->data; // i = значення у головному елементі списку
i = head->next->data; // i= значення у другому елементі списку
i = head->next->next->data; // перехід до даних третього елемента списку.
Такі вирази занадто громіздкі та у такому виді використовуються рідко. Як правило, для доступу до елементів списку використовують цикл. Наприклад, наступний фрагмент відображає значення даних списку, що адресується покажчиком head:
Iptr p; // Покажчик на структуру типу Item
p = head; // p адресує головний елемент списку
while (p != NULL){ // Поки список не порожній
printf("%d\n", p->data); // Вивід даних з елементів списку
p = p->next; } // Перехід до наступного елемента
Оператор while (p != NULL){...} можна замінити на while(p) {...}.
Наступна необхідна операція над списками – видалення елементів. Оператори видаляють елемент, що адресується покажчиком head:
Iptr p;
p = head; // Покажчик р адресує головний елемент
head = head->next; // Покажчик head адресує другий елемент
free(p); // Звільнення пам’яті, зайнятої першим елементом
