Պասկալ. Պատվերով մոդուլներ. Փլագիններ - Pascal Basic գրաֆիկական ռեժիմներ և գործառույթներ

Մոդուլներ ՊասկալումԾրագրի հիմնական մասի հետ կապված դրանք նման են ենթածրագրերի (ընթացակարգեր և գործառույթներ): Բայց ըստ սահմանման, դրանք անկախ ծրագրեր են, որոնց ռեսուրսները կարող են օգտագործվել այլ ծրագրերում: Բացի այդ, մոդուլների նկարագրությունը տեղի է ունենում կանչող հավելվածից դուրս, բայց առանձին ֆայլում, ուստի մոդուլը առանձին կազմված ծրագիր է: Կազմված մոդուլի ֆայլը (որը դուք պետք է օգտագործեք) կունենա ծրագրավորման միջավայրի կողմից տրամադրված ընդլայնում (օրինակ՝ .tpu, .ppu, .pcu):

Մոդուլները ստեղծվում են, որպես կանոն, կոդի կոմպակտությունն ապահովելու համար, որոնց մասին պետք է հոգ տան մեծ նախագծերը։ Հարկ է նաև նշել, որ մոդուլների օգտագործումը որոշակի իմաստով վերացնում է հիշողության հատվածավորման սահմանափակումը, քանի որ յուրաքանչյուր մոդուլի կոդը գտնվում է առանձին հատվածում:

Մոդուլի կառուցվածքը հետևյալն է.

միավոր<имя модуля>;
Ինտերֆեյս
<интерфейсная часть>
Իրականացում
<исполняемая часть>
Սկսել
<инициализация>
վերջ.

Մոդուլի անվանումը (միավոր)

Հիմնաբառին հետևող մոդուլի անվանումը միավոր, պետք է համապատասխանի ֆայլի անվանմանը (առանց .pas), որը պարունակում է իր կոդը։ Բացի այդ, օգտագործելով անունը, մոդուլը միացված է մեկ այլ մոդուլի կամ հիմնական ծրագրին: Դա անելու համար դուք պետք է նշեք ծառայության բառը օգտագործում է, և նշեք ստորակետերով առանձնացված պլագինների ցանկը՝

օգտագործում է<список имен модулей>;

Ինտերֆեյսի մաս (ինտերֆեյս)

Ինտերֆեյսի հատվածը նկարագրում է օբյեկտների վերնագրերը, որոնց հասանելիություն կունենան այլ մոդուլներ և ծրագրեր: Սրանք հաստատուններ, տեսակներ, փոփոխականներ և ենթածրագրեր են: Օրինակ, այսպես կարող է տեսք ունենալ Search մոդուլի ինտերֆեյսի մասը, որը պարունակում է զանգվածի տարրերի որոնման ալգորիթմներ։

1
2
3
4
5
6

միավորի որոնում;
Ինտերֆեյս

vars: լար

Այս մոդուլը հայտարարելու համար անհրաժեշտ է ծրագրում նշել դրա անունը.

Դրանից հետո հնարավոր կլինի օգտագործել ինտերֆեյսի մասում նկարագրված բոլոր օբյեկտները։

Կատարվող մաս (Իրականացում)

Այս բաժինը սկսվում է բառով Իրականացում(իրականացում): Այստեղ է, որ դուք պետք է նկարագրեք ինտերֆեյսի մասում հայտարարված ենթածրագրերը: Միևնույն ժամանակ թույլատրվում է դրանց վերնագրերում չնշել ֆորմալ պարամետրեր, այլապես դրանք պետք է ամբողջությամբ համապատասխանեն ինտերֆեյսի մասի պարամետրերին։ Բացի այդ, ինտերֆեյսի հատվածը կարող է պարունակել օբյեկտներ, որոնք տեղական են (անմատչելի են կանչող ծրագրին) մոդուլի համար:

Նախաձեռնող մաս

Նախաձեռնող մասը սկսում է իր աշխատանքը մինչև հիմնական ծրագրի կատարման մեկնարկը: Դրանում (Սկիզբի և վերջի միջև), որպես կանոն, նկարագրվում են օպերատորներ, որոնք նախատեսված են տարբեր տեսակի օժանդակ աշխատանքների համար: Այս մասը կարող է բացակայել կամ դրանում ծածկագիր չկա: Առաջին դեպքում պետք է կետով նշել End, երկրորդում՝ Begin-ի և End-ի ներսում դատարկ տարածություն թողնել:

Մոդուլների կազմում

Ծրագրում կարող են օգտագործվել միայն կազմված մոդուլներ, որոնք ունեն ընդլայնում, որը տրամադրվում է ձեր հավելվածի մշակման միջավայրի կողմից: Դիտարկենք դրանցից ամենահայտնի երեքը.

TurboPascal

Turbo Pascal-ում մոդուլ կազմելու արդյունքը կլինի ընդլայնումով ֆայլ .tpu (Turbo Pascal միավոր) որը պահպանում է իր կոդը:

Անվճար Պասկալ

Free Pascal միջավայրում մոդուլը կազմելուց հետո ստեղծվում են երկու ֆայլեր՝ տարբեր թույլտվություններով. .ppuև . Առաջինը պարունակում է մոդուլի ինտերֆեյսի մասը, իսկ երկրորդը (պահանջվում է ծրագրի կապակցման համար) իրականացման մաս է։

Պասկալ ABC.NET

Pascal ABC.Net-ը չի ստեղծում մեքենայական լեզվի կոդ մոդուլի կազմման ժամանակ: Եթե ​​կոմպիլյացիան հաջող է, կոդը պահվում է թույլտվությամբ ֆայլում .pcu.

Turbo Pascal և Free Pascal ծրագրավորման միջավայրերի համար կա կոմպիլյացիայի երեք ռեժիմ. Կազմել, ստեղծել և կառուցել. Compile ռեժիմում ծրագրում օգտագործվող բոլոր մոդուլները պետք է նախապես կազմված լինեն։ Կազմման ռեժիմում գտնվող հավելվածը ստուգում է բոլոր միացված մոդուլները ծրագրավորման միջավայրի համար համապատասխան թույլտվությամբ ֆայլերի առկայության համար (.tpu կամ .o): Եթե ​​դրանցից որևէ մեկը չի գտնվել, ապա որոնվում է չգտնված մոդուլի անունով և .pas ընդլայնման ֆայլ: Ռեժիմներից ամենահուսալիը Build-ն է: Այս ռեժիմում ֆայլերի որոնումն ու կազմումը (.pas ընդլայնմամբ) տեղի է ունենում նույնիսկ այն ժամանակ, երբ մոդուլի ֆայլերն արդեն գոյություն ունեն:

