- •Поняття алгоритму та його основні властивості.
- •Поняття двовимірного масиву, його означення на мові Pascal.
- •Способи опису алгоритму.
- •Алгоритмічна мова
- •Базові операції обробки двовимірного масиву на мові р.
- •Алгоритмічна структура розгалуження
- •Сортування двовимірного масиву
- •Алгоритмічна структура повторення
- •Поняття рядка та оголошення змінних рядкового типу на мові Pascal
- •Структура програми на мові Pascal
- •Операції над рядками та рядкові вирази мови Pascal
- •Прості типи даних у мові Pascal
- •Запис та його оголошення на мові Pascal
- •Константи мови Pascal
- •Доступ до компонентів та операції над запиcами мови Pascal
- •Змінні мови Pascal
- •Масиви записів мови Pascal
- •Арифметичний вираз мови Pascal
- •Опис та виконання метки у мові Pascal
- •Оператор присвоєння мови Pascal
- •Логічний вираз мови Pascal
- •Процедура введення даних мови Pascal
- •Цикл із передумовою while мови Pascal
- •Процедура виведення даних мови Pascal
- •Цикл з післяумовою repeat мови Pascal
- •Команда вибору із двох альтернатив мови Pascal
- •Типи файлів й оголошення файлових змінних мови Pascal
- •Вкладеність конструкцій вибору мови Pascal
- •Установка відповідностей між логічним і фізичним файлами мови Pascal
- •Операторний блок мови Pascal
- •Відкриття і закриття файлів мови Pascal
- •Команда поліваріантного вибору мови Pascal
- •Зчитування і запис текстових файлів мови Pascal
- •Цикл із лічильником for у мові Pascal
- •Стандартні функції мови Pascal
- •Процедури користувача мови Pascal
- •Поняття одновимірного масиву та його визначення у мові Pascal
- •Функції користувача мови Pascal
- •Базові операції обробки одновимірного масиву мови Pascal
- •Сортування одновимірного масиву мови Pascal
- •Оператор безумовного переходу у мові Pascal
Вкладеність конструкцій вибору мови Pascal
Гілки деякого розгалуження можуть містити інші розгалуження. У даному розділі для простоти розглянемо лише той випадок, коли одне розгалуження вкладене до гілки else іншого. Зобразимо таку алгоритмічну конструкцію у вигляді блок-схеми (рис. 3.1) та наведемо синтаксис відповідного фрагменту Pascal-програми.
if <умова1> then <оператор1> else if <умова2> then <оператор2> else <оператор3>;
Зауважимо, що піраміди вкладених розгалужень завжди можуть бути реалізовані послідовними операторами розгалуження за рахунок ускладнення умов.
Але слід зазначити, що вкладені умовні оператори працюють значно швидше, ніж серія умовних операторів у скороченій формі, завдяки тому, що робота всієї конструкції завершується автоматично після виконання однієї з умов. Додаткове прискорення може бути досягнуте за рахунок запису умов, що перевіряються частіше, нагорі піраміди вкладених розгалужень. Приклад 3.1 демонструє застосування вкладених розгалужень. На рис. 3.2 зображено блок-схему алгоритму розв'язання розглянутої в прикладі задачі, а на рис. 3.3 — результати роботи програми, що реалізує цей алгоритм.
Установка відповідностей між логічним і фізичним файлами мови Pascal
Файл будь-якого типу може бути оброблений у програмі лише після того, як певна файлова змінна буде зв'язана з певним фізичним файлом. Це зв'язування виконується за допомогою процедури Assign, що має такий синтаксис:
Аssіgn(<файлова змінна>;<рядковий вираз>);
Значенням рядкового виразу має бути ім'я фізичного файла. Формат цього імені визначається операційною системою. Нагадаємо, що повне ім'я файла в операційних системах MS-DOS та Windows має такий вигляд:
<ім'я логічного диска>:\<ім'я каталогу 1>\<ім'я каталогу 2>\...\ <ім'я файла>.<розширення>
Файл має знаходитися в робочому каталозі програми, якщо в його імені не вказано шлях до нього. Якщо ім'я файла задається порожнім рядком, то файлова змінна зв'язується зі стандартними файлами і nput та output, про які йтиметься нижче.
Виклик процедури Assign має передувати викликам усіх інших процедур обробки файлів.
Операторний блок мови Pascal
Операторний блок, або складений оператор, — це послідовність операторів, Що розпочинається ключовим словом begin та завершується ключовим словом end (слова begin та end інколи називають операторними дужками). Операторний блок може перебувати в будь-якому місці програми, де синтаксисом мови припускається наявність оператора. Синтаксис операторного блоку має такий вигляд:
begin <оператор1>; ......... <оператор2>; end;
Усередині операторного блоку можуть міститися довільні оператори, у тому числі й складені, вони виконуються у порядку запису.
Відкриття і закриття файлів мови Pascal
Фізичний файл, із яким була зв'язана файлова змінна, може перебувати в одному з таких станів.
Файл відкритий для читання: читання даних із файла дозволено, а запис до файла — заборонено.
Файл відкритий для запису: дозволений лише запис даних до файла.
Файл відкритий для читання і запису: дозволено як читання, так і запис до файла. У цьому стані не можуть перебувати текстові файли.
Файл закритий: із файлом не можна виконувати жодних дій.
Операції відкриття та закриття файлів виконуються відповідними процедурами, які розглянемо детальніше.
Відкриття файла для читання або для читання і запису виконується процедурою Reset, для якої є два варіанти синтаксису:
Reset(<файлова змінна>); Reset(var <файлова змінна> : File; <розмір запису> : Word);
Перший варіант процедури використовується для текстових і типізованих файлів, другий — для нетипізованих. Текстові файли процедура Reset відкриває лише для читання, а бінарні файли — для читання і запису.
Параметр <розмір запису> використовується під час обміну даними з нети-пізованим файлом. Розмір запису нетипізованого файла впливає на швидкість обміну даними між диском і пам'яттю. Найбільшу швидкість можна забезпечити, якщо задати розмір запису рівним розміру кластера. Нагадаємо, що кластер складається з фіксованого числа секторів дискового носія. Кластер може бути прочитаний або записаний протягом одного звернення до диска.
Із кожним відкритим файлом зв'язаний файловий покажчик, що вказує на той компонент файла, над яким буде виконано наступну операцію зчитування або запису. У разі виконання такої операції файловий покажчик зсувається на наступний компонент. Під час відкриття файла файловий покажчик встановлюється на початок файла, тобто на компонент із порядковим номером 0.
В результаті спроби відкрити файл, якого немає на диску, виникне помилка Error #2: File not found (Файл не знайдено). Щоб запобігти перериванню програми внаслідок спроби відкрити неіснуючий файл, використовують директиву компілятора {$I-}. Вона вимикає автоматичний контроль помилок введення та виведення. Директиву {$I+} використовують для ввімкнення такого контролю. Якщо контроль помилок введення-виведення вимкнено, то для перевірки наявності файла на диску можна використовувати функцію IOResult. Коли файл існує на диску, функція IOResult повертає значення 0.
Відкриття файла для запису або читання і запису здійснюється процедурою Rewrite, для якої існує два варіанти синтаксису:
Rewrite(<файлова змінна>); Rewrite(var <файлова змінна> : file; <розмір запису> : Word);
Перший варіант процедури Rewrite використовується для текстових і типізованих файлів, другий — для нетипізованих . Параметрами процедури є файлова змінна та розмір запису нетипізованого файла. Текстові файли процедура Rewri te відкриває лише для запису, а бінарні — для читання і запису.
Якщо аргумент процедури Rewrite зв'язаний з іменем неіснуючого файла, то файл з таким іменем буде створений. Якщо цю процедуру використати для відкриття вже наявного файла, то вміст файла буде видалено та створено новий порожній файл. Процедура Rewrite встановлює файловий покажчик на початок файла.
Для дописування рядків до вже наявного текстового файла його потрібно відкрити за допомогою процедури Append:
Арреnd(<файлова змінна>);
Після виклику цієї процедури файл стає доступним тільки для запису, а файловий покажчик встановлюється в кінець файла. Отже, всі рядки зберігаються, а нові символи дописуватимуться після наявного тексту.
Файли закриваються процедурою Close:
Close(<файлова змінна>);
Процедура СІ ose забезпечує збереження всіх компонентів логічного файла у фізичному файлі. Якщо в логічний файл були записані певні дані, але його не було закрито, запис у відповідний фізичний файл міг здійснитися не повністю. Після закриття файла зв'язок файлової змінної із фізичним файлом не порушується, і файл повторно може відкриватися без додаткового виклику процедури Assign.
