
- •Програмування
- •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. Заключне зауваження: переходимо до об’єктів
1.4. Величини
Величиною називають таку характеристику предмета або явища, значення якої можна виміряти або обчислити.
У курсі фізики Ви вивчали закон Ома для ділянки електричної мережі, що зв'язує три фізичні величини I, U, R рівністю
U = I*R.
Тут I – сила струму, що протікає через резистор, U – спадання напруги на цьому резисторі, R – опір резистора.
Для фізика закон Ома – формула, яку можна перевірити експериментально, а також використовувати для обчислення однієї з величин по двом іншим.
Для програміста, що вирішує задачу побудови алгоритму обчислення U при заданих значеннях I та R, справа обстоїть інакше. По-перше, він має визначити таку форму представлення величин U, I, R, яка придатна для Виконавця, по-друге – представити операцію множення як алгоритм в системі команд Виконавця. Фізичний зміст величин алгоритму для програміста ніякої ролі не грає.
Алгоритм визначається не тільки задачею, але і системою команд Виконавця.
Уявимо собі, що у Вашому розпорядженні є пристрій, що виконує арифметичні операції з цілими числами, представленими в десятковій системі числення. Замовник алгоритму (фізик) визначив форму представлення вхідних даних і результату у звичному для себе виді: кожна з величин I, R представлена у виді десяткового дробу з порядком, тобто у формі
<ціла частина>.<дробова частина>*10<порядок>
де ціла частина, дробова частина і порядок записані в десятковій системі числення.
Приклад вхідних даних: I = 34.23*10-2, R = 581.6*103.
Така форма представлення дійсного числа називається формою з плаваючою точкою.
Результат U потрібно представити у такому ж виді. Визначення одиниць вимірювання (вольти, ампери, оми) фізик бере на себе.
Ваш алгоритм має:
обчислити цілу частину добутку;
обчислити дробову частину добутку;
обчислити порядок добутку.
1.5. Типи величин
Представлення про величини пройшло довгий історичний шлях розвитку. Безумовно, на практиці найбільш поширені числові величини, значеннями яких є числа.
У далекій давнині люди стали користуватися натуральними числами. Поняття натурального числа сформувалося як результат абстрагування в задачах визначення кількості предметів або місця розташування даного предмета в ряді інших.
Раціональні числа з'явилися в задачах розподілу предмета на рівне число частин. Додатними раціональними числами користувалися ще Евклід і Піфагор.
Десяткова система числення прийшла в середньовічну Європу разом з арабськими цифрами і незабаром стала загальноприйнятою.
Значно пізніше були введені у вживання число 0 і від’ємні числа. У результаті оформилося поняття цілого числа.
Дійсні числа стали використовуватися для наближених вимірювань та обчислень.
Бурхливий розвиток математики як науки про числа призвів до відкриття алгебраїчних і трансцендентних чисел, комплексних чисел і багатьох інших числових систем.
У результаті розвитку геометрії, механіки, інших наук сформувалося представлення про векторні величини. На відміну від скалярної величини, значення якої визначається одним числом, векторна величина визначається декількома числовими значеннями.
Так, положення точки на площині визначається парою її координат, а швидкість руху, крім величини, визначається ще і напрямком. При русі точки в просторі її положення визначається трьома просторовими координатами і часовою координатою – часом.
Уявлення про рядкові величини сформувалося в процесі становлення інформатики як науки. Значенням рядкової величини є слово, тобто ланцюжок букв з деякого алфавіту.
Приклади літерних даних: ‘Інформатика’, ‘Algorithm’, ‘5 травня 2004 року’, ‘триста двадцять дев'ять’. Необхідність розглядати слова як дані виникає в алгоритмах обробки текстової інформації.
Ще один приклад величин, що не є числовими – так звані логічні величини. Логічна величина може приймати два логічних значення – Істина і Хибність. Детальніше цей тип величин ми розглянемо пізніше.
Нарешті, значеннями величин із приклада 1.2 є найпростіші геометричні фігури. Це приклад величин, які можна назвати геометричними.
Величини, які використовуються в алгоритмі, характеризується ім'ям, типом і значенням.
Ім'я величини ідентифікує цю величину. Програміст використовує імена для позначення величин. Виконавець алгоритму одержує доступ до даної величини за її ім’ям.
Тип величини визначає набір припустимих операцій над даною величиною, область її визначення і форму запису її значень.
Кожна величина, що використовується в алгоритмі, у кожен момент часу має деяке значення. Значенням величини є дане відповідного типу.
У багатьох сучасних алгоритмічних мовах прийнято описувати усі величини, які використовуються в алгоритмі. Опис величини включає її ім'я і тип. Оскільки в алгоритмах, крім вхідних і вихідних величин, використовуються ще і допоміжні величини, їх теж потрібно описувати.
Повернемося до алгоритму приклада 1.1. Запишемо його за усіма правилами, прийнятими раніше.
Приклад 1.1 Продовження
Алгоритм Додавання дробів;
Вхід
A, C: Цілі числа;
B, D: Натуральні числа;
Вихід
E: Ціле число;
F: Натуральне число;
Допоміжні величини
Y, Z: Натуральні числа;
Х, X1, X2, E: Цілі числа;
Початок
Обчислити Y = B*D;
Обчислити X1 = A*D;
Обчислити X2 = B*C;
Обчислити X = X1+X2;
Обчислити Z = НСД(X,Y);
Обчислити Е = X div Z;
Обчислити F = Y div Z
Кінець.
У математиці прийнято вважати, що знаменник раціонального числа, записаного у виді дробу, завжди позитивний. Тому, визначаючи типи величин, ми класифікуємо величини B і D, а також допоміжні величини Y, Z як натуральні числа.