
- •Програмування
- •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. Заключне зауваження: переходимо до об’єктів
7.12. Сортування вибором
Приклад 7.10.
Основна дія сортування вибором – пошук найменшого елемента в частині масиву, що переглядається і перестановка з першим елементом цієї частини:
For i := 1 to n - 1 do begin
k := Індекс( Min(a[i], ..., a[n]));
Переставити a[i], a[k]
end;
Const
n = 100;
Type
Vector = array[1..n] of Real;
Procedure SelectSort (Var a: Vector);
Var
i, j, MinIndex : Integer;
Temp : Real;
Begin
For i := 1 to n - 1 do begin
{ пошук мінімального елемента }
MinIndex := i;
for j := i + 1 to n do
If a[j] < a[MinIndex]
then MinIndex := j;
{перестановка елементів}
Temp := a[MinIndex];
a[MinIndex] := a[i];
a[i] := Temp
end;
End;
Аналіз алгоритму сортування вибором
Внутрішній цикл здійснює пошук мінімального елемента. Після виконання оператора If має місце співвідношення
Min = Min(a[i], a[i+1], ... , a[j]),
а після завершення циклу
Min = Min(a[i], a[i+1], ... , a[n]).
Після перестановки маємо
a[i] = Min(a[i], a[i+1], ... , a[n]).
Зовнішній цикл керує довжиною частини масиву, що переглядається. Після виконання тіла зовнішнього циклу початок масиву вже відсортований:
a[1] a[2] .... a[i]
Після завершення зовнішнього циклу отримаємо:
a[1] a[2] ... a[n-1], a[n-1] = Min(a[n-1], a[n]),
тобто масив відсортований.
Зовнішній цикл виконався n-1 разів. Внутрішній цикл виконується і-1 разів (i = n-1, n-2, ...,1). Кожне виконання тіла внутрішнього циклу складається в одному порівнянні. Тому
C(n) = 1 + 2 + ... + n - 1 = n(n - 1)/2,
Перестановка елементів здійснюється у зовнішньому циклі. Тому
M(n) = 3(n - 1)
Як і алгоритм сортування обмінами, цей алгоритм є стійким. Дійсно, блок пошуку мінімального елемента в хвості масиву шукає мінімальний елемент з найменшим індексом, тому перестановки будуть стійкими. Можна зробити висновок, що просте сортування вибором ефективніше сортування простими обмінами за критерієм M(n). Якщо послідовність, що сортується, складається з даних великого розміру, цей критерій може мати вирішальне значення.
7.13. Задачі і вправи
І.Скласти програму табулювання функції z = f(x, y) у прямокутнику [a, b]*[c, d] з кроком табуляції h і точністю
|
Функція z = f(x,y) |
[a, b] |
[c, d] |
h |
|
1 |
z = ln(1 + x2 + y2) |
[ -2, 3 ] |
[ -1, 3 ] |
0.1 |
10-5 |
2 |
z = sin2(2x+y) |
[ -, /2 ] |
[ -2, ] |
0.2 |
10-6 |
3 |
z = exp(x2+y2) |
[ -2, 2 ] |
[ -2, 2 ] |
0.1 |
10-5 |
4 |
z = 1/(tg2(x+y)+1) |
[ -/2, /2 ] |
[ -, ] |
0.2 |
10-4 |
5 |
z = ln(x+sqrt(x2+y2)) |
[ -2, 3 ] |
[ -2, 3 ] |
0.1 |
10-5 |
Розробити програму, яка за даним натуральним числом N обчислює N! (0!=1, 1! = 1, при N > 1 N! = 1*2*...*N). Ваша програма повинна контролювати діапазон цілих чисел, для яких вона працює правильно.
Послідовність Фібоначчі визначається таким чином: f(0)= 0, f(1) = 1, f(k) = f(k-1) + f(k-2) при k >=2. Розробити програму, яка за даним натуральним числом N обчислює f(N). Ваша програма повинна контролювати діапазон цілих чисел, для яких вона працює правильно.
Розробити програму, яка за даним натуральним числом N та дійсним числом x обчислює суму S(N, x) = 1/0! + x/1! + ... + xN/N!. Треба, щоб кількість операцій (виконаних команд присвоєння) була б не більшою ніж C*n для деякої константи С.
Розробити програму, яка за даним натуральним числом N та дійсним числом x в єдиному арифметичному циклі обчислює суми
C(N, x) = 1/0! - x2/2! + x4 /4! ... + (-1)N* x 2N/(2N)!.
S(N, x) = x/1! - x3/3! + x5 /5! ... + (-1)N* x 2N+1/(2N+1)!.
Треба, щоб кількість операцій (виконаних команд присвоєння) була б не більшою ніж C*n для деякої константи С.
Розробити програму пошуку наближених найбільшого та найменшого значень функції
y = (1/Pi)*Sin(x2/Pi)
на інтервалі [a, b] методом послідовного обчислення значень цієї функції на даному інтервалі з кроком h зміни значень змінної x.
Розробити програму наближеного обчислення визначеного інтеграла f(x)dx на відрізку [a, b] за формулою середніх прямокутників при фіксованому числі N розбиття відрізку інтегрування [a, b] на N рівних частин.
Розробити програму, яка за даним додатнім дійсним числом R, даним додатнім натуральним числом p < 10, даним додатнім натуральним числом N обчислює запис R в p-ічній системі числення з точністю 1/pN . Результат потрібно вивести на екран у вигляді
R = a1 a2 ... ak , b1 b2 ... bN (p),
де a1 a2 ... ak - ціла частина, b1 b2 ... bN - дробова частина запису R в p-ічній системі числення з потрібною точністю.
Розробити програму, яка за даним натуральним числом N = a1 a2 ... ak формує число M = ak ak-1 ... a1 (число M складається з цифр числа N, розташованими у зворотному порядку). Числа N та M визначте в програмі як дані типу LongInt.
ІІ. Скласти програму розв’язування задачі і оцінити її складність:
Дано числовий масив А[1..n]. Знайти суму всіх елементів A, що стоять між A[1] і A[n].
Дано числовий масив А[1..n]. Підрахувати середнє арифметичне всіх від’ємних і всіх додатних його елементів.
Дано числовий масив А[1..n]. Знайти всі його елементи, менші, ніж всі попередні.
Дано числовий масив A[1..n]. Знайти в цьому масиві найбільшу за кількістю елементів зростаючу підпослідовність елементів, що йдуть підряд.
Дано числовий масив A[1..n], що складається з непарного (n = 2k+1) числа попарно нерівних елементів. Знайти середній за величиною елемент у масиві.
Дано масиви А[1..n] і В[1..m]. Знайти всі елементи масиву A, що не входять у В.
Дано масиви А[1..n] і В[1..m]. Знайти всі елементи масиву A, що входять у В.
Дано числовий масив A[1..n]. Величину Sij визначимо наступним чином:
Sii = A[i],
Sij = A[i] + A[i+1] + ... + A[j] при i < j
Sij = Sji при i > j
Знайти Max Sij при 1 i, j n
Дано масив А[1..n], елементами якого є цілі числа. Розробити програму пошуку всіх його елементів, менших, ніж всі попередні (іншими словами, потрібно знайти та роздрукувати всі такі індекси j, для яких справедлива умова: для будь-якого i < j A[i] < A[j]).
Дано масив A[1..n], елементами якого є дійсні числа. Розробити програму, яка знаходить в цьому масиві найбільшу за кількістю елементів зростаючу підпослідовність елементів, розташованих підряд: a[i] < a[i+1] < . . . < a[j].
Дано числовий масив A[1..n], який містить непарну (n = 2k+1) кількість попарно нерівних елементів. Розробити програму, яка шукає середній за величиною елемент в цьому масиві.
Дано масив A[1..n], складений з дійсних чисел. Розробити програму, яка шукає в цьому масиві найменше додатне число.
Послідовність з n точок площини задана масивами Х[1..n] та Y[1..n] координат цих точок. Розробити програму, яка шукає в цій послідовності точку, наймеш віддалену від початку координат.
Елемент A[i] числового масиву A[1..n] називається бар’єрним, якщо
A[j] <= A[i] при j < i та A[j] >= A[i] при j > i.
Розробити програму, яка шукає всі бар’єрні елементи масиву А.
ІІІ. Скласти програму розв’язування задачі і оцінити її складність:
Дано числовий масив А[1..n, 1..m]. Знайти сідлову точку масиву або встановити її відсутність. (Елемент двомірного масиву називається сідловою точкою, якщо він максимальний у своєму стовпці і мінімальний у своєму рядку.)
Дано числовий масив А[1..n, 1..m]. Знайти стовпець, сума квадратів елементів якого мінімальна.
Дано числовий масив А[1..n, 1..m]. Знайти всі елементи А менші, ніж усі сусідні. (Сусідніми називаються елементи, індекси яких відрізняються на 1).