
- •Програмування
- •1. Алгоритми 12
- •2. Комп’ютери і програми 47
- •3. Мова програмування паскаль 56
- •4. Прості типи даних. Лінійні програми 61
- •5. Процедурне програмування 73
- •6. Програмування розгалужень 79
- •7. Оператори повторення з параметром. Масиви 99
- •7.13. Задачі і вправи 114
- •8. Ітераційні цикли 116
- •8.6. Задачі і вправи 124
- •9. Рекурсія 126
- •9.4. Задачі і вправи 135
- •10. Швидкі алгоритми сортування і пошуку 137
- •10.8. Задачі і вправи 148
- •11. Складні типи даних: записи і файли 150
- •11.11. Задачі і вправи 169
- •12. Множини 172
- •12.5. Задачі і вправи 175
- •13. Динамічні структури даних 176
- •14. Методологія структурного програмування: підсумки 192
- •1. Алгоритми
- •1.1. Змістовне поняття алгоритму
- •1.2. Виконавець алгоритмів і його система команд
- •1.3. Основні властивості алгоритмів
- •1.4. Величини
- •1.5. Типи величин
- •1.6. Цілі числа
- •1.7. Дійсні числа
- •1.8. Рядкові величини
- •У слові w знайти слово p і замінити його словом q.
- •1.9. Форми запису алгоритмів
- •1:Кінець.
- •X2 присвоїти значення x1
- •1:Кінець.
- •1.10. Команди управління
- •1.11. Блок - схеми
- •1.12. Допоміжні алгоритми
- •1.13. Базові структури управління
- •1.14. Абстракція даних
- •Приклад 1.7. Атд Планіметрія (виконавець Геометр)
- •1.15. Структурне програмування
- •1.16. Парадигма процедурного програмування
- •2. Комп’ютери і програми
- •2.1. Комп’ютер як універсальний Виконавець
- •2.1.1. Зовнішні пристрої комп’ютера
- •2.1.2. Центральні пристрої комп’ютера
- •2.1.3. Поняття про машинну мову
- •2.2. Мови програмування високого рівня
- •2.2.1. Коротка історія розвитку мов програмування
- •2.2.2. Про історію розвитку методів проектування програм
- •2.3. Основні етапи проектування програми
- •2.4. Технологія трансляції програм
- •2.5. Поняття про систему програмування
- •3. Мова програмування паскаль
- •3.1. Алфавіт мови
- •3.2. Концепція даних
- •3.3. Імена та їх застосування
- •3.4. Структура Pascal-програми
- •3.5. Поняття про лексику, прагматику, синтаксис і семантику мови програмування
- •3.6. Синтаксичні діаграми як засіб визначення мови програмування
- •4. Прості типи даних. Лінійні програми
- •4.1. Заголовок програми
- •4.2. Константи і їх використання. Розділ констант
- •4.3. Змінні програми. Розділ змінних
- •4.4. Стандартні прості типи даних
- •4.5. Тип даних Integer
- •4.6. Тип даних Real
- •4.7. Тип даних Сhar
- •4.8. Поняття виразу. Значення виразу. Тип виразу
- •4.9. Розділ операторів. Оператор присвоювання
- •4.10. Оператори введення - виведення
- •4.11. Приклад лінійної програми
- •4.12. Поняття складності виразу. Оптимізація обчислень
- •4.13. Оптимізація лінійних програм
- •4.14. Задачі і вправи
- •5. Процедурне програмування
- •5.1. Опис процедури
- •5.2. Формальні параметри. Локальні і глобальні об’єкти
- •5.3. Оператор процедури. Фактичні параметри
- •5.4. Функції
- •5.5. Приклади
- •6. Програмування розгалужень
- •6.1. Поняття умови. Тип даних Boolean (логічний)
- •6.2. Складений оператор
- •6.3. Оператори вибору: умовний оператор
- •6.4. Приклади
- •6.5. Задачі вибору й упорядкування
- •6.5.1. Задачі вибору
- •6.5.2. Дерево розв’язувань задачі вибору
- •6.5.3. Задачі на зважування
- •6.5.4. Ефективність алгоритму як кількість його кроків
- •6.5.5. Вибір даного елемента
- •6.6. Задачі упорядкування
- •6.6.1. Упорядкування елементів
- •6.6.2. Порівняння, перестановки і пересилання
- •6.7. Оптимізація розгалужень
- •6.8. Розділ типів. Перелічуваний тип
- •6.9. Оператори вибору: оператор варіанта
- •6.10. Вправи
- •7. Оператори повторення з параметром. Масиви
- •7.1. Оператор циклу з параметром
- •7.2. Циклічні програми. Складність циклічної програми. Оптимізація циклічних програм
- •7.3. Обмежені типи
- •7.4. Складні (складені) типи
- •7.5. Регулярний тип. Масиви
- •7.6. Пошук елемента в масиві
- •7.7. Ефективність алгоритму за часом
- •7.8. Мітки. Оператор переходу. Застосування оператора переходу для дострокового виходу з циклу
- •7.9. Постановка задачі сортування
- •7.10. Сортування масивів
- •7.10.1. Прості алгоритми сортування
- •7.11 Сортування обмінами
- •7.12. Сортування вибором
- •7.13. Задачі і вправи
- •8. Ітераційні цикли
- •8.1. Оператори повторення While і Repeat
- •8.2. Алгоритми пошуку і сортування. Лінійний пошук у масиві
- •8.3. Поліпшений алгоритм сортування обмінами
- •8.4. Бінарний пошук в упорядкованому масиві
- •8.5. Алгоритми сортування масивів (продовження). Сортування вставками
- •8.5.1 * Ефективність алгоритму
- •8.6. Задачі і вправи
- •9. Рекурсія
- •9.1. Рекурсивно-визначені процедури і функції
- •9.2. Приклади рекурсивних описів процедур і функцій
- •I стержень j стержень 6-I-j стержень
- •I стержень j стержень 6-I-j стержень
- •I стержень j стержень 6-I-j стержень
- •9.3. Переваги і недоліки рекурсивних алгоритмів
- •9.4. Задачі і вправи
- •10. Швидкі алгоритми сортування і пошуку
- •10.1. Нижня оцінка часу задачі сортування масиву за числом порівнянь
- •10.2. Швидкі алгоритми сортування: Сортування деревом
- •10.2.1. *Аналіз складності алгоритму
- •10.3. Пірамідальне сортування
- •10.3.1.*Аналіз складності алгоритму
- •10.4. Швидке сортування Хоара
- •10.5. Пошук k-того в масиві. Пошук медіани масиву
- •10.6.* Метод “розділяй і володій”
- •10.7.* Метод цифрового сортування
- •10.8. Задачі і вправи
- •11. Складні типи даних: записи і файли
- •11.1. Складні типи даних у мові Pascal
- •11.2. Записи
- •11.3. Записи з варіантами
- •11.4. Оператор приєднання
- •11.5. Рядки і засоби їх обробки
- •Процедури і функції типу String.
- •11.7. Файли. Управління файлами
- •11.8. Основні задачі обробки файлів
- •11.9. Сортування файлів
- •11.9.1. Алгоритм сортування злиттям
- •11.9.2. Аналіз складності алгоритму
- •11.10. Задача корегування файла
- •11.11. Задачі і вправи
- •12. Множини
- •12.1. Множинний тип
- •12.2. Конструктор множини
- •12.3. Операції і відношення над множинами
- •12.4. Застосування множин у програмуванні
- •12.5. Задачі і вправи
- •13. Динамічні структури даних
- •13.1. Стандартні динамічні структури
- •13.2. Посилальний тип даних. Посилання
- •13.3. Програмування динамічних структур даних
- •13.4. Стеки, списки, черги
- •13.5. Задачі
- •13.6. Дерева
- •13.7. Бінарні дерева
- •13.8. Задачі
- •14. Методологія структурного програмування: підсумки
- •14.1. Основні структури управління
- •14.2. Основні структури даних
- •14.3. Методологія програмування “зверху-вниз”
- •14.4. Приклад: Система лінійних рівнянь
- •14.5. Проектування модулів. Модуль rat
- •14.6. Реалізація модуля
- •14.7. Висновки (модульне програмування)
- •14.8. Заключне зауваження: переходимо до об’єктів
6.5.2. Дерево розв’язувань задачі вибору
Розглянемо можливі постановки задачі вибору з трьох елементів. Вибрати максимальний із трьох елементів можна так само, як мінімальний. Інша справа, якщо з трьох елементів потрібно вибрати середній за величиною.
Задача 7. Вибір середнього з трьох елементів. Дано попарно нерівні елементи a, b, c. Вибрати з них середній за величиною.
Розв’язання. Розглянемо всі можливі варіанти розташування цих елементів у порядку зростання:
1. a < b < c, 2. a < c < b, 3. b < a < c, 4. b < c < a, 5. c < a < b, 6. c < b < a
Логічний аналіз задачі зручно зобразити у виді графічної схеми (рис 6.1)
Якщо в нашому алгоритмі використовувати порівняння a < b, у випадках 1, 2, 5 виконання піде по гілці «так», у випадках 2., 3., 6. – по гілці «ні». Використовуємо тепер у нашому алгоритмі порівняння a < c як по гілці «так», так і по гілці «ні».
a < b Гілка «так»
a < c гілка “так” (1. a < b < c, 2. a < c < b), a < c гілка “ні” 5. c < a < b
a < b Гілка «ні»
a < c гілка “так” ( 3. b < a < c, ) a < c гілка “ні” ( 4. b < c < a,) 6. c < b < a)
Тепер ясно, що для того, щоб зробити остаточний вибір, необхідно в алгоритм включити і третє порівняння b < c.
Рис 6.1. Дерево рішень задачі вибору середнього з трьох елементів.
Такі схеми називають деревом рішень задачі вибору. Графічними елементами дерева рішень є вершини і дуги. Для кожної вершини дерева зазначені:
сукупність варіантів, що можливі в даній вершині;
порівняння, що застосовується до даних, коли виконання алгоритму проходить через цю вершину.
Кожній дузі відповідає одне з двох логічних значень «Так», «Ні» – результат порівняння даних у цій вершині. Напрямок, зазначений на дузі стрілкою, указує шлях виконання алгоритму вибору.
Виконання алгоритму починається у початковій вершині (корені дерева) і продовжується по тій або іншій гілці дерева в залежності від результату порівняння.
Задача вибору розв’язана, якщо всі сукупності варіантів містять рівно один варіант.
Аналіз розв’язування задачі про середній із трьох елементів дозволяє зробити висновок: Будь-який алгоритм її розв’язування в гіршому випадку повинен виконати три порівняння.
Якщо дерево рішень побудовано, відповідна програма мовою Паскаль пишеться відповідно до цього дерева, причому кожній вершині відповідає оператор розгалуження:
Текст процедури мовою Паскаль:
Procedure Middle(a, b, c : Real; Var Mid : Real);
Begin
If a < b
Then If a < c
Then If b < c
Then Mid := b {варіант 1}
Else Mid := c {варіант 2}
Else Mid := a {варіант 5}
Else If a < c
Then Mid := a {варіант 3}
Else If b < c
Then Mid := c {варіант 4}
Else Mid := b {варіант 6}
End;
6.5.3. Задачі на зважування
У задачах на зважування потрібно вибрати з декількох предметів (наприклад, монет) той, який відрізняється за вагою від інших (фальшиву монету). Для порівняння предметів використовуються чашкові терези без гирь. За допомогою цього приладу можна визначити, що два предмети рівні, або з'ясувати, який з них легше. Так само можна діяти і з двома групами предметів. Як правило, порівнювати дві групи предметів має сенс тоді, коли в них рівна кількість елементів. У задачах на зважування потрібно знайти розв’язок за найменшу кількість зважувань.
Чашкові терези, що порівнюють два предмети – елемента можна запрограмувати за допомогою наступної функції:
Function Compare(A, B : Real):Integer;
Begin
If A < B
Then Compare := -1
Else If A = B
Then Compare := 0
Else Compare := 1
End;
Задача 8. Дано три однакові на зовнішній вигляд монети. Відомо, що серед них є одна фальшива, котра ледве відрізняється за вагою від інших. Знайти за допомогою чашкових вагів фальшиву монету, якщо відомо, що вона легше, ніж справжні.
Розв’язання.
Будуємо дерево
розв’язків, вершини якого мають три
розгалуження (Рис.6.2).
Задачі для самостійного розв’язування.
Задача 9. Дано три однакові на зовнішній вигляд монети. Відомо, що серед них є одна фальшива, котра трохи відрізняється за вагою від справжніх. Знайти за допомогою чашкових терезів фальшиву монету, якщо невідомо, легше вона, ніж справжні, або важче.
Задача 10. Дано чотири однакові на зовнішній вигляд монети. Відомо, що серед них є одна фальшива, яка трохи відрізняється за вагою від справжніх. Знайти за допомогою чашкових терезів фальшиву монету, якщо
відомо, що вона легше, ніж справжні.
невідомо, легше вона, ніж справжні, або важче.
Задача 11. Дано 8 однакових на зовнішній вигляд монет. Відомо, що серед них є одна фальшива, яка легше, ніж справжні. Знайти за допомогою чашкових терезів фальшиву монету.
Задача 12. Дано 12 однакових на зовнішній вигляд монет. Відомо, що серед них є одна фальшива, яка трохи відрізняється за вагою від справжніх. Знайти за допомогою чашкових терезів фальшиву монету, якщо невідомо, легше вона, ніж справжні, або важче.