Методичні рекомендації.
ЛАБОРАТОРНА РОБОТА №18
Тема: Використання процедур і функцій модуля CRT Мета: Одержання практичних навичок опису модулів та їх використання в програмах на мові програмування Паскаль. Теоретична частина. Модуль (UNIT) – програмна одиниця, текст якої компілюється незалежно (автономно). Вона включає означення констант, типів даних, змінних, процедур та функцій, що є доступними для використання в основних визиваючих програмах. Однак їх внутрішня структура (тексти програм і т.п.) є закритою для користувача. Розглянемо структура модуля. До цього часу ми користувались вже готовими модулями Wincrt, Windos. Сам по собі модуль складається з наступних частин: UNIT Заголовок, INTERFACE Інтерфейсна частина, IMPLEMENTATON Реалізаційна частина, BEGIN Ініціалізаційна частина. END;
Заголовок модуля мало відрізняється від заголовка програми. В модулі замість зарезервованого слова “PROGRAM” використовується слово “UNIT”. Однак є одна особливість у виборі імені модуля. Вибираючи ім’я програми, ми намагаємося, щоб воно не співпадало із власними іменами об’єктів (процедур, функцій тощо) всередині програми. У модулі до цієї вимоги додається ще вимога співпадання імені модуля з іменем файла, в якому він зберігається.Тому ім’яодуля не може складатисябільш ніж восьми символів. Новою за відношенням до програми є в модулі інтерфейсна частина (INTERFACE). В цій частині описуються (декларуються) всі константи, типи даних і змінні, процедури і функції, доступні в модулі для використання зовнішніми програмами.Ця частина несе всю інформацію, необхідну для використання процедур та функцій, означених у модулі. В інтерфейсній частині є можливість зробити доступними для використання існуючі готові модулі, вказавши їх ім’я в USES директиві. Слідом за оператором USES в інтерфейсній частині описуються доступні ззовні й необхідні для описаних процедур та функцій означення типів даних, констант та змінних. Всі процедури та функції, що є доступними для загального використання та означені в даному модулі, повинні бути описаними в інтерфейсній частині своїм рядком-заголовком з вказуванням типів параметрів. Сам текст програми цих процедур та функцій знаходиться (з дублем їх заголовка) в реалізаційній частині. Немає необхідності згадувати в інтерфейсній частині всі процедури та функції, що використовуються і реалізаційній частині. На практиці можлива ситуація, коли інтерфейсна частина взагалі нічого не містить, так як показано у прикладі “Leer.pas”, що містить модуль “Leer”. цей модуль, звичайно, не несе змістового навантаження, але за формою цілком коректний та дієздатний.
Реалізаційна частина (IMPLEMENTATION) – це частина, в якій означуються процедури та функції. Так саме, як і в звичайній програмі, тут можна означити глобальні (для модуля) змінні, типи даних та константи разом з означення процедур та функцій. Означені тут типи даних та структури даних є недосяжними з зовні й можуть використовуватись для своїх потреб лише програмами, що входять до реалізаційної частини. Так само, як і інтерфейсна частина, реалізаційна частина може бути пустою. Таку можливість часто використовують, коли необхідно означити деякі загальні для багатьох програм типи даних, константи та змінні. Маючи таке означення в рамках деякого проекту, легко включити його в усі програми (головну та залежні) простою директивою USES. Ініціалізаційна частина модуля відповідає головній програмі – BEGIN .. END. Наведені тут оператори виконуються першими, тобто ще до тієї головної програми, в яку включено даний модуль. Для ілюстрації повернемось до нашого прикладу “Leer”-модулю. Він містить в своїй ініціалізаційній частині оператор “ClrScr”, який взято в операторні дужки “BEGIN … END”. При виконанні програми “TUTWENING.PAS”
Спершу відбудеться ініціалізація включеного сюда модуля “Leer”, тобто виконається оператор “ClrScr”, й екран очиститься.далі розпочнеться виконання головної програми, й на екран буде видано повідомлення “Hallo!!!”. Зауважимо, що при компіляції модуля генерується файл з розширенням .TPU Постановка задачі Створити програму з використанням модуля згідно заданої умови. ЗМIСТ ЗВIТУ. 1) Постановка задачi. 2) Опис модуля. 3) Текст програми i результати її виконання. 4) Висновки.
Методичні рекомендації. 1) У програмі має бути описано модуль назва якого повинна співпадати з назвою файла в якому він зберігається. Назва модуля і файла задається в умові задачі. 2) В інтерфейсній частині мають бути описані процедури та функції, доступні для головної програми. 3) В реалізаційній частині мають бути описані всі процедури та функції необхідні для виконання завдання. 4) Ініціалізаційна частина повинна містити оператори очистки екрану та виведення інформації про номер лабораторної роботи, тему та автора. 5) Основна програма повинна містити звернення до модуля і виклик процедур та функцій описаних в інтерфейсній частині модуля. 6) У якості прикладу приводимо текст програми з використанням модуля ”EXAMPLE”. UNIT Example; INTERFACE TypeSTR_int=string[60]; Procedure ClrError; {Знищує раніше виведене повідомлення про помилки} Procedure Error(message:Srt_int); {Виводить на екран повідомлення про помилки} Function Ganzzahl:integer; {Виводить ціле число. Введення здійснюється у форматі дійсного числа з метою перевірки належності введеного числа діапазону значень, допустимих для цілих чисел. При незадовільному результаті такої перевірки введене значення відкидається} Procedure GetSrt(var Instr:string); {Введення рядка – альтернатива процедурі Readln} Procedure InKey(var ch:char); {Введення кода клавіші} IMPLEMENTATION Uses wincrt; Const Beep=^G; {Генерація звуку при виведенні повідомлення} F_x=1; {Координата позиції по осі Х} F_y=25; {Координата позиції по осі У, в яку виводиться повідомлення про помилки} Var F:integer; Procedure Error(message:str_int); Begin GotoXY(F_x,F_y); Write(‘Помилка! :’,beep,message); CLREOLn; {Очистка до кінця рядка} End; Procedure CLRError; Begin GotoXY(F_x,F_y); CLREOLn; End; Function Ganzzahl:integer; Var real_zahl:real; Task:string; X_position,Y_position:byte; Procedure OwerFlow; Begin Error(‘Введена величина лежить за межами множини цілих чисел!’); F:=1; {Код помилки >0} End; Procedure BruchZahl; {Реакція на наявність коми чи недопустимих символів у введеному рядку} Begin Error(‘Введіть ціле число!’); F:=1; end; Procedure Zahl_List; Begin GotoXY(X_Position, Y_Position); CLRЕOLn; Readln(Task); Val(Task,Real_Zahl,F); Writeln; If (Real_Zahl<=32768.5) or (Real_Zahl>=32768.5) then OverFlo Else if (Frac(Real_Zahl)<>0) or (F>0) then BruchZahl Else ClrError; End;
Begin X_Position:=WhereX; Y_Position:=WhereY; {Збереження координат курсора} repeat Zahl_List until f=0; {Коректна величина перетворюється в ціле число шляхом заокруглення} Ganzzahl:=round(Real_Zahl); CLRError; {Знищення раніше виведеного повідомлення} GotoXY(1,y_position+1); {Перехід на початок наступного рядка} End;
Procedure GetStr; Var I,z,s:integer; Begin INSTR[1]:=#0; If z>24 then z:=24; S:=WhereX; Repeat GotoXY(s,z); Readln(Instr) Until (instr[1]<>#0); End; Procedure Inkey (var Ch:Char); Begin Repeat Ch:=#255; If KeyPressed then begin Ch:=readkey; If ch=#0 then ch:=readkey; End; Until ch<>#255 End;
BEGIN {Ініціалізаційна частина} CLRSCR; Writeln(‘Лабораторна робота №5’); Writeln(‘Модулі’); Writeln(‘Виконав: П.І.П.); END.
Program Unit_Exapmle; Uses wincrt,example; Var G_zahl:integer; Begin GotoXY(1,5); Writeln(‘Введіть ціле число!’); GotoXY(2,7); G_Zahl:=ganzzahl; GotoXY(1,9); Writeln(G_Zahl); End. 5.Контрольні питання. 1. Що називають модулем?
2. Яка структура модуля?
3. Які правила опису заголовку модуля?
4. Яке призначення інтерфейсної частини модуля?
5. Яке значення реалізаційної частини модуля?
6. В яких файлах зберігаються модулі?
7. Як викликати модуль в основній програмі? Варіанти завдань. 1. Cтворити програму з використанням модуля “LIN.TPU”, який містить процедуру з параметрами а1,b1,c1, a2,b2,c2, яка обчислює координати Х1,У1 точки перетину двох прямих заданих рівняннями a1x+b1y=c1 i a2x+b2y=c2. Якщо прямі паралельні або співпадають – вивести необхідні повідомлення. 2. Cтворити програму з використанням модуля “PLOS.TPU”, який містить процедуру з параметрами а1,b1,c1,d1,a2,b2,c2, яка обчислює координати Х1,У1,Z1 точки перетину площини заданої рівнянням a1x+b1y+с1z=d1 i прямої a2x+b2y=c2. Якщо прямя не перетинає або належить площині – вивести необхідні повідомлення. 3. Cтворити програму з використанням модуля “PERIMETR.TPU”, який містить процедуру визначення периметра n-кутника, координати вершин якого передаються у якості параметра у вигляді двомірного масиву, що містить координати вершин хі та yi. 4. Cтворити програму з використанням модуля “Max3d.TPU”, який містить процедуру, що визначає максимальну відстань між двома точками із деякої сукупності точок 3-мірного простору. Сукупність точок задається у вигляді масиву точок, що містять координати точки xi,yi,zi. 5. Cтворити програму з використанням модуля “Matrix.TPU”, який містить процедуру, яка обчислює добуток суми максимальних елементів кожного рядка числової матриці mxn і суми максимальних елементів кожного стовпця. 6. Cтворити програму з використанням модуля “Matix2.TPU”, який містить процедуру, яка обчислює суму добутків мінімальних елементів кожного рядка числової матриці m1xn1 i добутку мінімальних елементів кожного стовпця матриці m2хn2. 7. Cтворити програму з використанням модуля “DateD.TPU”, який містить процедуру, що обчислює скільки днів пройшло з початку століття (тисячоліття) до вказаної дати: день,місяць,рік. 8. Cтворити програму з використанням модуля “TEN.TPU”, який містить процедуру, обчислення значення цілого числа по заданому рядку символів, що є записом цього числа в десятковій системі числення. 9. Cтворити програму з використанням модуля “BI.TPU”, який містить процедуру, обчислення значення цілого числа по заданому рядку символів, що є записом цього числа в двійковій системі числення. 10. Cтворити програму з використанням модуля “СHARS.TPU”, який містить процедуру побудови рядка символів, що є записом заданого дійсного числа в десятковій системі числення, рядок повинен вміщати вказану кількість цифр після коми. 11. Cтворити програму з використанням модуля “FILES.TPU”, який містить процедуру обміну компонент дійсних файлів f1,f2,f3,f4,f5 у відповідності до схеми: f1 f2 f3 f4 f5 f3 f4 f5 f2 f1 тобто компоненти файла f1 переписуються в файл f3, компоненти файла f2- в f4 і т.д. Дозволяється використовувати один допоміжний файл h. 12. Cтворити програму з використанням модуля “START.TPU”, який містить процедуру додання у символьний файл f в його початок символи s,t,a,r,t (якщо це неохідно, використати додатковий файл g). 13. Cтворити програму з використанням модуля “END.TPU”, який містить процедуру додання у cимвольний файл f в його кінець символи е,n,d (якщо це неохідно, використати додатковий файл g). 14. Cтворити програму з використанням модуля “POLI.TPU”, який містить процедуру що визначає чи є введене ціле число поліндромом. 15. Cтворити програму з використанням модуля “MAXMIN.TPU”, який містить процедуру що визначає мінімальну і максимальну суму цифр чисел, що лежать в інтервалі від А до В. 16. Cтворити програму з використанням модуля “DRIB.TPU”, який містить процедуру яка заданий дріб виду M/N приводить до нескорочуваного вигляду. 17. Cтворити програму з використанням модуля “DIL.TPU”, який містить процедуру розкладу числа А на прості дільники з підрахунком скільки разів зустрічається один і той же простий дільник, а також обчислити їх суму. 18. Cтворити програму з використанням модуля “PARA.TPU”, який містить процедуру що представляє довільне натуральне число Р(Р>7) у вигляді Р=А*3+В*5 на проміжку від А до В. 19. Cтворити програму з використанням модуля “Year.TPU”, який містить процедурe друку календаря 2001 року. 20. Cтворити програму з використанням модуля “Moon.TPU”, який містить процедуру, що обчислюе кiлькicть днiв мiж двома датами.
©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|