- •Вимоги до оформлення звітів
- •Лабораторна робота 1. Використання зв‘язаних динамічних структур даних для подання послідовностей об‘єктів
- •Теоретичні відомості Динамічні структури даних
- •Неповні оголошення структур
- •Порядок виконання роботи
- •Звіт повинен містити
- •Контрольні питання для підготовки та самостійної роботи
- •Лабораторна робота 2. Робота з структурами даних типу «дерево»
- •Теоретичні відомості
- •Порядок виконання роботи
- •Індивідуальні завдання
- •Контрольні питання для підготовки та самостійної роботи
- •Лабораторна робота 3. Правила та послідовність опису систем на етапі аналізу
- •Теоретичні відомості
- •Аспекти опису систем
- •Порядок виконання роботи
- •Контрольні питання для підготовки та самостійної роботи
- •Приклад виконання завдання
- •Лабораторна робота 4. Аналіз об‘єкта проектування як системи, побудова і-дерева. Розробка графа зв‘язків елементів
- •Теоретичні відомості
- •Рівні, аспекти проектування. Блочно-ієрархічний підхід до проектування
- •Ієрархічні рівні описів проектованих об'єктів
- •Порядок виконання роботи
- •Контрольні питання для підготовки та самостійної роботи
- •Лабораторна робота 5. Формалізація інформації про структуру сукупності об‘єктів близького призначення з використанням і-або-дерев
- •Теоретичні відомості
- •Порядок виконання роботи
- •Контрольні питання для підготовки та самостійної роботи
- •Лабораторна робота 6. Порівняльний аналіз об‘єктів проектування з використанням критеріїв якості на базі методу експертних оцінок із застосуванням Exсel
- •Теоретичні відомості
- •Послідовність опису критеріїв розвитку
- •Порядок виконання роботи
- •Контрольні питання для підготовки та самостійної роботи
- •Лабораторна робота 7. Асоціативні методи рішення творчих (винахідницьких) задач
- •Теоретичні відомості Подолання психологічної інерції
- •Асоціативні методи рішення творчих задач
- •Порядок виконання роботи
- •Контрольні питання для підготовки та самостійної роботи
- •Лабораторна робота 8. Розробка програмного забезпечення для моделювання поведінки об‘єктів предметної області
- •Зміст і порядок виконання роботи
- •Контрольні питання для підготовки та самостійної роботи
- •Лабораторна робота 9. Застосування метричного апарата для оцінки якості розробки об’єктно-орієнтованої структури додатків
- •Теоретичні відомості
- •Метрики зв’язності за даними
- •Метрики зв’язності по методах
- •Метрики зв’язності по методах
- •Порядок виконання роботи
- •Контрольні питання для підготовки та самостійної роботи
- •Література
- •165/2007. Підп. До друку Формат 60х84/16.
- •84313, М. Краматорськ, вул. Шкадінова, 72
Порядок виконання роботи
Вивчити теоретичні відомості.
За індивідуальним завданням (таблиця 1) розробити програму.
Одержати результати роботи.
Оформити звіт.
Підготуватися до захисту лабораторної роботи.
Звіт повинен містити
Прізвище, ім'я, по батькові та групу студента.
Номер і назву роботи.
Ціль роботи.
Індивідуальне завдання.
Текст програми.
Результати роботи програми.
Виводи.
Таблиця 1 – Індивідуальні завдання
№ |
Вид динамічної структури |
Реалізовані функції |
|
|
Список однозв‘язний лінійний |
Створення, видалення, додавання |
|
|
Список однозв‘язний лінійний |
Створення, видалення, вставка |
|
|
Список однозв‘язний лінійний |
Створення, видалення, пошук за індексом |
|
|
Список однозв‘язний лінійний |
Створення, видалення, пошук за значенням |
|
|
Список однозв‘язний лінійний |
Створення, видалення, сортування |
|
|
Список двузв‘язний |
Створення, видалення, додавання |
|
|
Список двузв‘язний |
Створення, видалення, вставка |
|
|
Список двузв‘язний |
Створення, видалення, пошук за індексом |
|
|
Список двузв‘язний |
Створення, видалення, пошук за значенням |
|
|
Список двузв‘язний |
Створення, видалення, сортування |
|
|
Список однозв‘язний кільцевий |
Створення, видалення, додавання |
|
|
Список однозв‘язний кільцевий |
Створення, видалення, вставка |
|
|
Список однозв‘язний кільцевий |
Створення, видалення, пошук за індексом |
|
|
Список однозв‘язний кільцевий |
Створення, видалення, пошук за значенням |
|
|
Список однозв‘язний кільцевий |
Створення, видалення, сортування |
|
|
Список двузв‘язний кільцевий |
Створення, видалення, додавання |
|
|
Список двузв‘язний кільцевий |
Створення, видалення, вставка |
|
|
Список двузв‘язний кільцевий |
Створення, видалення, пошук за індексом |
|
|
Список двузв‘язний кільцевий |
Створення, видалення, пошук за значенням |
|
|
Список двузв‘язний кільцевий |
Створення, видалення, сортування |
Контрольні питання для підготовки та самостійної роботи
Які структури даних можна назвати динамічними?
Які елементи повинні перебувати в структурі для побудови динамічної структури даних?
Яким чином структури зв‘язуються між собою?
Які типові динамічної структури даних існують?
Які принципи роботи з даними реалізують типові динамічні структури даних?
Які функції можуть використовуватися для роботи з типовими динамічними структурами даних?
Як динамічно виділяється пам‘ять для нових структур?
Як звільняється пам’ять при знищенні структури (елемента динамічної структури даних)?
У чому відмінність між списками та стеками?
Для чого використовують неповні оголошення структур?
Приклад реалізації програми для роботи з динамічною структурою даних:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <alloc.h>
class TItem { // Базовий клас елементів списку
public:
int data; // Дані, що зберігаються у вузлі
int ind; // Індекс елемента
TItem *next; // Покажчик на наступний елемент
TItem(); // Конструктор
~TItem();// Деструктор};
class TList { // Клас список
TItem *ent; // Покажчик на точку входу в список
public:
int count; // Кількість елементів списку
TItem *cur; // Покажчик на поточний елемент списку
virtual void append(void); // Додати елемент у кінець списку
virtual void add(void); // Додати елемент після поточного елемента
virtual void del(void); // Видалити поточний елемент
virtual void clear(void); // Видалити зі списку всі елементи
virtual void last(void); // Встановити поточним останній елемент списку
virtual void first(void); // Встановити поточним перший елемент списку
virtual void next(void); // Встановити поточним наступний елемент списку
virtual void prior(void); // Встановити поточним попередній елемент списку
virtual void seek(int i); // Перемістити покажчик на заданий елемент списку
virtual void PersonalJob() /* Метод, що реалізує дії зі списком у відповідності з завданням*/
TList(); //Конструктор
~TList(); //Деструктор};
int main(void){
TList l;
for (int i=0;i<=5;i++){ l.add(); *l[i] = 10 - i; } //Ініціалізація списку
l.sort(); l.first(); //Виконання необхідних дій
for (i=0;i<=l.count-1;i++) {printf("%d%d\n",i,l[i]->data);l.next(); } //Вивід
return(0); }
//Реалізація класу TItem
TItem::TItem(void) { data = 0; next=NULL }
TItem::~TItem(void){}
//Реалізація класу TList
TList::TList() { count = 0; ent = NULL; cur = NULL; }
TList::~TList() { clear(); }
void TList::append(void){ last(); add(); }
void TList::add(void)
{ if (ent == NULL) { // Якщо в списку немає елементів
ent = new TItem; ent->next = ent; cur = ent;
} else { TItem *it;
it = new TItem; it->next = cur->next; cur->next = it; cur = it; }
cur->ind = count; count++; }
void TList::del(void) {
if (count > 0) {
if (cur->next == ent && cur == ent) { // Якщо в списку всього 1 елемент
delete cur;
} else {
if (cur->next == ent) { TItem *tmp;
tmp = cur->next; memcpy(cur, tmp, sizeof(TItem));
delete tmp; ent = cur;
} else { TItem *tmp; tmp = cur->next;
memcpy(cur, tmp, sizeof(TItem)); delete tmp; }
} count-і; } }
void TList::clear(void){ while (count > 0) { del(); } }
void TList::first(void) { if (count > 0) { cur = ent; } }
void TList::last(void) {
if (count > 0) { // Якщо в списку є елементи
while (cur->next != ent) {// Останній елемент указує на точку входу
next(); } } }
void TList::next(void) { if (count > 0) { cur = cur->next; } }
void TList::prior(void) {
if (count > 0) { TItem *tmp = cur; while (cur->next != tmp) next(); } }
void TList::seek(int i) { if (i > 0) { for (int k=1;k<=i;k++) next(); }
else { if (i < 0) { for (int k=1;k<=((-1)*i);k++) prior(); } } }
void TList::PersonalJob() {/*Реалізація методу за індивідуальним завданням*/}
