Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по ТА (КР).doc
Скачиваний:
4
Добавлен:
10.02.2016
Размер:
289.28 Кб
Скачать

1.3. Рекомендації до виконання курсової роботи

Рекомендації до розд. 1. У підрозд. 1.1 розглядаються 2 пункти: "Постановка задачі" і "Математичний опис задачі і методів її розв’язання". Підрозд. 1.2 містить 3 пункти: "Словесний опис алгоритму", "Структури даних" і "Технічний опис схеми алгоритму". Зміст п. 1.2.1 ясно з назви. У п. 1.2.2 описується вибір структур даних, тобто представлення в пам'яті ЕОМ вхідних, проміжних і кінцевих даних, і його обґрунтування (яким типом: цілим, реальним, логічним і т.д. будуть представлені дані; також необхідно відзначити доцільність використання масивів, записів, списків і т.д.). Відзначимо, що вибір придатних структур даних здійснюється паралельно зі складанням схеми алгоритму (СА). У п. 1.2.3 наводяться основна СА і СА процедур і функцій, а також їхнього опису з вказівкою переданих параметрів та їхніх значень. СА складають досить докладними для того, щоб по них можна було зрозуміти роботу алгоритму; тим же часом СА не повинна дублювати програму. У підрозд. 1.3 необхідно покроково описати роботу алгоритму, використовуючи контрольний(і) приклад(и) (задаються таблиці з [4] для алгоритмів покриття і на графах, а також кількість чисел для алгоритмів сортування). У підрозд. 1.4 необхідно провести аналіз ефективності заданого алгоритму і продумати можливість підвищити її за рахунок поділу задачі на підзадачі і балансування даних, використання рекурсії або ітерацій, а також методу динамічного програмування.

Примітка. Для алгоритмів сортування необхідно підрахувати кількість пересилань елементів масиву і їхніх порівнянь для трьох прикладів масивів, що складаються із заданого числа елементів n:

а) відсортований;

б) відсортований у зворотному порядку;

в) відсортований випадковим чином.

2. Приклад виконання курсової роботи

2.1. Розробка ефективних алгоритмів

Приклад 2.1

Постановка задачі. Необхідно ввести таблицю покриття, а також номера рядків таблиці. Алгоритм повинен визначити, чи є ці рядки покриттям.

Математичний опис задачі і методів її розв’язання

Тут необхідно дати визначення, що називається покриттям, описати математичну постановку задачі про покриття, тобто як дана задача формулюється з погляду математики, і навести назви методів для її розв’язання з їхньою короткою характеристикою.

Словесний опис алгоритму

1. Уведення числа рядків (m) і числа стовпців (n) таблиці покриття.

2. Уведення таблиці покриття.

3. Уведення номерів рядків, що перевіряються, таблиці покриття.

4. Розрахунок суми елементів (S) по стовпцях таблиці (у суми включаються тільки ті рядки, які перевіряються), починаючи з першого до останнього (n-го), або поки не зустрінеться сума, що дорівнює 0.

5. Якщо всі розраховані суми ненульові, отже, рядки, що перевіряються, є покриттям. У протилежному випадку — ні.

Зрозуміло, це не єдиний спосіб для розв’язання задачі. Тому має сенс порівняти декілька запропонованих вами способів.

Вибір структур даних і його обґрунтування

З аналізу задачі і її даних видно, що алгоритм повинен працювати з таблицею покриття і з деякими змінними, котрі представлені нижче (усі змінні цілого типу):

т – кількість рядків таблиці покриття;

n – кількість стовпців таблиці покриття;

kol – кількість рядків, які перевіряються на покриття;

n_str – проміжна змінна для збереження номера рядка;

i – змінна циклу.

Таблиця покриття — це двовимірна матриця. Її доцільно представити у вигляді двовимірного масиву A(m, n). D — одновимірний масив для зберігання номерів рядків, що перевіряються, матриці покриття. Для зберігання номерів обраний масив, оскільки кількість рядків, хоча і невідома заздалегідь, обмежена кількістю рядків матриці покриття (т).

Схема алгоритму

Схема алгоритму будується відповідно до технології проектування “зверху вниз” [5], за якою спочатку зображується схема алгоритму в загальному вигляді, а потім вона усе більш деталізується аж до простих операторних вершин. В остаточному варіанті, який буде представлений на графічному аркуші, доцільно навести основну схему, яка може містити декілька процедур (функцій), а також навести самі процедури (функції). Для даного прикладу схема алгоритму представлена на рис. 2.1.

