Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4_Метод_вказівки_лаб_роб_Алгор_та_структ..doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
149.5 Кб
Скачать

МІНІСТЕРСТВО ОСВІТИ І НАУКИ МОЛОДІ ТА СПОРТУ УКРАЇНИ КИЇВСЬКА ДЕРЖАВНА АКАДЕМІЯ ВОДНОГО ТРАНСПОРТУ

ім. Гетьмана Петра Конашевича-Сагайдачного

Методичні вказівки

до виконання лабораторних робіт

з дисципліни: “Алгоритми та структури даних

галузь знань: 0501 "Інформатика та обчислювальна техніка"

напрям підготовки: 6.050103 „Програмна інженерія”

факультет: Економіки транспорту

кафедра: Інформаційних технологій

Київ 2012

Вступ

«Методичні вказівки до виконання лабораторних і лабораторних робіт» призначені для студентів очної та заочної форми навчання, які вивчають дисціпліну «Алгоритми та структури даних» і готують лабораторні роботи з цієї дисціпліни. Наприкінці кожної лабораторної роботи дається орієнтовний перелік питань для самопідготовки

Порядок виконання лабораторної роботи:

  1. Вибрати і узгодити з викладачем варіант лабораторної роботи згідно теми, що вивчається на поточний момент (зазвичай, варіант вибирається за номером у переліку студентів у журналі).

  2. Уважно прочитати і усвідомити умову завдання, що треба буде розв'язати.

  3. Ознайомитися з необхідним теоретичним матеріалом (див. Список рекомендованої литератури).

  4. Вивчити потрібний додаток для відповідної лабораторної роботи і, особливо, лістинг програми (для повного розуміння його треба набрати на комп'ютері, відредагувати виконати.

  5. Підготувати свій варіант тексту програми і спробувати вирішити його за допомогою комп'ютера. Звичайно з першого разу рішення не вдається - це нормально. Потрібно повторити редагування і виконання до одержання потрібного результату.

  6. Зробити звіт.

Звіт оформляється у вигляді пояснювальної записки (див. Додаток 1) і повинен містити наступні елементи:

  • титульний лист;

  • текст пояснювальної записки у текстовому редакторі MS Word;

  • cписок використаної літератури;

  • машинний лістинг програми на мові програмування - у вигляді додатка.

Зміст пояснювальної записки:

  1. Постановка завдання.

  2. Короткі теоретичні відомості про особливості застосовуваних операторів і методів (теоретичне введення) з посиланням (за необхіжністю) на літературні джерела.

  3. Опис алгоритму вирішення завдання (у вигляді блок-схеми);

  4. Опис програми:

  • загальні відомості (мова програмування, операційна система, інструментальне середовище);

  • опис логічної структури програми;

  • опис вхідних і вихідних даних програми;

  • опис підпрограм;

  • перелік аномалій і припустимих значень вхідних даних (тестові приклади);

  1. Результати виконання лабораторної роботи (роздруківки екранів з результатами роботи програми).

Порядок виконання лабораторної роботи ілюструється нижче на прикладі.

Лабораторна робота №1 з дисципліни «Алгоритми та структури даних»

Тема: "Створення алгоритмів для знахолження НСД цілих чисел"

Ціль:

Ознайомитися з алгоритмами для обчислення НСД;

вивчити основні правила побудови алгоритмів обчислення НСД чисел;

розглянути алгоритм Евкліда для пошуку НСД чисел.

Теоретичні відомості:

Усі задачі представлені в контрольній роботі необхідно вирішувати в середовищі програмування Turbo Pascal.

Варіант завдання для студента відповідає його порядковому номеру в групі (цей номер можна довідатися у викладача).

Задачі даної контрольної роботи спрямовані на введення в теорію алгоритмів.

Для рішення представлених задач необхідно виконати наступні вимоги:

1. Повторити роботу в інтегрованому середовищі Turbo Pascal і основні команди операційного середовища.

2. Не слід писати оператори суцільним текстом. Їх варто розташовувати структуровано.

3. Рекомендується будь-яку програму супроводжувати коментарями, що пояснюють призначення, структуру й інші особливості програми.

У контрольній роботі приводяться основні визначення і факти з елементарної теорії чисел.

Алгоритму Евкліда.

Нехай a  Z, b  N, і ми хочемо знайти d= НСД (a, b). Розділимо a на b із залишком: a=q0b+r0, 0r0 < b.

Якщо r0 >0, то розділимо b на r0: b = q1r0 +r1, 0_ r1 < r0,, і т.д. Одержимо послідовність рівностей з убутніми залишками rj:

rj−2 = qjrj−1 + rj, j = 0, 1, 2 . . ., (1)

де r−2 = a, r−1 =b. Якщо rk -останній ненульовий залишок, то rk−1=qk+1rk. Тоді справедлива рівність d =НСД(a, b) = rk. Обчислення послідовності (1) і є алгоритм Евкліда.

Бінарний алгоритм.

На вході алгоритму задані числа а, b N, a b. На виході d=НСД(a,b).

1 крок. Привласнити r залишок від розподілу a на b. Потім a:=b, b:=r.

2 крок. Якщо b=0, то видати а і закінчити роботу. Інакше k:=0, і потім, поки a і b обоє парні, виконувати:

(після цього 2k йде в НСД(a,b), що залишилася частина НСД буде непарною).

3 крок. Зараз принаймні одне з чисел a і b непарне. Якщо а парне, то робити присвоєння а:=а/2 доти , поки а не стане непарним. Те ж для b.

4 крок. Зараз a і b обоє непарні. Привласнити t:=(a-b)/2. Якщо t=0, то видати 2kа і закінчити роботу.

5 крок. ДОТИ , поки t парне, робити t:= t/2.

6 крок. Зараз t непарне, t0. Якщо t0, то а:= t. Якщо t0, то b:=-t. Йти на 4 крок.

Кінець алгоритму.

Приклади рішення задач контрольної роботи:

Дано два натуральних числа a і b, не рівні нулю одночасно. Обчислити НСД (a,b) - найбільший загальний дільник а і b.

іf a > b then begіn

| k := a;

end else begіn

| k := b;

end;

{k = max (a,b)}

{інваріант: ніяке число, більше k, не є загальним дільником}

whіle not (((a mod k)=0) and ((b mod k)=0)) do begіn

| k := k - 1;

end;

{k - загальний дільник, більші - ні}

Розглянемо рішення даної задачі за допомогою алгоритмуЕвкліда:

Будемо вважати , що НСД (0,0) = 0. Тоді НСД (a,b) = НСД (a-b,b) = НСД (a,b-a); НСД (a,0) = НСД (0,a) = a для всіх a,b>=0.

m := a; n := b;

{інваріант: НСД (a,b) = НСД (m,n); m,n >= 0 }

whіle not ((m=0) or (n=0)) do begіn

| іf m >= n then begіn

| | m := m - n;

| end else begіn

| | n := n - m;

| end;

end;

іf m = 0 then begіn

| k := n;

end else begіn

| k := m;

end;

Вимоги до оформлення звіту контрольної роботи:

Звіт повинний містити:

1. Тема і ціль лабораторної роботи.

2. Короткі теоретичні відомості.

3. Завдання і програму мовою Turbo Pascal.

4. Результати виконання програми.

Варіанти індивідуальних завдань:

(варіант вибирається по останній цифрі номера залікової книжки)

Варіант №1.

Написати алгоритм Евкліда, що використовує співвідношення НСД(a, b)=НСД(a mod b, b) при a >= b НСД (a, b)=НСД (a, b mod a) при b >= a

Варіант №2.

Написати алгоритм Евкліда, що використовує співвідношення НСД (a, b)=НСД (a, b mod a) при b >= a

Варіант №3

Дано натуральні а і b, не рівні 0 одночасно. Знайти d = НСД (a,b) і такі цілі x і y, що d = a*x + b*y.

Варіант №4

Дано натуральні а і b, не рівні 0 одночасно. Знайти d = НСД (a,b) і такі цілі x і y, що d = a*x + b*y.

Варіант №5

Дано натуральні а і b, не рівні 0 одночасно. Знайти d = НСД (a,b) і такі цілі x і y, що d = a/x + b*y.

Варіант №6.

Дано натуральні а і b, не рівні 0 одночасно. Знайти d = НСД (a,b) і такі цілі x і y, що d = a*x + b/y.

Варіант №7

Написати варіант алгоритму Евкліда, що використовують співвідношення

НСД(2*a, 2*b) = 2*НСД(a,b)

Варіант №8

Написати варіант алгоритму Евкліда, що використовують співвідношення

НСД(2*a, b) = НСД(a,b) при непарному b

Варіант №9

Написати бінарний алгоритм, що використовує співвідношення НСД(a, b)=НСД(a mod b, b) при a >= b НСД (a, b)=НСД (a, b mod a) при b >= a

Варіант №10

Дано натуральні а і b, не рівні 0 одночасно. Знайти d = НСД (a,b) і такі цілі x і y, що d = a*x + b*y, використовуючи бінарний алгоритм.