
- •Програмування
- •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. Заключне зауваження: переходимо до об’єктів
2.1.3. Поняття про машинну мову
Набір команд процесора містить:
арифметико-логічні команди – команди арифметичних дій над двоїстими числами і логічних дій на двоїстими векторами;
команди управління – команди переходу, розгалужень, повторень, і деякі інші команди;
команди пересилання даних – команди, за допомогою яких обмінюються даними ОЗП і ЦП;
команди введення-виведення даних – команди, за допомогою яких обмінюються даними ЦП і зовнішні пристрої.
Кожна команда містить код операції, яку вона виконує і інформацію про адреси даних, над якими ця операція виконується. Крім цього, команда (безпосередньо – команди керування і опосередковано – інші команди) містить інформацію про адресу команди, яка буде виконуватися наступною. Таким чином, будь-яка послідовність команд, яка розміщена в ОЗП, фактично представляє собою алгоритм, записаний в системі команд процесора – машинну програму.
Найбільш поширеною зараз є схема комп’ютеру з загальною шиною. Загальна шина – це центральна інформаційна магістраль, яка зв’язує зовнішні пристрої з центральним процесором. Вона складається з шини даних, шини адреси і шини управління. Шина даних призначена для обміну даними між ОЗП і зовнішніми пристроями. По шині адреси передаються адреси даних. Ця шина односпрямована. Шина управління служить каналом обміну управляючими сигналами між зовнішніми пристроями і центральним процесором.
Таким чином, мова процесора – це набір команд, кожна з яких описує деяку елементарну дію по перетворенню інформації, яка представлена у двоїстому коді. Універсальне використання двоїстого коду представлення інформації самих різноманітних форм приводить до того, що програма рішення навіть достатньо простої задачі містить сотні машинних команд. Написати таку програму, використовуючи машинні команди, дуже непросто навіть кваліфікованому програмісту. Реальні програми складаються з десятків і сотень тисяч машинних команд. Тому будь-яка технологія проектування програми повинна опиратися на заходи, характерні для людського мислення, оперувати звичними для людини поняттями з тієї предметної області, якій належить задача.
Іншими словами, програміст (проектувальник алгоритмів) повинен мати можливість сформулювати свій алгоритм мовою звичних понять; потім спеціальна програма повинна виразити ці поняття за допомогою машинних засобів, – здійснити переклад (трансляцію) тексту алгоритму на мову машини.
Ця необхідність і привела до появи мов програмування високого рівня як мов запису алгоритмів, які призначені для виконання на комп’ютері.
2.2. Мови програмування високого рівня
Мови програмування високого рівня грають роль засобу зв’язку між програмістом і машиною, а також між програмістами. Ця обставина накладає на мову багато обов’язків:
1.Мова повинна бути близькою до тих фрагментів природних мов, які забезпечують конкретну предметну область діяльності людини; (Мова, яка орієнтована на ділові сфери використань, повинна містити поняття, які використовуються у цьому виді діяльності: рахунок, база даних і т.п.).
2.Всі засоби мови повинні бути формалізовані у такому степені, щоб їх можна було реалізувати як машинні програми;
(наприклад, речення “Знайти документ Х у базі Y” повинно генерувати програму в машинній мові, яка здійснює потрібний пошук).
3.Мова програмування не тільки підтримує предметно-орієнтовну діяльність , але і стимулює її розвиток (поняття бази даних, обчислювальної мережі привело до революції у діловій діяльності).
4.Мова програмування – дещо більше, ніж засіб опису алгоритмів: він несе в собі систему понять, на основі яких людина може обдумувати свої задачі, і нотацію, за допомогою якої він може виразити свої розуміння з приводу рішення задачі.
Вивчаючи нову мову програмування, краще всього до неї відноситися, як до будь-якої іншої іноземної мови: засоби мови приймати як дані від Бога, навіть якщо вони нам здаються незрозумілими, поганими або непотрібними.