Здавалка
Главная | Обратная связь

Методичні рекомендації.

ЛАБОРАТОРНА РОБОТА №18

 

Тема: Використання процедур і функцій модуля CRT

Мета: Одержання практичних навичок опису модулів та їх використання в програмах на мові програмування Паскаль.

Теоретична частина.

Модуль (UNIT) – програмна одиниця, текст якої компілюється незалежно (автономно). Вона включає означення констант, типів даних, змінних, процедур та функцій, що є доступними для використання в основних визиваючих програмах. Однак їх внутрішня структура (тексти програм і т.п.) є закритою для користувача.

Розглянемо структура модуля. До цього часу ми користувались вже готовими модулями Wincrt, Windos. Сам по собі модуль складається з наступних частин:

UNIT Заголовок,

INTERFACE Інтерфейсна частина,

IMPLEMENTATON Реалізаційна частина,

BEGIN

Ініціалізаційна частина.

END;

 
 

 

 


Заголовок модуля мало відрізняється від заголовка програми. В модулі замість зарезервованого слова “PROGRAM” використовується слово “UNIT”. Однак є одна особливість у виборі імені модуля. Вибираючи ім’я програми, ми намагаємося, щоб воно не співпадало із власними іменами об’єктів (процедур, функцій тощо) всередині програми. У модулі до цієї вимоги додається ще вимога співпадання імені модуля з іменем файла, в якому він зберігається.Тому ім’яодуля не може складатисябільш ніж восьми символів.

Новою за відношенням до програми є в модулі інтерфейсна частина (INTERFACE). В цій частині описуються (декларуються) всі константи, типи даних і змінні, процедури і функції, доступні в модулі для використання зовнішніми програмами.Ця частина несе всю інформацію, необхідну для використання процедур та функцій, означених у модулі.

В інтерфейсній частині є можливість зробити доступними для використання існуючі готові модулі, вказавши їх ім’я в USES директиві.

Слідом за оператором USES в інтерфейсній частині описуються доступні ззовні й необхідні для описаних процедур та функцій означення типів даних, констант та змінних.

Всі процедури та функції, що є доступними для загального використання та означені в даному модулі, повинні бути описаними в інтерфейсній частині своїм рядком-заголовком з вказуванням типів параметрів. Сам текст програми цих процедур та функцій знаходиться (з дублем їх заголовка) в реалізаційній частині.

Немає необхідності згадувати в інтерфейсній частині всі процедури та функції, що використовуються і реалізаційній частині. На практиці можлива ситуація, коли інтерфейсна частина взагалі нічого не містить, так як показано у прикладі “Leer.pas”, що містить модуль “Leer”. цей модуль, звичайно, не несе змістового навантаження, але за формою цілком коректний та дієздатний.

 
 
UNIT Leer; {LEER.PAS – TP версія після 5.0} INTERFACE {Ця частина пуста.} IMPLEMENTATION USES WinCrt; BEGIN ClrScr; END.

 

 


Реалізаційна частина (IMPLEMENTATION) – це частина, в якій означуються процедури та функції. Так саме, як і в звичайній програмі, тут можна означити глобальні (для модуля) змінні, типи даних та константи разом з означення процедур та функцій. Означені тут типи даних та структури даних є недосяжними з зовні й можуть використовуватись для своїх потреб лише програмами, що входять до реалізаційної частини.

Так само, як і інтерфейсна частина, реалізаційна частина може бути пустою. Таку можливість часто використовують, коли необхідно означити деякі загальні для багатьох програм типи даних, константи та змінні. Маючи таке означення в рамках деякого проекту, легко включити його в усі програми (головну та залежні) простою директивою USES.

Ініціалізаційна частина модуля відповідає головній програмі – BEGIN .. END. Наведені тут оператори виконуються першими, тобто ще до тієї головної програми, в яку включено даний модуль.

Для ілюстрації повернемось до нашого прикладу “Leer”-модулю. Він містить в своїй ініціалізаційній частині оператор “ClrScr”, який взято в операторні дужки “BEGIN … END”. При виконанні програми “TUTWENING.PAS”

 
 
PROGRAM TutWenig; { TUTWENING.PAS Ілюструє правило виконання операторів ініціалізаційної частини включеного модуля ПЕРЕД операторами, що входять в головну програму.}   USES Leer;   BEGIN WriteLn(‘Hallo!!!’); END.

 

 


Спершу відбудеться ініціалізація включеного сюда модуля “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 Все права принадлежат авторам размещенных материалов.