Модулі, записи й файли. p>
Введення p>
Метою курсового проектування є придбання і закріплення навичок в організації обчислювальних процесів і програмування на алгоритмічній мові ПАСКАЛЬ. Основний акцент в роботі приділяється розгляду модульного програмування, використання процедур і функцій. Крім того, велика увага приділяється роботі з файлами, докладно розглядаються функції відкриття та закриття файлу. Отримані знання допоможуть у майбутньому більш ефективно підходити до процесу розробки програмного забезпечення. P>
Мова програмування Pascal був розроблений в 1968-1971 рр.. P>
Ніклаус Віртом в Цюріхському Інституті інформатики (Швейцарія).
Початкова мета розробки мови диктувалася необхідністю інструменту "для навчання програмуванню як систематичній дисципліні". Однак дуже скоро виявилася надзвичайна ефективність мови Pascal в самих різноманітних програмах, від вирішення невеликих задач чисельного характеру до розробки складних програмних систем - компіляторів, баз даних, операційних систем і т.п. До теперішнього часу Pascal належить до групи найбільш поширених і популярних у світі мов програмування. P>
Існують численні реалізації мови практично для всіх машинних архітектур; розроблено десятки діалектів і проблемно-орієнтованих розширень мови Pascal; навчання програмуванню та науково-технічні публікації в значній мірі базуються на цій мові. p>
Характеристика та особливості мови. Існує ряд об'єктивних причин, що обумовили видатний успіх мови Pascal. Серед них у першу чергу необхідно вказати наступні: p>
1. Мова в природній і елегантною формі відбив найважливіші сучасні концепції технології розробки програм: розвинена система типів, що орієнтація на принципи структурного програмування, підтримка процесу покрокової розробки. P>
2. Завдяки своїй компактності, концептуальній цілісності та ортогональності понять, а також вдалому початкового опису, запропонованому автором мови, Pascal виявився дуже легким для вивчення та освоєння. На противагу громіздким багатотомні описи таких мов, як PL/I, Cobol, FORTRAN, достатньо повний опис мови Pascal займає близько 30 сторінок тексту, а його синтаксичні правила можна розмістити на одній сторінці. P>
3. Незважаючи на відносну простоту мови, він виявився придатний для дуже широкого спектру додатків, у тому числі для розробки дуже великих і складних програм, наприклад операційних систем. P>
4. Pascal дуже технологічний для реалізації практично для всіх, у тому числі і нетрадиційних, машинних архітектур. P>
Стверджується, що розробка Pascal-транслятора "майже не перевищує за трудомісткістю гарну дипломну роботу випускника вузу". Завдяки цьому для багатьох ЕОМ існує декілька різних реалізації мови, що відображають ті чи інші практичні потреби програмістів. P>
Мова Pascal стандартизована в багатьох країнах. У 1983 році був прийнятий міжнародний стандарт (ISO 7185:1983). Готується (відомості на p>
1989 рік) стандарт РЕВ на Pascal. P>
Розглянемо основні особливості мови Pascal. P>
1. Pascal є традиційним алгоритмічним мовою програмування, що продовжує лінію Algol-60. Це означає, що програма на мові Pascal являє собою спеціально організовану послідовність кроків з перетворення даних, що приводить до вирішення деякої задачі. Це відрізняє Pascal від так званих непроцедурного мов типу Prolog, по суті представляють собою формалізму для запису початкових умов деякої задачі і синтезують рішення за допомогою вбудованих механізмів логічного висновку. P>
2. Мова Pascal містить зручні засоби для представлення даних. Розвинена система типів дозволяє адекватно описувати дані, що підлягають обробці, та конструювати структури даних довільної складності. Pascal є універсальна мова, що означає фіксацію типів змінних при їх описі, а також строгий контроль перетворень типів і контроль доступу до даних відповідно до їх типом (як на етапі компіляції, так і при виконанні програм). P>
3. Набір операторів мови Pascal відображає принципи структурного програмування і дозволяє записувати досить складні алгоритми в компактній формі та елегантною. P>
Pascal є процедурним мовою з традиційною блокової структурою і статично певними частинами дії імен. P>
Процедурний механізм поєднує в собі простоту реалізації та використання і гнучкі засоби параметризації. p>
4. Синтаксис мови досить нескладний. Програми записуються у вільному форматі, що дозволяє зробити їх наочними і зручними для вивчення. P>
Модуль p>
Модуль - це автономно компільовані програмна одиниця, що включає в себе різні компоненти розділу описів (типи, константи , змінні, процедури і функції) і, можливо, деякі виконуються оператори ініціації частини. У модулях Turbo PASCAL явно виділяється деяка "видима" інтерфейсна частину, в якій сконцентровані описи глобальних типів, констант і змінних, а також приводяться заголовки глобальних процедур і функцій. Поява об'єктів в інтерфейсній частини робить їх доступними для інших модулів і основної програми. Тіла процедур і функцій розташовуються у виконуваній частині модуля, яка може бути прихована від користувача. Модулі являють собою прекрасний інструмент для розробки бібліотек прикладних програм і потужний засіб модельного програмування. Важлива особливість модуля полягає в тому, що компілятор Turbo PASCAL розміщує їх програмний код в окремому сегменті. Модуль має наступну структуру: p>
UNIT; p>
INTERFACE p>
IMPLEMENTATION p>
BEGIN p>
END. P >
Тут UNIT - зарезервоване слово, починає заголовок модуля; p>
- ім'я модуля (повинне збігатися з ім'ям файлу, в який поміщений модуль); p>
IMPLEMENTATION - зарезервоване слово (виконання ), починає виконувану частину; BEGIN - зарезервоване слово, починає ініціюючу частина (частина модуля BEGIN необов'язкова); END - зарезервоване слово, ознака кінця модуля. p>
Заголовок модуля складається з зарезервованого слова UNIT і наступного за ним ім'я модуля . Для правильної роботи Turbo PASCAL і можливості підключення засобів, що полегшують розробку великих програм, це ім'я повинне збігатися з ім'ям файлу, в якому міститься вихідний текст модуля. Ім'я модуля служить для його зв'язку з іншими модулями й основною програмою. Цей зв'язок установлюється спеціальним додатком USES. Тут USES - зарезервоване слово; - список модулів, з якими встановлюється зв'язок, елементами списку є імена модулів, відокремлюються один від одного комами. Якщо оголошення USES використовується, то воно повинне відкривати розділ описів основної програми. Модулі можуть використовувати інші модулі. Пропозиція USES в модулях може випливати або відразу за зарезервованим словом p>
INTERFACE, або відразу за словом IMPLEMENTATION. Інтерфейсна частина відкривається зарезервованим словом INTERFACE. У цій частині містяться оголошення всіх глобальних об'єктів модуля (типів, констант, змінних та підпрограм), які повинні стати доступними основній програмі і (або) іншим модулів. При оголошенні глобальних підпрограм в інтерфейсній частині вказується тільки їхній заголовок. P>
Оголошення підпрограм в інтерфейсній частини автоматично супроводжується їхньою компіляцією з використанням далекої моделі пам'яті. P>
Таким чином, забезпечується доступ до підпрограм з основної програми й інших модулів. Порядок появи різних розділів оголошень і їх кількість може бути довільним. Частина, що виконується починається зарезервованим словом IMPLEMEN-TATION і містить опису підпрограм, оголошених в інтерфейсній частини. У ній можуть оголошуватися локальні для модуля об'єкти - допоміжні типи, константи, змінні і блоки, а також мітки, якщо вони використовуються в ініціації частини. Опису підпрограми, оголошеної в інтерфейсній частині модуля, що виконується в частині повинен передувати заголовок, у якому можна опускати список формальних змінних (і тип результату для функції), так як вони вже описані в інтерфейсній частини. Але якщо заголовок програми приводиться в повному вигляді, тобто, зі списком формальних параметрів, то він повинен збігатися із заголовком, оголошеним в інтерфейсній частини. Ініціює частину завершує модуль. Вона може бути відсутнім разом з початківцем її словом BEGIN або бути порожній - тоді за BEGIN відразу слід ознака кінця модуля p>
(слово END і наступна за ним точка). У ініціації частини розміщуються виконуються оператори, які містять деякий фрагмент програми. Ці оператори виконуються до передачі керування основній програмі і звичайно використовуються для підготовки її роботи. Наприклад, у них можуть ініціюватися змінні, відкриватися потрібні файли, можуть встановлюватися зв'язки з іншими ПК по комунікаційних каналах і т.п. p>
Не рекомендується робити ініціюючу частину порожньою, краще її опустити: порожня частина містить порожній оператор, якому буде передане керування при запуску програми. p>
У середовищі Turbo PASCAL є засоби, що управляють засобом компіляції модулів і полегшують розробку великих програмних проектів. Зокрема, визначені три режими компіляції: COMPILE, p>
MAKE і BUILD. Режими відрізняються тільки способами зв'язку компіляції модуля й основної програми з іншими модулями, оголошеними в додатку USES. При компіляції модуля або основної програми в режимі COMPILE компілюється тільки файл, що знаходиться в активному вікні. За умовчанням передбачається, що використовувані модулі вже відкомпілювати і результати поміщені в однойменні файли з розширенням. TPU; файл з розширенням. TPU (від англійського Turbo p>
Pаscal Unit) створюється в результаті компіляції модуля. У режимі МАКЕЄВ компілятор перевіряє наявність TPU-файлів для кожного оголошеного модуля.файл із вихідним текстом модуля. Якщо PAS-файл знайдений, то відбувається його компіляція. P>
Крім того, в цьому режимі система стежить за можливими змінами вихідного тексту будь-якого використовуваного модуля. Якщо в PAS-файл p>
(вихідний текст модуля) внесені які-небудь зміни, то незалежно від того, чи є вже в каталозі відповідний TPU-файл чи ні, система здійснює його компіляцію перед компіляцією основної програми. Якщо зміни внесені в інтерфейсну частину модуля, то будуть перекомпіліровать також і всі інші модулі, які звертаються до нього. Режим МАКЕЄВ істотно полегшує процес розробки великих програм з безліччю модулів. У режимі BUILD існуючі TPU-файли ігноруються, і система намагається відшукати й компілювати відповідний PAS-файл для кожного оголошеного в пропозиції USES модуля. Після компіляції в режимі BUILD програміст може бути впевнений у тому, що враховані всі зроблені ним зміни в будь-якому з модулів. P>
Підключення модуля до основної програми і їхня можлива компіляція здійснюється в порядку їх оголошення в пропозиції USES. p>
При переході до чергового модуля система попередньо відшукує всі модулі, на які він посилається. Посилання модулів один на одного можуть утворювати деревоподібну структуру будь-якої складності, однак забороняється явне або непряме обіг модуля до самого себе. Справа в тому, що Turbo PASCAL дозволяє посилання на частково відкомпілювалися модулі, що приблизно відповідає випереджальному опису підпрограми. Якщо інтерфейсні частини будь-яких двох модулів незалежні, Turbo PASCAL зможе ідентифікувати всі глобальні ідентифікатори в кожному з модулів, після чого відкомпілює тіла модулів звичайним способом. P>
Запис p>
Запис - це структура даних, що складається з фіксованого числа компонентів, які називаються полями запису. На відміну від масиву, компоненти (поля) запису можуть бути різного типу. Щоб можна було посилатися на той чи інший компонент записи, поля іменуються. P>
Структура оголошення типу запису така: p>
= RECORD END p>
Тут - правельний індіфікатор;
RECORD, END - зарезервовані слова (запис, кінець); p>
- список полів; є послідовністю розділів записи, між якими ставиться крапка з запитом. p>
Кожен розділ запису складається з одного або декількох індіфікаторов полів, відокремлюваних один від одного комами. За індіфікатором ставиться двокрапка і опис типу поля наприклад: p>
type birthday = record day, month: byte; year: word: end; var a, b: Birthday; p>
. . . . . . . . p>
У цьому прикладі тип Birthday є запис з полями DAY, MONTH, і p>
YEAR; змінні А і В містять записи типу Birthday. p>
Як у масиві , значення змінних типу запису можна привласнювати іншим змінним того ж типу, наприклад: a: = b; p>
До кожного з компонентів записи можна отримати доступ, якщо використовувати складене ім'я, тобто вказати ім'я змінної, потім крапку і ім'я поля: a.day: = 27; b.year: = 1991; p>
Щоб спростити доступ до полів запису, використовується оператор приєднання WITH: p>
WITH DO p>
Тут WITH, DO - ключові слова (с, робити); p>
- ім'я змінної типу запис, за яким, можливо, слід список вкладених полів; p> < p> - будь-який оператор Турбо Паскаля. p>
Наприклад: with c.bd do month: = 9; p>
Імена полів повинні бути унікальними в межах тієї записи, де вони оголошено, однак, якщо записи містять поля - записи, тобто вкладена одна в іншу, імена можуть повторюватися на різних рівнях вкладеності. p>
Файли p>
Під файлом розуміється іменована область пам'яті на магнітному носії, яка використовується для довготривалого зберігання деякої логічно пов'язаної інформації. У цю область зовнішньої пам'яті можна як помістити певні дані, так і витягти їх з неї. Ці дії мають спільну назву - ввід-висновок. P>
Програмування доступу до файлу у мові Turbo Pascal починається з опису файлової змінної (змінної файлового типу). Цей опис будується за допомогою службового слова file, після якого p>
(після службового слова of) може бути вказаний тип окремих елементів файла, наприклад: var p>
F: file of integer; p>
При необхідності можна окремо визначити деякий файловий тип, яким надалі користуватися при описі файлових змінних: type p>
RecordFile = file of record p>
А, В: real; end ; var p>
Fl, F2: RecordFile; p>
Дуже важливо розрізняти власне файл (область пам'яті на магнітному носії з деякою інформацією) і змінну файлового типу в деякій Turbo Pascal-програмі. Вважається, що файлова змінна є представником деякого дискового файлу в програмі. Для того, щоб реалізувати доступ до файлу па магнітному диску, програма повинна зв'язати його з файлової змінної. Для цього необхідно зіставити змінну з ім'ям файлу. Це ім'я представляється у вигляді рядка, що містить повне ім'я файлу і, можливо, ланцюжок осяжний каталогів та позначення дисководу. Така рядок носить назву маршруту (або колії) до файлу і формується за загальними правилами MS-DOS. P>
Зв'язування маршруту та файлової змінної проводиться стандартною процедурою Assign, якій передаються два параметри: ім'я змінної файлового типу та рядок з ім'ям (маршрутом) дискового файлу, наприклад: p>
Assign (F, 'з: booksbook4test3. разів'); p>
Крім маршруту, у другому параметрі може бути вказано умовне p> < p> (символічне) позначення деякого "псевдофайла" MS-DOS, тобто файлу, пов'язаного з конкретним фізичним пристроєм. Допускаються імена, в основному збігаються з прийнятими в MS-DOS позначеннями p>
( 'con' - консоль, тобто екран дисплея і/або клавіатура, 'lpti' або p>
'prn' - друкуючий пристрій і т. д.). p>
До тих пір, поки файлова змінна не пов'язана з яким-небудь дисковим файлом, ніякі операції з нею в програмі неможливі, p>
Зауважимо, що можна пов'язати файлову змінну з ще не існуючим дисковим файлом. Це може бути виправдана для випадку подальшого створення Turbo Pascal-програмою файлу з даними ім'ям за допомогою деякої системної процедури. P>
Після того, як файлова змінна з допомогою процедури Assign пов'язана з конкретним дисковим файлом, можна виконати будь-яку допустиму операцію з ним. Тут розглянемо дві операції загального характеру, що дозволяють перейменовувати і знищувати існуючі дискові файли. Такі операції виконуються системними підпрограмами p>
Rename і Erase з наступними специфікаціями: p>
Rename (var f; nevname: string); p>
Erase (var f);
Основним параметром цих процедур є файлова мінлива p>
(вона може ідентифікувати файл будь-якого типу, і до неї повинна була бути раніше застосована процедура Assign), а процедурою Rename додатково передається нове ім'я файлу. Дія зазначених процедур грунтується на відповідних DOS-функціях і функ?? іонально еквівалентно командам ren і del командного процесора. p>
Висновок p>
Отриманий мною практичний досвід стосовно до програмування на ПАСКАЛЬ дозволяє використовувати ефективне модульне програмування. Крім того, вивчивши представлений в курсовому проектуванні матеріал, я придбав практичні навички використання процедур, функцій. Поряд з цим я навчився правильно використовувати файлові функції операційної системи MS-DOS, що є одним з основних питань програмування. P>