Опис схеми алгоритму. Цей розділ потрібний, якщо в схемі алгоритму немає коментарів або вони занадто короткі.

Алгоритм працює таким чином. Спочатку уводяться вхідні дані (блоки 1, 2; у коментарях визначено призначення даних), потім організується цикл запису номерів рядків, які перевіряються на покриття, у масив D (блоки 3-6). У блоці 7 викликається функція POKR(D, kol, A, n), обчислюється її значення, яке потім присвоюється умові usl; відповідно до значень умови (перевірка здійснюється в блоці 8) видаються повідомлення “так” або “ні” (блоки 9 і 10).

Підпрограми і функції

У даному випадку використовується процедура INS (NEL, LIST, POS) і функція POKR(D, kol, A, n). Процедура INS (NEL, LIST, POS) призначена для вставки нового елемента NEL у список LIST у позицію POS; для реалізації цієї процедури може бути використаний однозв'язний список. Функція POKR – більш складна, і тому вона описана докладніше.

Словесний опис алгоритму, використовуваного у функції.

Функція POKR(D, kol, А, n) визначає, чи є рядки матриці А, номера яких задані в списку D, покриттям. Тут kol – кількість елементів у масиві D; n – кількість стовпців матриці А. Функція повертає 1, якщо задані рядки матриці А утворюють покриття, 0 – у протилежному випадку. Для функції POKR(D, kol, A, n) використовується алгоритм, наведений у п. 4 словесного опису алгоритму для розв’язання всієї задачі.

Опис локальних змінних (усі – цілі):

S – змінна для підрахунку суми (ціла);

i, j – змінні для організації циклів;

k – змінна для вибору номера рядка зі списку D.

Схема алгоритму для функції POKR представлена на рис. 2.2.

Опис схеми алгоритму функції. Функція POKR(D, kol, А, n) визначає, чи є рядки матриці А, номери яких задані в списку D, покриттям.

Алгоритм працює таким чином. При виклику в основному алгоритмі функції POKR(D, kol, А, n) у неї передаються параметри D, kol, А, n; потім організується зовнішній цикл (блоки 2-8) проходу по всіх стовпцях матриці А і внутрішній цикл (блоки 3-6) розрахунку суми S по i-му стовпцю для заданих рядків, які перевіряються на покриття. Як ознака відсутності покриття використовується значення суми S = 0, оскільки якщо в деякому стовпці на всіх позиціях, які відповідають розглянутим рядкам, будуть нулі, то цього досить, щоб констатувати відсутність покриття (у цьому випадку можна не перевіряти інші стовпці). Обчислення S відбувається в блоці 5 для обраного з масиву D (блок 4) рядка з номером k. У блоці 7 перевіряється умова S = 0, і залежно від її значення приймається рішення про те, яке значення функції повертається в основний алгоритм (блоки 9 і 10), де воно присвоюється змінній usl. Відзначимо, що, коли цикл проходу по стовпцях цілком завершився, то жодна сума по стовпцях не дорівнює 0. Це означає, що задані рядки є розв’язанням задачі про покриття.

Контрольні приклади розв’язання задачі за допомогою алгоритму.

Нехай задача про покриття задана матрицею (табл. 2.1). Потрібно визначити:

а) чи є рядки А1, A3 розв’язанням задачі про покриття;

б) чи є рядки А1, A3, А4 розв’язанням задачі про покриття. Покрокове розв’язання:

a) i = 1, S =1;

i=2, S=0; вихід з функції POKR, повертається 0, видається повідомлення “ні”;

А

1

2

3

4

5

А1

1

1

1

А2

1

1

1

A3

1

1

А4

1

1

б) і=1, S=2;

i=2, S=1;

i=3, S=1;

i=4, S=1;

i=5, S=2;

Таблиця 2.1

вихід з функції POKR, повертається 1, видається повідомлення “так”.

Ступінь деталізації як прохідних алгоритмом віток, так і значень змінних повинна бути достатньою для розуміння і перевірки правильності алгоритму. Так, у нашому випадку було опущено спостереження за змінною внутрішнього циклу по j і сам цикл, тому що це досить очевидно.