
- •Програмування
- •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. Заключне зауваження: переходимо до об’єктів
4.13. Оптимізація лінійних програм
Задача зменшення складності програми, що містить декілька виразів, носить більш складний характер. Тут оптимізації підлягають одночасно декілька виразів, які обчислюються послідовно.
Приклад 4.3. Програма обчислення координат вектора, повернутого на кут Alfa.
Program Vector;
Var
X, Y : Real;
Alfa : Real;
U, V : Real;
Begin
{ Введення X, Y, Alfa }
U := X*Cos(Alfa) + Y*Sin(Alfa);
V := Y*Cos(Alfa) - X*Sin(Alfa);
{ Виведення U, V }
End.
У цьому варіанті складність програми T(U, V) є
T(U, V) = 4Tf + 4Tm + 2Ta
Здійснимо попереднє обчислення функції Sin, Cos:
{ Описати допоміжні змінні Fsin, Fcos }
Begin
{ Введення X, Y, Alfa }
Fsin := Sin(Alfa);
Fcos := Cos(Alfa);
U := X*Fcos + Y*Fsin;
V := Y*Fcos - X*FSin ;
{ Виведення U, V }
End.
Отримаємо: T(U, V) = 2Tf + 4Tm + 2Ta
В результаті перетворення складність зменшилась приблизно вдвічі. Можна ще зменшити складність програми, якщо обчислити U і V наступним способом:
A := (Fcos + Fsin)*(X + Y);
B := X*Fsin;
C := Y*Fcos;
U := A - B - C;
V := C - B;
Тоді T(U, V) = 2Tf + 3Tm + 5Ta
Рішення питання про те, який з двох варіантів перетворень програми кращий за швидкодією, залежить від реалізації множення у комп’ютері.
Менш очевидним є прийом оптимізації, що заключається в використанні співвідношень між виразами – правими частинами операторів. Розглянемо його на наступному прикладі:
Приклад 4.4. Відомо, що рівняння x2 - px + q має два корені . Знайти їх.
Варіант 1:
Discriminant := Sqrt(p*p - 4*q);
Root1 := ( p + Discriminant )/2;
Root2 := ( p - Discriminant )/2;
Варіант 2:
Discriminant := Sqrt(p*p - 4*q);
Root1 := (p + Discriminant)/2;
Root2 := p - Root1;
Обчислення у другому варіанті містять на одне ділення менше. Тут оптимізація досягнута завдяки наявності співвідношення між Root1 і Root2: Root1+ Root2 = p.
Відмітимо на закінчення, що розглянуті прийоми оптимізації має смисл застосовувати тоді, коли обчислення повторюються в програмі достатньо часто і час виконання програми – критичний параметр.
4.14. Задачі і вправи
Скласти програму, що розв’язує задачу.
Задачі на цілі числа
Скласти алгоритм та розробити програму, яка за трьохзначним числом abc, що вводиться з клавіатури, знаходить та виводить на екран монітору число bсa.
Скласти алгоритм та розробити програму, яка знаходить дві середні цифри добутку двохзначного числа ab на число ba. Число ab вводиться з клавіатури.
Скласти алгоритм та розробити програму, яка знаходить останні дві цифри добутку чотирьох натуральних чисел А, В, С, D.
Скласти алгоритм та розробити програму, яка за числом місяця Жовтень 2001 р. обчислює номер дня тижня, який припадає на це число. (Відлік номерів днів тижня починається з понеділка.)
Прямокутна таблиця розміром M на N заповнена послідовними натуральними числами від 1 до M*N за принципом “зліва направо та зверху вниз”. Скласти алгоритм та розробити програму, яка за номерам рядка A та стовпчика B визначає число X, що стоїть в клітинці таблиці, яка знаходиться в цьому рядку та цьому стовпчику.
Прямокутна таблиця розміром M на N заповнена послідовними натуральними числами від 1 до M*N за принципом “зліва направо та зверху вниз”. Скласти алгоритм та розробити програму, яка за числом A визначає рядок X та стовпчик Y таблиці, де розташоване це число.
Багатоповерховий будинок має N поверхів та M підїздів. На кожному поверсі кожного підїзду розташовано K квартир. Скласти алгоритм та розробити програму, яка за номером F квартири визначає підїзд та поверх розташування цієї квартири.
Автомат для видачі паперових грошей (банкомат) заряджено купюрами номіналів 100, 50, 20, 10, 5, 2, 1 грн. Скласти алгоритм та розробити програму, яка підраховує кількості купюр різних номіналів, якими банкомат видає суму в N грн. Ваш алгоритм повинен витрачати при цьому найменшу можливу кількість купюр.
Скласти алгоритм та розробити програму, яка знаходить останні чотири цифри 32-ого степеня натурального числа N. (N32)
Скласти алгоритм та розробити програму, яка обчислює цілі коефіцієнти А, В, С квадратного рівняння Аx2 + Вx + С = 0 за його раціональними коренями х1 = n1 / m1, x2 = n2 / m2
Задачі на дійсні числа
Знайти гіпотенузу, площу і гострі кути прямокутного трикутника, заданого катетами.
Скласти алгоритм та розробити програму, яка за довжиною, шириною та висотою кімнати, що вводяться з клавіатури, знаходить та виводить на екран площу та обєм цієї кімнати.
Дані дві дійсні змінні a, b. Скласти програму, яка міняє місцями значення цих змінних (нове значення a дорівнює старому значенню b та навпаки).
Дані дві дійсні змінні a, b. Скласти програму, яка міняє місцями значення цих змінних (нове значення a дорівнює старому значенню b та навпаки). Не використовувати додаткових змінних.
Скласти програму, яка обчислює останню цифру цілої частини та першу цифру дробової частини дійсного числа х.
Скласти програму, яка обчислює першу цифру добутку чисел a і n (a – дійсне число, n – натуральне число.)
Змішано V1 літрів води температурою t1 з V2 літрами води температури t2. Знайти об’єм V і температуру t утвореної суміші.
Знайти радіус кола з центром в (X0,Y0), дотичною до якого є пряма y = kx + b.
Обчислити центр ваги системи з трьох матеріальних точок на площині з масами M1, M2, M3 і координатами (X1,Y1), (X2,Y2), (X3,Y3).
Розв’язати систему лінійних рівнянь методом Крамера.
{Вважати, що її визначник не дорівнює нулю }
Обчислити координати точки А(X,Y) при повороті системи координат на кут Alfa і паралельному переносі на вектор a = (u, v).
Знайти корінь степені n і n-ту степінь позитивного дійсного числа a.
Обчислити внутрішні кути трикутника, заданого довжинами сторін.
Перерахувати координати точки з полярної системи в декартову систему координат.
Перерахувати координати точки з декартової системи в полярну систему координат.
Розрахувати координати матеріальної точки, пущеної з початковою швидкістю V0 під кутом Alfa до горизонту в напрямі вектора а = (X0,Y0) в момент часу t.
Багаточлени F(x) = ax + b і G(x) = cx + d задані своїми коефіцієнтами. Знайти коефіцієнти багаточлена H(x) = F(x)*G(x).
Написати програму розвязання задачі: знайти довжини медіан трикутника ABC, визначеного координатами своїх вершин A, B, C.
Написати програму розвязання задачі: знайти довжини бісектрис трикутника ABC, визначеного координатами своїх вершин A, B, C.
Написати програму розвязання задачі: знайти координати точки перетину бісектрис трикутника ABC, визначеного координатами своїх вершин A, B, C.