
- •Програмування
- •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.4. Ефективність алгоритму як кількість його кроків
Важливу роль при визначенні якості комп'ютерної програми грає час її виконання. Час виконання комп'ютерної програми залежить від багатьох факторів, які можна розділити на дві основні групи: технічні характеристики обчислювальної системи (комп'ютера і системного програмного забезпечення) і технічні характеристики власне прикладної комп'ютерної програми. Оскільки кожна прикладна програма є реалізацією алгоритму, на час її виконання впливає в першу чергу кількість кроків її алгоритму.
Алгоритм розв’язування прикладної задачі називають ефективним за часом, якщо він розв’язує цю задачу за найменшу можливу кількість кроків.
В алгоритмах вибору кроком є порівняння. Тому мірою ефективності алгоритму вибору є кількість порівнянь, які виконуються в ньому. Як ми бачили при розв’язуванні задачі 7, ця величина залежить не тільки від алгоритму, але і від того варіанта вихідних даних, що обробляє алгоритм у даному випадку. При визначенні ефективності алгоритму часто використовують кількість його кроків у гіршому випадку, тобто при найбільш несприятливому варіанті виборі вихідних даних.
6.5.5. Вибір даного елемента
Один з розповсюджених варіантів задачі вибору – вибір одного (даного) елемента з декількох.
Нехай A = {a1, a2, . . ., ak} – деяка множина елементів і b – даний елемент. У задачі потрібно дізнатися, чи знаходиться в множині A елемент, рівний b чи ні. Якщо в множині A такий елемент знайдеться, алгоритм повинен знайти його місце.
Розглянемо розв’язання цієї задачі для множини з 3-х елементів.
Задача 13. Вибір останнього елемента, рівного даному, у множині з трьох елементів.
Текст процедури мовою Паскаль:
Procedure LastGivenItems3 ( a1, a2, a3, b: Real; Var Found: Boolean; Var Location: Integer);
Begin
Found := False;
If a1 = b
then begin
Location = 1;
Found := True
end;
If a2 = b then begin
Location = 2;
Found := True
end;
If a3 = b then begin
Location = 3;
Found := True
end;
End;
Цей варіант алгоритму вибирає останнє входження елемента b у множину {a1, a1, a3}. У другому варіанті – алгоритмі FirstGivenItem3 шукається тільки одне – перше входження b у {a1, a1, a3}.
Задача 14. Вибір першого елемента, рівного даному, у наборі з трьох елементів.
Текст процедури мовою Паскаль:
Procedure FirstGivenItem3 ( a1, a2, a3, b: Real; Var Found: Boolean; Var Location: Integer);
Begin
Found := False;
If a1 = b
then begin
Location = 1;
Found := True
end
else If a2 = b
then begin
Location = 2;
Found := True
end
else If a3 = b
then begin
Location = 3;
Found := True
end;
End;
Якщо перший алгоритм завжди виконує 3 кроки порівнянь, другий – один, два або три в залежності від результату вибору на попередніх кроках. Тому другий алгоритм «у середньому» працює швидше.
На закінчення розглянемо варіант задачі вибору даного з трьох елементів у випадку, коли a1 < a2 < a3. Виявляється, що в цьому випадку зручно застосувати функцію Сompare(a, b), причому починати порівняння потрібно із середнього елемента.
Задача 15. Вибір елемента, рівного даному, в упорядкованій множині з трьох елементів {a1 < a2 < a3}.
Текст процедури мовою Паскаль:
Procedure GivenItemOrd3 (a1, a2, a3, b: Real; Var Found: Boolean; Var Location: Integer);
Begin
Case Compare(a2, b) + 1 of
0 : case Compare(a1, b) + 1 of
0, 2: Found := False;
1: begin
Found := True;
Location := 1
end;
end;
1: begin
Found := True;
Location := 2
end;
2: case Compare(a3, b) + 1 of
0, 2: Found := False;
1: begin
Found := True;
Location := 3
end;
end;
end
End;
Неважко переконатися в тому, що цей алгоритм завжди виконує 2 кроки порівняння, причому це стало можливим тільки тому, що множина A = {a1, a2, a3} упорядкована. У протилежному випадку алгоритм працює неправильно.
Задачі для самостійного розв’яування
Задача 16. Змінити алгоритм GivenItemOrd3 таким чином, щоб він шукав те місце в множині A = {a1, a2, a3} , куди потрібно вставити елемент b так, щоб вона залишилася упорядкованою: A1 = A {b} .
Задача 17. Скласти алгоритм вибору елемента, рівного даному, в упорядкованій множині з 7-и елементів. Скільки кроків порівняння виконує Ваш алгоритм?