Օրինակ

Եկեք ստեղծենք մի փոքր մոդուլ, որը պարունակում է զանգվածի տարրերի երկուական և գծային որոնման ընթացակարգեր: Մոդուլի կոդը:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

միավորի որոնում;
Ինտերֆեյս
տեսակ arr = ամբողջ թվի զանգված [1..5];
vars: լար
պրոցեդուրա binary_search(x: ամբողջ թիվ; Ar: arr; var s: string);
ընթացակարգ line_search(x: ամբողջ թիվ; Ar: arr; var s: տող);
Իրականացում
var a, b, c, i: ամբողջ թիվ;
պրոցեդուրա binary_search(x: ամբողջ թիվ; Ar: arr; var s: string);
սկսել
a:= 1; b:= 5; s:= 'ՈՉ';
մինչդեռ ա<= b do
սկսել
c:= a+ (b- a) div 2 ;
եթե (x b:= c- 1
else if (x>Ar[ c] ) ապա
a:= c+ 1
ուրիշ
սկսել s:= 'ԱՅՈ' ; ընդմիջում ; վերջ ;
վերջ ;
վերջ ;
ընթացակարգ line_search(x: ամբողջ թիվ; Ar: arr; var s: տող);
սկսել
s:= 'ՈՉ';
համար i:= 1-ից 5 անել
սկսել
եթե (Ar[i] = x) ապա
սկսել
s:= 'ԱՅՈ'; ընդմիջում ;
վերջ ;
վերջ ;
վերջ ;
վերջ.

Այս ամբողջ կոդը պետք է լինի առանձին ֆայլում: Այժմ գրենք հիմնական ծրագիրը, որում կմիացնենք մեր Search մոդուլը։

Մոդուլ (միավոր)հաստատունների, տվյալների տեսակների, փոփոխականների, ընթացակարգերի և ֆունկցիաների մի շարք է: Յուրաքանչյուր մոդուլ նման է առանձին Pascal ծրագրին. այն կարող է ունենալ հիմնական մարմին, որը կանչվում է նախքան ձեր ծրագիրը սկսելը և կատարում է անհրաժեշտ սկզբնավորումը: Մի խոսքով, մոդուլը հայտարարությունների գրադարան է, որը դուք կարող եք տեղադրել ձեր ծրագրում, և որը թույլ կտա ձեզ բաժանել ծրագիրը մասերի, որոնք կազմվում են առանձին:

Turbo Pascal-ը հնարավորություն է տալիս մուտք գործել մեծ թվով ներկառուցված հաստատուններ, տվյալների տեսակներ, փոփոխականներ, ընթացակարգեր և գործառույթներ: Դրանցից մի քանիսը հատուկ են Turbo Pascal-ին; մյուսները հատուկ են IBM PC-ին (և համատեղելի համակարգիչներին) կամ MS-DOS օպերացիոն համակարգին: Նրանց թիվը մեծ է, սակայն, ձեր ծրագրում դուք հազվադեպ եք դրանք միանգամից օգտագործում: Հետեւաբար, դրանք բաժանվում են հարակից խմբերի, որոնք կոչվում են մոդուլներ: Այս դեպքում կարող եք օգտագործել միայն այն մոդուլները, որոնք անհրաժեշտ են ծրագրում։

Մոդուլի կառուցվածքը

Մոդուլն ապահովում է մի շարք առանձնահատկություններ ընթացակարգերի և գործառույթների միջոցով, որոնք աջակցվում են հաստատուններով, տվյալների տեսակներով և փոփոխականներով, սակայն այս հատկանիշների իրական իրականացումը թաքնված է, քանի որ մոդուլը բաժանված է երկու բաժնի՝ ինտերֆեյս և իրականացում: Եթե ​​ծրագիրն օգտագործում է մոդուլ, ապա բոլոր մոդուլի հայտարարագրերը հասանելի են դառնում այդ ծրագրին, կարծես դրանք ինքնին սահմանված լինեն:

Մոդուլի կառուցվածքը նման է ծրագրի կառուցվածքին, սակայն կան մի քանի էական տարբերություններ: Օրինակ, հաշվի առեք մոդուլը.

միավոր<идентификатор>; ինտերֆեյսի օգտագործումը<список модулей>; (ըստ ցանկության) (բաց նկարագրություններ)իրականացում (փակ ընթացակարգը և գործառույթի նկարագրությունները)սկսել (նախնականացման կոդը)վերջ.

Մոդուլի վերնագիրը սկսվում է վերապահված բառի միավորով, որին հաջորդում է մոդուլի անվանումը (իդենտիֆիկատորը), ինչպես ծրագրի անվան դեպքում: Մոդուլի հաջորդ տարրը ինտերֆեյսի բանալի բառն է: Այն նշում է մոդուլի ինտերֆեյսի բաժնի սկիզբը՝ այն հատվածը, որը տեսանելի է բոլոր մյուս մոդուլների կամ ծրագրերի համար, որոնք օգտագործում են այն:

Մոդուլը կարող է օգտագործել այլ մոդուլներ, դրա համար դրանք սահմանված են օգտագործման կետում: Օգտագործման դրույթը, եթե առկա է, հետևում է միջերեսի հիմնաբառից անմիջապես հետո: Նկատի ունեցեք, որ այստեղ բավարարվում է օգտագործման դրույթի օգտագործման ընդհանուր կանոնը. եթե այն մոդուլը, որի անունը նշված է օգտագործման կետում, օգտագործում է այլ մոդուլներ, ապա այդ մոդուլների անունները նույնպես պետք է նշվեն օգտագործման կետում և նախքան դրանք օգտագործելը:

Ստանդարտ մոդուլներ

TURBO.TPL ֆայլը պարունակում է բոլոր ստանդարտ փաթեթները, բացառությամբ Graph-ի և համատեղելիության փաթեթների (Graph3 և Turbo3)՝ System, Overlay, Crt, Dos և Printer: Այս փաթեթները բեռնված են հիշողության մեջ Turbo Pascal-ով և միշտ հասանելի են ձեզ: Որպես կանոն, TURBO.TPL ֆայլը պահվում է նույն գրացուցակում, ինչ TURBO.EXE (կամ TPC.EXE): Դուք կարող եք այն պահել մեկ այլ գրացուցակում, քանի դեռ այն նկարագրված է որպես Turbo Pascal գրացուցակ: Դա անելու համար օգտագործեք TINST.EXE-ն այս գրացուցակը TURBO.EXE ֆայլում տեղադրելու համար:

Օգտագործված փաթեթներ՝ ոչ

Համակարգը պարունակում է Turbo Pascal-ի բոլոր ստանդարտ և ներկառուցված ընթացակարգերն ու գործառույթները: Ցանկացած Turbo Pascal ենթածրագր, որը ստանդարտ Pascal-ի մաս չէ և չի գտնվել որևէ այլ մոդուլում, պարունակվում է System-ում: Այս մոդուլը կցված է բոլոր ծրագրերին:

Օգտագործված փաթեթներ՝ ոչ

DOS-ը սահմանում է բազմաթիվ Pascalian ռեժիմներ և գործառույթներ, որոնք համարժեք են ամենատարածված DOS զանգերին, ինչպիսիք են GetTime, SetTime, DiskSize և այլն: Բացի այդ, այն սահմանում է երկու ցածր մակարդակի ծրագիր՝ MsDos և Intr, որոնք թույլ են տալիս ակտիվացնել ցանկացած MS-DOS զանգ կամ համակարգի ընդհատում։ Registers-ը MsDos-ի և Intr-ի պարամետրի տվյալների տեսակն է: Բացի այդ, որոշ այլ հաստատուններ և տվյալների տեսակներ են սահմանվում:

Օգտագործված փաթեթներ՝ ոչ

Overlay - պարունակում է գործիքներ՝ ծածկույթի ծրագրեր ստեղծելու համար: OVERKAY ծրագիրը ծրագիր է, որը բեռնում է ոչ բոլորը, այլ մասերը:

Օգտագործված փաթեթներ՝ ոչ

Crt-ն ապահովում է հաստատունների, փոփոխականների և ծրագրերի մի շարք PC-ին հատուկ նկարագրություններ I/O գործողությունների համար: Վերջինս կարող է օգտագործվել էկրանի հետ աշխատելու համար (պատուհանների կարգավորում, կուրսորի անմիջական կառավարում, տեքստի և ֆոնի գույներ): Բացի այդ, դուք կարող եք կատարել «հում» ստեղնաշարի մուտքագրում և կառավարել անհատական ​​համակարգչի ձայնի ստեղծման տախտակը: Այս մոդուլը տրամադրում է բազմաթիվ առօրյաներ, որոնք ստանդարտ էին 3.0 տարբերակում:

Օգտագործված փաթեթներ՝ Crt

Printer մոդուլը սահմանում է տեքստային ֆայլի փոփոխական՝ Lst, որը կապված է սարքի դրայվերի հետ, որը թույլ է տալիս ստանդարտ Pascal արտադրանքը ուղարկել տպիչ՝ օգտագործելով Write և Writeln: Օրինակ, ձեր ծրագրում ներառելով Printer-ը, կարող եք անել հետևյալը.

Գրեք (Lst,« ,A:4»-ի գումարը, և «,B:4», հավասար է « ); C:=A+B; WriteIn (Lst, C: 8);

Օգտագործված փաթեթներ՝ Crt

Graph3-ն աջակցում է գրաֆիկական ռեժիմների ամբողջական փաթեթը 3.0 տարբերակի համար՝ սովորական գրաֆիկայի, առաջադեմ գրաֆիկայի և գրաֆիկայի համար՝ օգտագործելով հարաբերական հրամաններ: Նրանք նույնական են անունով, ֆունկցիայի պարամետրերով և 3.0 տարբերակի ռեժիմներով:

Օգտագործված փաթեթներ՝ Crt

Այս մոդուլը պարունակում է երկու փոփոխական և մի քանի ընթացակարգ, որոնք այլևս չեն աջակցվում Turbo Pascal-ի կողմից: Դրանք ներառում են ներկառուցված ֆայլի փոփոխականը Kbd, բուլյան CBreak փոփոխականը և MemAvail-ի և MaxAvail-ի սկզբնական ամբողջական տարբերակները (որոնք պարբերություններում ազատ հիշողություն են վերադարձնում, ոչ թե բայթեր, ինչպես սկզբնական տարբերակները):

Օգտագործված փաթեթներ՝ Crt

Graph-ը տրամադրում է արագ և արդյունավետ գրաֆիկայի մի շարք, որոնք թույլ են տալիս լիովին օգտվել ձեր անհատական ​​համակարգչի գրաֆիկական հնարավորություններից:

Այս մոդուլն իրականացնում է Borland-ի սարքերից անկախ գրաֆիկական դրայվեր՝ CGA, EGA, Hercules, ATT 400, MCGA, 3270 PC և VGA գրաֆիկական ադապտերներին աջակցելու համար:

Գրելով ձեր սեփական մոդուլները

Ենթադրենք, դուք գրել եք IntLib մոդուլ, գրել այն INTLIB.PAS ֆայլում և թարգմանել այն սկավառակի վրա; ստացված կոդը գտնվում է INTLIB.TRU ֆայլում: Այս մոդուլը ձեր ծրագրում օգտագործելու համար դուք պետք է ձեր ծրագրում ներառեք օգտագործման դրույթ, որպեսզի կոմպիլյատորին ասեք, թե որ մոդուլն օգտագործի: Ձեր ծրագիրը կարող է այսպիսի տեսք ունենալ.

ծրագիր MyProg; օգտագործում է IntLib;

Նկատի ունեցեք, որ Turbo Pascal-ը ենթադրում է, որ մոդուլը պարունակող ֆայլը նույն անվանումն ունի, ինչ որ մոդուլը: Եթե ​​ձեր մոդուլի անունը MyUtilities է, ապա Turbo Pascal-ը կփնտրի MYUTILIT.PAS անունով ֆայլ:

Մոդուլի կազմում

Մոդուլը կազմվում է ճիշտ այնպես, ինչպես ծրագիրը կազմվում է. այն ստեղծվում է խմբագրիչի միջոցով, այնուհետև Compile / Сompile հրամանը կոչվում է (Compile / Compile) (կամ սեղմվում են Alt-C ստեղները): Այնուամենայնիվ, EXE ընդլայնմամբ ֆայլի փոխարեն Turbo Pascal-ը ստեղծում է .TRU ընդլայնմամբ ֆայլ (Turbo Pascal Unit - Turbo Pascal Unit): Դրանից հետո դուք կարող եք թողնել այս ֆայլը ինչպես կա, կամ տեղադրել այն TURBO.TPL-ում՝ օգտագործելով TPUMOVER.EXE:

Երկու դեպքում էլ իմաստ ունի ուղարկել *.TRU ֆայլերը (աղբյուրի ֆայլերի հետ միասին) միավորի գրացուցակ, որը սահմանված է O/D/Unit Directories հրամանով: Յուրաքանչյուր սկզբնաղբյուր ֆայլի համար կարող է լինել միայն մեկ մոդուլ, քանի որ կոմպիլյացիան դադարում է վերջացող վերջնակետին հանդիպելուն պես:

Օրինակ:

Եկեք մի փոքր մոդուլ գրենք: Եկեք այն անվանենք IntLib և տեղադրենք երկու պարզ ենթածրագրեր ամբողջ թվերի համար՝ ընթացակարգ և ֆունկցիա.

միավոր IntLib; ինտերֆեյսի ընթացակարգ ISwap (var I, J: ամբողջ թիվ); ֆունկցիա IMax(I,J: integer ) : integer ; իրականացման կարգը ISwap; var Temp՝ ամբողջ թիվ; startTemp:=I; I:=J; J:=ջերմաստիճանի ավարտ; (ISwap ընթացակարգի ավարտ) IMax ֆունկցիա; սկսել, եթե I > J, ապա IMax:=Ես այլևս IMax:=J վերջ ; (IMax ֆունկցիայի ավարտը)վերջ. (IntLib մոդուլի վերջ)

Ներկայացնենք այս ենթածրագրերը, գրենք այն INTLIB.PAS ֆայլում, այնուհետև թարգմանենք սկավառակի վրա: Արդյունքում մենք ստանում ենք մոդուլի կոդը INTLIB.TRU ֆայլում: Եկեք այն ուղարկենք մոդուլների գրացուցակ: Հետևյալ ծրագիրը օգտագործում է IntLib մոդուլը.

ծրագիր IntTest; օգտագործում է IntLib; varA,B՝ ամբողջ թիվ; սկսել գրել ( «Մուտքագրեք երկու ամբողջ արժեք.) ; Readln(A,B); ISwap(A,B) ; WriteIn("A=" ,A," B=" ,B) ; գրել ( «Առավելագույն արժեքն է».,IMax(A,B) ); վերջ. (IntTest ծրագրի ավարտը)

Մոդուլի բոլոր հայտարարությունները կապված են միմյանց հետ: Օրինակ, Crt մոդուլը պարունակում է բոլոր նկարագրությունները, որոնք անհրաժեշտ են ձեր անհատական ​​համակարգչի էկրանի առօրյայի համար:

Pascal-ի մոդուլները ծրագրի հիմնական մասի նկատմամբ նման են ենթածրագրերի (ընթացակարգեր և գործառույթներ): Բայց ըստ սահմանման, դրանք անկախ ծրագրեր են, որոնց ռեսուրսները կարող են օգտագործվել այլ ծրագրերում: Բացի այդ, մոդուլների նկարագրությունը տեղի է ունենում կանչող հավելվածից դուրս, բայց առանձին ֆայլում, ուստի մոդուլը առանձին կազմված ծրագիր է: Կազմված մոդուլի ֆայլը (որը դուք պետք է օգտագործեք) կունենա ծրագրավորման միջավայրի կողմից տրամադրված ընդլայնում (օրինակ՝ .tpu, .ppu, .pcu):

Մոդուլները ստեղծվում են, որպես կանոն, կոդի կոմպակտությունն ապահովելու համար, որոնց մասին պետք է հոգ տան մեծ նախագծերը։ Հարկ է նաև նշել, որ մոդուլների օգտագործումը որոշակի իմաստով վերացնում է հիշողության հատվածավորման սահմանափակումը, քանի որ յուրաքանչյուր մոդուլի կոդը գտնվում է առանձին հատվածում:

Մոդուլի կառուցվածքը հետևյալն է.

միավոր<имя модуля>; Ինտերֆեյս<интерфейсная часть>Իրականացում<исполняемая часть>Սկսել<инициализация>վերջ.

Մոդուլի անվանումը (միավոր)

Unit հիմնաբառին հաջորդող մոդուլի անունը պետք է համապատասխանի ֆայլի անվանմանը (առանց .pas), որը պարունակում է իր կոդը: Բացի այդ, օգտագործելով անունը, մոդուլը միացված է մեկ այլ մոդուլի կամ հիմնական ծրագրին: Դա անելու համար դուք պետք է նշեք «Օգտագործում» հիմնաբառը և նշեք ստորակետերով առանձնացված փլագինների ցանկը.

օգտագործում է<список имен модулей>;

Ինտերֆեյսի մաս (ինտերֆեյս)

Ինտերֆեյսի հատվածը նկարագրում է օբյեկտների վերնագրերը, որոնց հասանելիություն կունենան այլ մոդուլներ և ծրագրեր: Սրանք հաստատուններ, տեսակներ, փոփոխականներ և ենթածրագրեր են: Օրինակ, այսպես կարող է տեսք ունենալ Search մոդուլի ինտերֆեյսի մասը, որը պարունակում է զանգվածի տարրերի որոնման ալգորիթմներ։

միավորի որոնում; Ինտերֆեյսի տեսակը arr = ամբողջ թվի զանգված; vars:string; binary_search պրոցեդուրա (x: ամբողջ թիվ; Ar: arr; var s: տող); ընթացակարգի տող_որոնում (x: ամբողջ թիվ; Ar: arr; var s: տող);

Այս մոդուլը հայտարարելու համար անհրաժեշտ է ծրագրում նշել դրա անունը.

Դրանից հետո հնարավոր կլինի օգտագործել ինտերֆեյսի մասում նկարագրված բոլոր օբյեկտները։

Կատարվող մաս (Իրականացում)

Այս բաժինը սկսվում է Իրականացում բառով: Այստեղ է, որ դուք պետք է նկարագրեք ինտերֆեյսի մասում հայտարարված ենթածրագրերը: Միևնույն ժամանակ թույլատրվում է դրանց վերնագրերում չնշել ֆորմալ պարամետրեր, այլապես դրանք պետք է ամբողջությամբ համապատասխանեն ինտերֆեյսի մասի պարամետրերին։ Բացի այդ, ինտերֆեյսի հատվածը կարող է պարունակել օբյեկտներ, որոնք տեղական են (անմատչելի են կանչող ծրագրին) մոդուլի համար:
Նախաձեռնող մաս

Նախաձեռնող մասը սկսում է իր աշխատանքը մինչև հիմնական ծրագրի կատարման մեկնարկը: Դրանում (Սկիզբի և վերջի միջև), որպես կանոն, նկարագրվում են օպերատորներ, որոնք նախատեսված են տարբեր տեսակի օժանդակ աշխատանքների համար: Այս մասը կարող է բացակայել կամ դրանում ծածկագիր չկա: Առաջին դեպքում դուք պետք է նշեք End կետով, երկրորդում թողեք դատարկ տարածք Begin և End ներսում:

Մոդուլների կազմում

Ծրագրում կարող են օգտագործվել միայն կազմված մոդուլներ, որոնք ունեն ընդլայնում, որը տրամադրվում է ձեր հավելվածի մշակման միջավայրի կողմից: Դիտարկենք դրանցից ամենահայտնի երեքը.

մոդուլներ կազմել Turbo Pascal-ում

Մոդուլը կազմելու արդյունքը TurboPascal, կլինի ընդլայնումով ֆայլ .tpu (Turbo Pascal միավոր) որը պահպանում է իր կոդը:

մոդուլներ կազմել Free Pascal-ով

Մոդուլը միջավայրում կազմելուց հետո Անվճար Պասկալ, երկու ֆայլ ստեղծվում են տարբեր թույլտվություններով. .ppuև . Առաջինը պարունակում է մոդուլի ինտերֆեյսի մասը, իսկ երկրորդը (պահանջվում է ծրագրի կապակցման համար) իրականացման մաս է։

մոդուլների կազմում Pascal ABC.NET-ում

Pascal ABC.Net-ը չի ստեղծում մեքենայական լեզվի կոդ մոդուլի կազմման ժամանակ: Եթե ​​կոմպիլյացիան հաջող է, կոդը պահվում է .pcu լուծաչափով ֆայլում:

Turbo Pascal և Free Pascal ծրագրավորման միջավայրերի համար կա կոմպիլյացիայի երեք ռեժիմ՝ Compile, Make և Build: Compile ռեժիմում ծրագրում օգտագործվող բոլոր մոդուլները պետք է նախապես կազմված լինեն։ Կազմման ռեժիմում գտնվող հավելվածը ստուգում է բոլոր միացված մոդուլները ծրագրավորման միջավայրի համար համապատասխան թույլտվությամբ ֆայլերի առկայության համար (.tpu կամ .o): Եթե ​​դրանցից որևէ մեկը չի գտնվել, ապա որոնվում է չգտնված մոդուլի անունով և .pas ընդլայնման ֆայլ: Ռեժիմներից ամենահուսալիը Build-ն է: Այս ռեժիմում ֆայլերի որոնումն ու կազմումը (.pas ընդլայնմամբ) տեղի է ունենում նույնիսկ այն ժամանակ, երբ մոդուլի ֆայլերն արդեն գոյություն ունեն:

Օրինակ. եկեք ստեղծենք մի փոքր մոդուլ, որը պարունակում է զանգվածի տարրերի երկուական և գծային որոնման ընթացակարգեր: Մոդուլի կոդը:

միավորի որոնում; Ինտերֆեյսի տեսակը arr = ամբողջ թվի զանգված; vars:string; binary_search պրոցեդուրա (x: ամբողջ թիվ; Ar: arr; var s: տող); ընթացակարգի տող_որոնում (x: ամբողջ թիվ; Ar: arr; var s: տող); Իրականացում var a, b, c, i՝ ամբողջ թիվ; binary_search պրոցեդուրա (x: ամբողջ թիվ; Ar: arr; var s: տող); սկսել a:=1; b:=5; s:="ՉԻ"; մինչդեռ ա<=b do begin c:=a+(b-a) div 2; if (xAr[c]) հետո a:=c+1 else սկսվում է s:="YES"; ընդմիջում; վերջ; վերջ; վերջ; ընթացակարգի տող_որոնում (x: ամբողջ թիվ; Ar: arr; var s: տող); սկսել s:="NO"; որովհետև i:=1-ից մինչև 5-ը սկսվում է, եթե (Ar[i]=x), ապա սկսվում է s:="YES"; ընդմիջում; վերջ; վերջ; վերջ; վերջ.

Այս ամբողջ կոդը պետք է լինի առանձին ֆայլում: Այժմ գրենք հիմնական ծրագիրը, որում կմիացնենք մեր Search մոդուլը։

Ծրագրի մոդուլ_որոնում; օգտագործում է Crt, Search; var mas՝ ամբողջ թվերի զանգված; n, j: ամբողջ թիվ; str:string; y: char; սկսել clrscr; writeln («Մուտքագրեք զանգվածի տարրերը»); j:=1-ից 5-ի համար կարդացեք (mas[j]); գրել ("Մուտքագրեք թվերի որոնումը. "); readln(n); write("Այս զանգվածը պատվիրված է? (y/n)"); readln(y); if y="y" ապա երկուական_որոնում(n, mas, str) else line_search(n, mas, str); գրել (str); readkey; վերջ.

Ֆայլերը կազմելուց հետո այս հավելվածը պետք է ճիշտ աշխատի։ Իհարկե, եթե պատասխանում եք «Այս զանգվածը պատվիրված է» հարցին: ծրագրին տալ կեղծ տեղեկատվություն, այնուհետև այն կարող է պատասխանել նույն կերպ:

Պասկալ լեզվում ենթածրագրերի գրադարաններն օգտագործվում են մոդուլների օգտագործմամբ կառուցվածքային ծրագրավորման տեխնոլոգիան իրականացնելու համար: Տեքստային առումով գրադարանները միավորվում են անկախ ծրագրային միավորների մեջ, որոնք կոչվում են Pascal լեզվի մոդուլներ: Մոդուլներ են ստեղծվում առօրյաների գրադարաններ իրականացնելու համար: Սովորաբար, մոդուլները միավորում են ենթածրագրերը, որոնք կատարում են նույն դասի առաջադրանքները:

Մոդուլանկախ ծրագրային միավոր է, որն ինքնավար կազմվում է և ունի որոշակի կառուցվածք։

Մոդուլն ունի հետևյալ կառուցվածքը.

Pascal մոդուլի անվանումը բաղկացած է Unit սպասարկման բառից, որին հաջորդում է մոդուլի անվանումը: Մոդուլի անվան համար խիստ պահանջներ կան, և այս անունը պետք է համապատասխանի սկավառակի ֆայլի անվանը .pas ընդլայնման հետ, որը պարունակում է մոդուլի տեքստը:

UnitMyType; //ֆայլ MyType.pas

Մոդուլի անվանումն օգտագործվում է մոդուլը ծրագրերի և այլ մոդուլների հետ կապելու համար: Ծրագրերը և մոդուլները կապվում են ծրագրի կամ մոդուլի Օգտագործումներ բաժնում անհրաժեշտ մոդուլին: Մոդուլներն իրենց աշխատանքի համար կարող են կանչել այլ մոդուլներ, եթե մոդուլը կանչում է մեկ այլ մոդուլ, ապա «Օգտագործումներ» բաժինը պետք է հետևի INTERFACE բանալի բառին:

Pascal լեզվի միջերեսային մասը սկսվում է INTERFACE վերապահված բառով: Այն ծառայում է մոդուլը հոսթ ծրագրի կամ այլ մոդուլների հետ կապելու համար: Ինտերֆեյսի մասը պարունակում է մոդուլի բոլոր գլոբալ օբյեկտների հայտարարությունը: Նախ և առաջ հայտարարվում են ենթածրագրեր և, բացի այդ, գլոբալ տեսակներն ու փոփոխականները: Եթե ​​օբյեկտը հայտարարված է գլոբալ, ապա այն կարող է օգտագործվել կանչող ծրագրում և մոդուլում առանց հատուկ հայտարարագրի:

Միավոր ջրային զանգված;

Ինտերֆեյս

ՕԳՏԱԳՈՐԾՈՒՄ Է MyType;

[type_name]:[type];

[գլոբալ_փոփոխականների_ցուցակ]:[տեսակ];

Ինտերֆեյսի մասում ենթածրագրերը հայտարարվում են իրենց վերնագրերով, որոնք ներառում են ենթածրագրի անվանումը և պաշտոնական պարամետրերի ցանկը:

Pascal լեզվի գործարկվող մասը սկսվում է ծառայողական IMPLEMENTATION բառով և պարունակում է ինտերֆեյսի մասում հայտարարված ենթածրագրերի նկարագրությունը, բացի այդ, գործարկվող մասում կարող են հայտարարվել մոդուլի տեղական օբյեկտները (փոփոխականներ, հաստատուններ): Ենթածրագրի նկարագրությունը կատարվող մասում պետք է սկսվի ենթածրագրի վերնագրով, մինչդեռ պաշտոնական պարամետրերի ցանկը բաց է թողնված:

Pascal լեզվի մեկնարկող մասը դադարեցնում է մոդուլը, և այս մասը կարող է բացակայել կամ դատարկ լինել: Նախաձեռնող մասի կատարումը խորհուրդ չի տրվում, քանի որ կախովի իրավիճակներ կարող են առաջանալ: Այն պարունակում է գործարկվող հայտարարություններ, սահմանում է գլոբալ փոփոխականների սկզբնական արժեքները, բացում է անհրաժեշտ ֆայլերը և կապեր է հաստատում այլ ֆայլերի հետ:

Պասկալում մոդուլներ կազմելը

Մոդուլների հետ աշխատելիս դուք պետք է կազմեք մոդուլներն իրենք և կազմեք ծրագրեր, որոնք օգտագործում են մոդուլները: Ինչպես գիտեք, Borland Pascal միջավայրում կա կոմպիլյացիայի երեք ռեժիմ (Compile, Build, Make): Մոդուլն ինքնին կազմելիս սովորաբար օգտագործվում է Compile ռեժիմը, թեև այլ ռեժիմներ հնարավոր են, եթե մոդուլն օգտագործվում է այլ մոդուլների կողմից: Մոդուլը կազմելով ոչ թե գործարկվող ծրագիր է ստեղծվում, այլ .tpw ընդլայնմամբ հատուկ կազմված մոդուլային ֆայլ է ստեղծվում։ Կազմված միավորի ֆայլերը տեղադրվում են գրացուցակներում, որոնք սովորաբար կոչվում են Units (նշված է միջավայրի կարգավորումներում): Մոդուլներ պարունակող ծրագրեր կազմելիս կարելի է օգտագործել կոմպիլյացիայի բոլոր երեք ռեժիմները։ Տարբեր ռեժիմներ կազմելը տարբերվում է տևողությամբ և հուսալիությամբ:

Ռեժիմ Կազմել- ամենապարզն ու ամենաարագը: Այս ռեժիմում կոմպիլյատորը ստուգում է «Օգտագործումներ» բաժնում փլագինների առկայությունը և ծրագրերը կազմում, եթե դրանք կան: Եթե ​​մոդուլը բացակայում է, կոմպիլյացիան դադարում է, և բացակայող մոդուլի մասին հաղորդագրություն է ցուցադրվում:

Ռեժիմում Դարձնելկոմպիլյատորը ստուգում է plug-ins-ի առկայությունը, և եթե որևէ մոդուլ չի գտնվել, կոմպիլյատորը փնտրում է մոդուլի տեքստը .pas ընդլայնմամբ, կազմում է մոդուլը և այնուհետև կազմում է ծրագիրը: Բացի այդ, կոմպիլյատորը ստուգում է .tpw և .pas մոդուլների ստեղծման ամսաթվերը: Եթե ​​նա գտնում է, որ .pas ֆայլի ստեղծման ամսաթիվը ավելի ուշ է, քան .tpw ֆայլը, նա եզրակացնում է, որ փոփոխություններ են կատարվել մոդուլի տեքստում և նորից վերակոմպիլացնում է մոդուլները: Այսպիսով, այն ավելի հուսալի է:

Ռեժիմում Կառուցելբոլոր .tpw ֆայլերը անտեսվում են, կոմպիլյատորը նորից կկազմի հիմնական ծրագրում օգտագործվող բոլոր մոդուլները և կկազմակերպի ծրագիրը: Սա ամենահուսալի ռեժիմն է, բայց միևնույն ժամանակ ամենաերկարը։

Մոդուլ (ՄԻԱՎՈՐ-մոդուլ, միավոր) ինքնավար (առանձին) կազմված ծրագրային միավոր է, որը պարունակում է նկարագրության բաժնի բաղադրիչները (պիտակներ, հաստատուններ, տեսակներ, փոփոխականներ, ընթացակարգեր, գործառույթներ), ինչպես նաև կարող է պարունակել սկզբնավորման մասի օպերատորներ:
Մոդուլն ինքնին գործարկվող ծրագիր չէ, այլ նախատեսված է օգտագործել այլ ծրագրերի և մոդուլների կողմից:

Մոդուլի կառուցվածքը

Մոդուլն ունի հետևյալ կառուցվածքը.
ՄԻԱՎՈՐ< մոդուլի անվանումը >
Ինտերֆեյս
< ինտերֆեյսի բաժին >
ԻՐԱԿԱՆԱՑՈՒՄ
< իրականացման բաժինը >
ՍԿՍԵԼ
< սկզբնավորման բաժինը >
ՎԵՐՋ.

Մոդուլի վերնագիր բաղկացած է վերապահված բառից միավոր(մոդուլ) և մոդուլի անվանումը:

Մոդուլի անվանումը ընտրվում է ընդհանուր կանոնների համաձայն և պետք է համապատասխանի մոդուլի սկզբնական կոդը պարունակող սկավառակի ֆայլի անվանմանը:
Մոդուլի անվան ընդլայնում (. անց ) նշված չէ, այն սահմանված է լռելյայն:

Մոդուլի անվանումն օգտագործվում է այն հիմնական ծրագրին մի կետով կապելու համար օգտագործում է .
Առաջարկ օգտագործում էմ.բ. տեղադրված է մոդուլի վերնագրից հետո կամ բառերի հետևում

Ինտերֆեյսև Իրականացում .

Ինտերֆեյսի մաս Ինտերֆեյս(ինտերֆեյս, հոդակապ, կապ) և պարունակում է հղումներ դեպի այլ մոդուլներ և գլոբալ օբյեկտների հայտարարագրեր (նկարագրություններ), օրինակ՝ պիտակներ, հաստատուններ, տեսակներ, փոփոխականներ և ընթացակարգերի ու գործառույթների վերնագրեր, որոնք հասանելի են հիմնական ծրագրի և այլ մոդուլների համար (այսինքն՝ տեսանելի դրսից):

Իրականացման բաժին - սկսվում է հիմնաբառով Իրականացում(կատարում) և պարունակում է մոդուլի տեղական օբյեկտների նկարագրություն, այսինքն՝ պիտակներ, հաստատուններ, տեսակներ, փոփոխականներ, որոնք հասանելի չեն հիմնական ծրագրին և այլ մոդուլներին (այսինքն դրսից տեսանելի չեն) և ընթացակարգերի և գործառույթների ամբողջական նկարագրություն։ . Այս դեպքում ենթածրագրերի վերնագրում պաշտոնական պարամետրերի ցանկը կարող է լինել բաց թողնված, բայց եթե տրված է, այն պետք է ճշգրտորեն համապատասխանի ինտերֆեյսի մասի նկարագրությանը:

Նախնականացման բաժին - փակագծերում փակցված ՍԿԶԲ ՎԵՐՋ.
և պարունակում է հայտարարություններ, որոնք կկատարվեն նախքան վերահսկողությունը հիմնական ծրագրին փոխանցելը: Սա կարող է լինել Տվյալների (փոփոխական) սկզբնավորման հայտարարություններ Օրինակ՝ հանձնարարության և մուտքագրման հայտարարությունները, ինչպես նաև ֆայլերը կապելու և բացելու ընթացակարգերը: Օպերատորների բաժինը կարող է լինել. դատարկ ՍԿԶԲ ՎԵՐՋկամ պարզապես բացակայում է ՎԵՐՋ .
Մոդուլի վերջում դրվում է կետ:

Մոդուլների կազմում և օգտագործում

RAM համակարգն ունի հատվածային կառուցվածք (մեկ հատվածը հավասար է 64K = 65535 բայթ): Ծրագրի կոդը կարող է լինել ոչ ավելի, քան մեկ հատված, տվյալների քանակը չի կարող գերազանցել մեկ հատվածը (բացառությամբ այն դեպքերի, երբ օգտագործվում է դինամիկ հիշողություն) և մեկ հատվածը կույտի համար: Կույտի չափը սահմանվում է հրահանգով ($ M<>): Կույտի նվազագույն չափը 1K է, իսկ առավելագույն առանձին հատվածը լռելյայն 16K է: Տեղական փոփոխականների արժեքները դրվում են կույտի վրա, երբ ենթածրագրը կանչվում է, և դուրս գալիս դուրս են գալիս կույտից:
Մոդուլի կոդը տեղադրվում է առանձին հատվածում, քանի որ այն հեռարձակվում է ինքնուրույն հիմնական ծրագրից, և ծրագրի կողմից օգտագործվող մոդուլների քանակը կախված է միայն առկա OP-ից: Սա թույլ է տալիս ստեղծել մեծ ծրագրեր:
Կազմողն առաջացնում է մոդուլի կոդը նույն անունով, բայց ընդլայնմամբ tpu (տուրբո պասկալ միավոր).
Մոդուլը հիմնական ծրագրի կամ այլ մոդուլների կողմից օգտագործելու համար դրա անվանումը (առանց ընդլայնման) տեղադրվում է առաջարկների ցանկում։ օգտագործում է
Եթե ​​մոդուլը կոմպակտ է և հաճախ օգտագործվում է կիրառական ծրագրերի կողմից, այն կարող է տեղադրվել ստանդարտ մոդուլի գրադարանում TURBO.TPL (Turbo-Pasacal-գրադարան ) օգտագործելով կոմունալ TPUMOVER.
Բայց դա պետք է արվի միայն արտակարգ իրավիճակների դեպքում։ գրադարանը բեռնվում է OP-ում և կրճատում է ծրագրի տարածքը:
Ֆայլը մոդուլի սկզբնական կոդով կազմելիս հայտնվում է համանուն ֆայլ՝ ընդլայնմամբ tpu և տեղադրվում է տարբերակով նշված գրացուցակում

ՏԱՐԲԵՐԱԿՆԵՐ / ՏԵՂԵԿԱՏՈՒՆԵՐ / ՄԻԱՎՈՐ ՏԵՂԵԿԱՏՈՒՆԵՐ

կամ ընթացիկ գրացուցակում, եթե այս տարբերակը չկա:
Հիմնական ծրագիրը կազմելիս օգտագործվող մոդուլները պետք է լինեն տարբերակով նշված գրացուցակում
ՏԱՐԲԵՐԱԿՆԵՐ / ՏԵՂԵԿԱՏՈՒՆԵՐ / EXE & TPU ՏԵՂԵԿԱՏՈՒՆԵՐ

կամ ընթացիկ գրացուցակում այս տարբերակի բացակայության դեպքում
Ստանալ EXEառաջադրանքի ֆայլը տարբերակում

ԿԱԶՄԵԼ/ԴԵՍՏԻՆԱՑԻԱ/ՍԿՍԱՎՈՐ (ՀԻՇՈՂՈՒԹՅՈՒՆ)
տեղադրել ՍԿԱՎ .
Մոդուլներ կազմելու երեք եղանակ կա.
- ԿԱԶՄԵԼ
-ԿԱՌՈՒՑԵԼ
- ԿԱՏԱՐԵԼ

Մենյուի կողմից սահմանված ռեժիմներ ԿԱԶՄԵԼ

1.Ռեժիմ ԿԱԶՄԵԼ(կոչ Alt-F9 ) . Այս դեպքում ծրագիրը կազմվում է, և օգտագործվող մոդուլները պետք է լինեն: նախապես կազմված և պահված համապատասխան գրացուցակներում:
2.Ռեժիմ ԿԱՌՈՒՑԵԼ(կոչ - F9) . Այս դեպքում նախկինում կազմված մոդուլներն անտեսվում են, իսկ ընդլայնումով մոդուլները անց և նորից կազմվել։
3.Ռեժիմ ԿԱՏԱՐԵԼ(կոչ F9) . Այս դեպքում վերակոմպիլացվում են միայն այն մոդուլները, որոնք փոփոխություններ են ունեցել տեքստում։

Օրինակ 16.1.

Ֆայլի մեջ inp.txt կան իրական թվերի երեք զանգված

2.1 3.1 -2.4 5.6 5.4 -6.7 3.5 -3.6

Հաշվարկային ֆունկցիա

որտեղ Max_a, Max_b, Max_c, Sa, Sb, Sc, ka, kb, kc են համապատասխան a, b և c զանգվածների առավելագույն տարրը, գումարը և դրական տարրերի քանակը:
Արդյունքը դուրս բերեք ֆայլ դուրս. txt և էկրանին:

Մոդուլի տեքստը

UNMAS;
Ինտերֆեյս
Const n=10;
Տեսակը vec=real-ի զանգված;
Վարզ:vec;
i: integer;
f1,f2:տեքստ;

Ընթացակարգ SK1(z:vec; num:byte; Var s:real; Var k:byte);
Ֆունկցիան MAX(z:vec; num:byte):real;

Իրականացում
ProcedureV(s:char; num:byte;Var z:vec);
Սկսել
Writeln ("Array",s);
i:=1-ից մինչև num do
Սկսել
Read(f1,z[i]); Գրել (z[i]:4:1», «:3);
վերջ;
readln (f1); Գրել է;
վերջ;

Ընթացակարգ SK1(z:vec;num:byte; Var s:real; Var k:byte);
Սկսել
s:=0; k:=0;
համար i:=1-ից մինչև num անել, եթե z[i]>0 ապա
Սկսել
s:=s+z[i];
k:=k+1
վերջ;
վերջ;
Ֆունկցիան MAX(z:vec;num:byte):real;
varm:իրական;
Սկսել
m:=z;
համար i:=1-ից մինչև num անել, եթե z[i]>m ապա m:=z[i];
MAX: = մ
վերջ;

Սկսել
Նշանակել (f1, inp.txt"); վերականգնել (f1);
Նշանակել (f2, out.txt"); Վերաշարադրել (f2)
վերջ.

Ծրագրի տեքստ

Ծրագիր lr7_16;
Օգտագործում է CRT,UNMAS;
Վար
a,b,c:vec;
y,sa,sb,sc:real;
ka,kb,kc:byte;
Սկսել
clrscr;
Vv ("a", 8, a);
vv ("b", 9, b);
vv ("c", n, c);
SK1 (a,8,sa,ka);
SK1 (b, 9, sb, kb);
SK1 (c, n, sc, kc);
y:=(MAX(a,8)+MAX(b,9)+MAX(c,n))+(sa+sb+sc+ka+kb+kc);
Writeln ("Արդյունք:":20);
Գրել ("Array a: ");
Writeln("sa=",sa:5:1," ka=",ka);
Write ("Array b: ");
Writeln("sb=",sb:5:1," kb=",kb);
Write ("Array c: ");
Writeln ("sc=",sc:5:1," kc=",kc);
Writeln(" ":10,"y=",y:10);
կարդալ;
Writeln(f2,"ђҐ§g"mv դեպի:");
Writeln(f2," ":10,"y=",y:10);
փակել (f1);
Փակել (f2)
վերջ.

Ծրագրի արդյունքները

Զանգված ա
-2.1 3.1 -2.4 5.6 5.4 -6.7 3.5 -3.6
Զանգված բ
2.3 -4.3 2.1 2.5 -3.7 -5.6 4.6 3.5 -7.5
Զանգված գ
-2.1 4.3 -2.3 7.6 4.5 -8.9 5.7 -4.5 6.8 -5.8
Արդյունք:
Զանգված ա՝ sa= 17.6 ka=4
b զանգված՝ sb= 15.0 kb=5
c զանգված՝ sc= 28.9 kc=5
y=9.330E+01