
- •Програмування
- •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.8. Рядкові величини
Рядкові величини використовуються в алгоритмах обробки текстів. Типовий приклад такого алгоритму – алгоритм пошуку усіх входжень даного слова в текст і заміни цього слова його синонімом.
Як уже згадувалося, значеннями рядкових величин є слова, тобто ланцюжки символів (букв). Для того, щоб уточнити систему команд виконавця алгоритмів обробки текстів, потрібно почати з алфавіту, в символах якого записуються ці тексти.
За багатовікову історію свого розвитку людство винайшло багато способів запису інформації на матеріальних носіях (на каменях, глиняних табличках, папері, магнітному диску, у чипі пам'яті комп'ютера). У навчальних посібниках з інформатики згадуються: текстова інформація, числова інформація, графічна інформація, звукова (аудио) інформація, відеоінформація. Однак, незалежно від виду інформації, елементарною одиницею її представлення є символ. Справді, тексти складаються з букв і розділових знаків. Числа ми записуємо за допомогою цифр і знаків-роздільників. В інформатиці графічні образи (картинки) формуються з кольорових точок, розташованих у прямокутній таблиці. Тому кожну точку представляють три числа: точка = (номер рядка, стовпця, номер кольору). Таке представлення (кодування) графічної інформації називають цифруванням. Цифрування інформації – універсальний спосіб її представлення в комп'ютері.
Виконавець текстових алгоритмів має у своєму розпорядженні алфавіт символів, з яких повинні складатися оброблювані ним тексти.
Алфавіт – це скінчений впорядкований набір символів. Символи розташовані в алфавіті в строго визначеному порядку – один за іншим.
Таким чином, в алфавіті існує перший (початковий) символ і заключний (кінцевий) символ. Для кожного символу алфавіту, крім заключного, можна вказати наступний за ним символ. Так само, для кожного символу алфавіту, крім початкового, можна вказати попередній йому символ.
Отже, символи алфавіту можна порівнювати за допомогою операцій порівняння:
s1 < s2, s1 > s2, s1 <= s2, s1 >= s2, s1 = s2, s1 <> s2.
Наприклад, для алгоритмів обробки слів, що представляють десяткові дроби, алфавіт складається з наступних 13-ти символів:
{ 0 1 2 3 4 5 6 7 8 9 . - + }
Для того, щоб відрізняти символи від інших позначень, у яких використовуються букви, символи беруть у лапки.
У цьому алфавіті початковий символ – '0', а заключний – знак '+'. Символи нашого алфавіту задовольняють ланцюжкові нерівностей:
'0' < '1' < '2' < '3' < '4' < '5' < '6' < '7' < '8' < '9' < '.' < '-' < '+'
Алгоритми обробки текстів українською мовою вимагають значно більше символів. Це – прописні і малі літери абетки, розділові знаки, дужки, інші символи, що зустрічаються в текстах.
Для алфавіту символів, які використовуються в інформатиці, існують міжнародні стандарти.
Словом називається скінчена послідовність (ланцюжок) символів з алфавіту виконавця. Слова є значеннями рядкових величин.
Поряд з терміном „слово” в програмуванні використовуються також терміни „рядок”, „літерал”. (Термін „текст”, яким ми користувалися, в програмуванні має дещо інше значення.)
Операції порівняння
Порядок, визначений на символах алфавіту, використовують для визначення порядку на множині рядків. Цей спосіб порівняння й упорядкування рядків (слів) називають алфавітним або лексикографічним порядком. Алфавітний порядок застосовують при складанні словників, довідників і т.і.
Для того, щоб визначити, яке зі слів менше, порівнюють спочатку перші букви цих слів, потім другі, і так далі. Припустимо, що порівнюються слова P = ‘a1a2…ak‘ і Q = ‘b1b2…bm’...
Якщо ‘a1‘< ‘b1‘ то P < Q;
Якщо ‘a1‘ > ‘b1‘ то P > Q;
Якщо ‘a1‘= ‘b1‘ то порівнюємо символи ‘a2 ‘ і ‘b2’ , і так далі.
На кожному кроці порівняння можливі наступні ситуації:
Одне зі слів уже прочитано цілком, а друге - ще ні. У цьому випадку менше те слово, символи якого вже прочитані.
Обидва слова прочитані цілком. У цьому випадку слова рівні.
Символ одного зі слів менше, ніж символ іншого. У цьому випадку менше те слово, символ якого менше.
Символи обох слів рівні. У цьому випадку переходимо до порівняння наступних символів.
Наприклад:
'мама' < 'папа', оскільки 'м' < 'п'.
'алгебра' < 'алгоритм', оскільки перші три букви рівні, а 'е' < 'о'.
‘program’ < ‘programmer’, оскільки при побуквеному порівнянні в першому слові всі букви будуть вичерпані, а в другому – ще ні.
Операції Знайти і Замінити
Оскільки спосіб представлення інформації у виді рядка є універсальним, будь-яку алгоритмічну задачу можна розглядати як задачу обробки рядкових даних. Виявляється, що можна так визначити систему команд виконавця, щоб він, з одного боку, обробляв тільки рядки, а з іншого боку – був здатний виконати будь-який алгоритм. Таку систему команд знайшов у 50-х роках ХХ століття А.А. Марков. Відкрита ним алгоритмічна система називається нормальними алгоритмами Маркова.
Основна операція нормального алгоритма Маркова – операція підстановки: