
- •Програмування
- •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. Заключне зауваження: переходимо до об’єктів
11.7. Файли. Управління файлами
Програма, яка написана мовою Pascal, повинна якимось чином обмінюватись даними з зовнішніми пристроями ( отримувати дані з клавіатури, магнітного диска, виводити дані на екран, принтер і т.д.) Для роботи з зовнішніми пристроями використовуються файли. Файли - це значення файлового типу даних - ще одного стандартного складного типу в мові.
(Послідовний) файл – це послідовність однотипних компонент, яка має ознаку кінця і оброблюється послідовно – від початку до кінця.
Порядок компонент визначається самою послідовністю, подібно до того, як порядок слідування чергового кадру кінофільму визначається його розташуванням на кіноплівці. У будь-який момент часу доступний тільки один елемент файла (кадр кінофільму). Інші компоненти доступні тільки шляхом послідовного просування по файлу.
У результаті виконання програми відбувається перетворення одного текстового файла (який називається Input) в інший текстовий файл (який називається Output). Обидва ці файли є стандартними і використовуються для введення /виведення даних.
Над файлами можна виконувати два явних виду дій:
Перегляд (читання) файла.
Створення (запис) файла - виконується шляхом приєднання нових компонент у кінець початково порожнього файла.
Файли, з якими працює програма, повинні бути описані в програмі. Частина файлів (що представляють собою фізичні пристрої ) має в операційній системі стандартні імена. Наприклад, для читання даних з клавіатури і виведення результатів на екран монітора ми користуємось стандартними файлами Input і Output. Файл - принтер має ім’я Prn:
Імена нестандартних файлів, що використовуються в програмі, необхідно описувати у розділі змінних. Описання файлового типу відповідає діаграмі:
файловий тип
Файл, компоненти якого є символами, називається текстовим. Він має стандартний тип Text:
Type Text = File of Char;
Приклади:
Type
ExtClass = File of Person;
CardList = File of Integer;
Var
F : Text;
Data : File of real;
List1, List2 : CardList;
Class10A, Class10B : ExtClass;
Для роботи з нестандартними файлами ім’я файла повинно бути зв’язане з реально існуючим об’єктом – зовнішнім пристроєм. Саме, якщо нам необхідно обробити дані з файла, що знаходиться на магнітному диску і який має (зовнішнє) ім’я D:\ExtName.dat, ми повинні повідомити системі, що працюючи з файлом IntName (читаючи з нього дані або записуючи у нього дані), ми працюємо з файлом ExtName.dat, що знаходиться на диску D:.
Для ототожнення внутрішнього імені файла з зовнішнім іменем використовується процедура Assign(< внутрішнє ім’я >, < 'зовнішнє ім’я ' >).
Після того, як ім’я файла описано і визначено, можна приступити до роботи з файлом. При використанні нестандартних файлів треба пам’ятати, що перед роботою необхідно відкрити їх, тобто зробити доступними з програми. Для цього треба застосувати одну з двох наступних процедур:
Процедура Rewrite(<ім’я файла >) – відкриває файл для запису. Якщо файл раніше існував, всі дані, що зберігались у ньому, знищуються. Файл готовий до запису першої компоненти.
Процедура Reset(<ім’я файла >) – відкриває файл для читання. Файл готовий для читання з нього першої компоненти.
По закінченню роботи з файлом (на запис) він повинен бути закритий. Для цього використовується процедура Close(<ім’я файла >). Ця процедура виконує всі необхідні машинні маніпуляції, що забезпечують збереження даних у файлі.
Для обміну даними з файлами використовують процедури Read і Writе.
Процедура Read (<ім’я файла >,<список введення >), читає дані з файла ( по замовченню ім’я файла - Input). Список введення – це список змінних.
Процедура Writе (<ім’я файла >,<список виведення >), записує дані у файл ( по замовченню ім’я файла - Output). Список виведення – це список виразів.
Якщо F – файл типу Text, то у списку введення/виведення допустимі змінні/вирази типу Integer, Real, Char, String[N]. В інших випадках типи всіх компонент списку повинні співпадати з типом компоненти файла.
При роботі з файлами застосовують стандартні логічні функції:
Eof(F) (end of file) – стандартна функція – признак кінця файла. Якщо файл F вичерпаний, то Eof(F) = True, в протилежному випадку Eof(F) = False.
Eoln(F) (End of line) – стандартна функція – признак кінця рядка текстового файла. Якщо рядок текстового файла F вичерпаний, то Eoln(F) = True, в протилежному випадку Eoln(F) = False. Функція Eoln визначена тільки для файлів типа Text. Звичайно в програмах використовують або текстові файли, або файли, компонентами яких є структуровані дані (наприклад, записи).
Треба пам’ятати, що дані файлових типів неможна використовувати в якості компонент інших структур даних. Наприклад, неможна визначити масив, компонентами якого є файли, запис, полем якої є файл.
Приклад 11.8. Програма формування файла як вибірки з компонент іншого файла. Нехай F - файл записів виду (поле ключа, поле даних). Треба сформувати файл G, який містить ті компоненти F, ключі яких задовольняють умові: значення ключа – ціле число з інтервалу ]Max, Min [.
Program FileForm;
Type
Component = Record
Key: Integer; { поле ключа }
Data: String[20] { поле даних}
End;
OurFile = File of Component;
Var
F, G : OurFile; X: Component;
Max, Min : Integer;
Function Correct(var U: Component): Boolean;
begin
Correct := (U.Key < Max) and (U.Key > Min)
end;
Begin
Read(Max, Min);
Assign(F, 'D:InpFile.dat'); {визначення значення F }
Assign(G, 'D:OutFile.dat'); {визначення значення G }
Reset(F); {файл F відкритий для читання}
Rewrite(G); {файл G відкритий для запису}
While not(Eof(F)) do begin {цикл читання F - запису G}
Read(F, X);
If Correct(X)
then Write(G, X)
end;
Close(G) {файл G закритий}
End.