
- •Програмування
- •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.6. Задачі упорядкування
6.6.1. Упорядкування елементів
Задача 18. Дано два елементи a і b. У задачі потрібно упорядкувати їх за зростанням, тобто скласти алгоритм, що виконує «одночасно» дві дії: a := Min(a, b), b := Max(a, b).
Розв’язання оформимо у вигляді процедури
Procedure OrdPair(var a, b : Real);
Var
temp : Real;
Begin
If a > b
Then begin
temp := a;
a := b;
b := temp
end
End;
Змінна temp у цьому алгоритмі відіграє роль тимчасового сховища для значення змінної a. Перестановка двох елементів часто використовується в алгоритмах сортування. Для позначення відповідної процедури використовується ім'я Swap.
Procedure Swap(var a, b : Real);
Var
temp : Real;
Begin
temp := a;
a := b;
b := temp
End;
Процедура OrdPair тепер може бути записана більш компактно
Procedure OrdPair(var a, b : Real);
Begin
If a > b
Then Swap(a, b)
End;
Задача 19. Упорядкувати три елементи a, b, c за зростанням.
Розв’язання . Використовуємо алгоритм упорядкування двох елементів.
Procedure OrdTriple(var a, b, c : Real);
Begin
{1} OrdPair(a, b); {2} OrdPair(b, c);
{3} OrdPair(a, b);
End;
Аналіз алгоритму
Після виконання першого оператора OrdPair(a, b) a <= b. Після виконання другого оператора OrdPair(b, c) b <= c. Тому с – максимальний з трьох елементів. Ці два оператори «виштовхують» найбільший елемент у змінну с.
У результаті виконання третього оператора OrdPair(a, b) a <= b. Тому b – максимальний з елементів a, b. Цей оператор «виштовхує» другий по величині елемент у змінну b. Найменший з трьох елементів став значенням a.
Задача 20. Упорядкувати чотири елементи a1, a2, a3, a4 за зростанням.
Розв’язання. Використовуємо той самий метод, що і при упорядкуванні трьох елементів.
Procedure OrdQuadriple(var a1, a2, a3, a4 : Real);
Begin
{1} OrdPair(a1, a2); OrdPair(a2, a3); OrdPair(a3, a4);
{2} OrdPair(a1, a2); OrdPair(a2, a3);
{3} OrdPair(a1, a2);
End;
Питання для аналізу алгоритму
Що відбудеться в результаті виконання дій, записаних у першому рядку алгоритму?
Що відбудеться в результаті виконання дій, записаних у другому рядку алгоритму?
Що відбудеться в результаті виконання дії, яка записана в третьому рядку алгоритму?
Скільки порівнянь виконує алгоритм?
Скільки перестановок виконує алгоритм?
Якими повинні бути вихідні значення змінних а1, а2, а3, а4 для того, щоб кількість перестановок була максимальною?
Як змінити алгоритм для того, щоб він упорядковував 5 елементів?
6.6.2. Порівняння, перестановки і пересилання
Кількість порівнянь, які виконує алгоритм у гіршому випадку, позначається функцією С(n). Аргументом цієї функції є кількість вихідних даних, що оброблюються алгоритмом.
Так, в алгоритмі OrdQuadriple n = 4, a C(4) = 6.
В алгоритмі Middle пошуку середнього за величиною з трьох елементів n = 3. Величина С залежить від варіанта взаємного розташування даних: у варіантах 3 і 5 потрібні 2 порівняння а в інших – 3. Таким чином, С(3) = 3.
У задачах упорядкування (сортування) ефективність алгоритмів за часом оцінюється не тільки за кількістю порівнянь, але і за кількістю пересилань. Пересиланням називають дію, яка виконується оператором присвоювання a := b. Так, процедура Swap виконує три пересилання. Оскільки алгоритм упорядкування трьох елементів OrdTriple у гіршому випадку виконує три перестановки, у цьому випадку виконується 9 пересилань. Кількість пересилань, що виконує алгоритм у гіршому випадку, позначається функцією М(n). Аргументом цієї функції також є кількість вихідних даних, які оброблюються алгоритмом.
Звичайно в алгоритмах упорядкування всі дії виконуються «на місці». Це означає, що допоміжні змінні алгоритму відіграють роль тимчасового сховища (як змінна Temp в алгоритмі Swap). У цьому випадку функція М(n) може позначати кількість перестановок.
Задачі для самостійного розв’язування
Задача 21. Оптимальне сортування 4-х елементів. Скласти алгоритм упорядкування 4-х елементів, що виконував би всього 5 порівнянь, тобто С(4) = 5.
Вказівка: Упорядкувати пари (а1, а2) і (а3, а4) а потім, побудувавши дерево розв’язувань, знайти порівняння і перестановки, що вирішують задачу.
Задача 22. Два числових інтервали [a, b] і [c, d] задані числами a, b, c, d. Скласти алгоритм пошуку їх перетину.
Задача 23. Два числових інтервали [a, b] і [c, d] задані числами a, b, c, d. Скласти алгоритм, що визначає, чи є об'єднання цих інтервалів також інтервалом.
Задача 24. Скласти оптимальний алгоритм, що переставляє дані a, b, c, d таким чином, щоб найменше з них стояло на першому місці, а найбільше – на 4-ому.(Тобто a = Min(a, b, c, d), d = Max(a, b, c, d)). Визначити кількість порівнянь і перестановок алгоритму.
Задача 25*. Оптимальне сортування 5-ти елементів. Скласти алгоритм упорядкування 5-ти елементів, що виконував би всього 7 порівнянь ( С(5) = 7 ).