Vlastné moduly v pascal. Pluginy - Koreň modulu Pascal Pascal

  • 21.06.2021

Moduly v jazyku Pascal vo vzťahu k hlavnej časti programu pripomínajú podprogramy (procedúry a funkcie). Ale podľa definície sú to nezávislé programy, ktorých zdroje môžu byť použité v iných programoch. Okrem toho sa popis modulov vyskytuje mimo volajúcej aplikácie, ale v samostatnom súbore, takže modul je samostatne skompilovaný program. Kompilovaný súbor modulu (čo je ten, ktorý musíte použiť) bude mať príponu poskytnutú programovacím prostredím (napríklad .tpu, .ppu, .pcu).

Moduly sa vytvárajú spravidla na zabezpečenie kompaktnosti kódu, o ktorú sa musia starať veľké projekty. Za zmienku tiež stojí, že použitie modulov v určitom zmysle odstraňuje obmedzenie segmentácie pamäte, pretože kód každého modulu je umiestnený v samostatnom segmente.

Štruktúra modulu vyzerá takto:

jednotka<имя модуля>;
Rozhranie
<интерфейсная часть>
Implementácia
<исполняемая часть>
Začať
<инициализация>
koniec.

Názov modulu (jednotka)

Názov modulu za kľúčovým slovom jednotka, musí zodpovedať názvu súboru (bez .pas), ktorý obsahuje jeho kód. Tiež pomocou názvu je modul pripojený k inému modulu alebo k hlavnému programu. Ak to chcete urobiť, musíte zadať servisné slovo používa a uveďte zoznam doplnkov oddelených čiarkami:

používa<список имен модулей>;

Časť rozhrania (Interface)

Časť rozhrania popisuje hlavičky objektov, ku ktorým budú mať prístup iné moduly a programy. Sú to konštanty, typy, premenné a podprogramy. Takto môže vyzerať napríklad časť rozhrania modulu Search, ktorá obsahuje algoritmy na vyhľadávanie prvkov v poli.

1
2
3
4
5
6

vyhľadávanie jednotiek;
Rozhranie

vars: reťazec

Ak chcete deklarovať tento modul, musíte v programe zadať jeho názov:

Potom bude možné používať všetky objekty opísané v časti rozhrania.

Spustiteľná časť (Implementácia)

Táto časť začína slovom Implementácia(realizácia). Tu je potrebné opísať podprogramy deklarované v časti rozhrania. Zároveň je dovolené neuvádzať formálne parametre v ich hlavičkách, inak sa musia úplne zhodovať s parametrami v časti rozhrania. Okrem toho môže časť rozhrania obsahovať objekty, ktoré sú lokálne (neprístupné pre volajúci program) pre modul.

Iniciačná časť

Iniciačná časť začína svoju prácu pred začiatkom vykonávania hlavného programu. V ňom (medzi Začiatkom a Koncom) sú spravidla popísané operátory, ktoré sú určené na rôzne druhy pomocných prác. Táto časť môže chýbať alebo v nej nie je žiadny kód. V prvom prípade musíte zadať Koniec bodkou, v druhom ponechajte prázdne miesto v Začiatku a Koniec.

Kompilácia modulov

V programe je možné použiť iba skompilované moduly, ktoré majú rozšírenie poskytované prostredím na vývoj aplikácií. Zvážte tri najobľúbenejšie z nich:

TurboPascal

Výsledkom kompilácie modulu v Turbo Pascal bude súbor s príponou .tpu (Jednotka Turbo Pascal), ktorý ukladá jeho kód.

Pascal zadarmo

Po skompilovaní modulu v prostredí Free Pascal sa vytvoria dva súbory s rôznymi povoleniami: .ppu a .o. Prvá obsahuje časť rozhrania modulu a druhá (potrebná na prepojenie programu) je implementačná časť.

Pascal ABC.NET

Pascal ABC.Net negeneruje kód strojového jazyka počas kompilácie modulu. Ak je kompilácia úspešná, kód sa uloží do súboru s povolením .pcu.

Existujú tri režimy kompilácie pre programovacie prostredia Turbo Pascal a Free Pascal: Kompilujte, vytvorte a zostavte. V režime kompilácie musia byť všetky moduly použité v programe vopred skompilované. Aplikácia v režime Make compilation kontroluje všetky pripojené moduly na prítomnosť súborov s príslušným povolením pre programovacie prostredie (.tpu alebo .o). Ak sa niektorý z nich nenájde, vyhľadá sa súbor s názvom nenájdeného modulu a príponou .pas. Najspoľahlivejším z režimov je Build. Vyhľadávanie a kompilácia súborov (s príponou .pas) v tomto režime prebieha aj vtedy, keď už súbory modulu existujú.

Príklad

Vytvorme si malý modul obsahujúci procedúry pre binárne a lineárne vyhľadávanie prvkov v poli. Kód modulu:

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

vyhľadávanie jednotiek;
Rozhranie
typ arr = pole [1..5] celého čísla;
vars: reťazec
procedure binary_search(x: integer ; Ar: arr; var s: string ) ;
procedura line_search(x: integer ; Ar: arr; var s: string ) ;
Implementácia
var a, b, c, i: celé číslo;
procedure binary_search(x: integer ; Ar: arr; var s: string ) ;
začať
a:= 1; b:= 5; s:= 'NIE' ;
zatiaľ čo a<= b do
začať
c:= a+ (b- a) div 2;
ak (x b:= c-1
else if (x>Ar[ c] ) then
a:= c+ 1
inak
begin s:= 'ÁNO' ; prestávka ; koniec ;
koniec ;
koniec ;
procedura line_search(x: integer ; Ar: arr; var s: string ) ;
začať
s:= 'NIE' ;
pre i:= 1 až 5 do
začať
if (Ar[i] = x) potom
začať
s:= 'ÁNO' ; prestávka ;
koniec ;
koniec ;
koniec ;
koniec.

Celý tento kód by mal byť v samostatnom súbore. Teraz si napíšeme hlavný program, do ktorého pripojíme náš vyhľadávací modul.

modul (jednotka) je množina konštánt, dátových typov, premenných, procedúr a funkcií. Každý modul je podobný samostatnému programu Pascal: môže mať hlavné telo, ktoré sa zavolá pred spustením vášho programu a vykoná potrebnú inicializáciu. Stručne povedané, modul je knižnica deklarácií, ktoré môžete vložiť do svojho programu a ktoré vám umožnia rozdeliť program na časti, ktoré sa zostavujú samostatne.

Turbo Pascal vám poskytuje prístup k veľkému množstvu vstavaných konštánt, dátových typov, premenných, procedúr a funkcií. Niektoré z nich sú špecifické pre Turbo Pascal; iné sú špecifické pre IBM PC (a kompatibilné počítače) alebo pre operačný systém MS-DOS. Ich počet je veľký, no vo svojom programe ich málokedy využijete naraz. Preto sú rozdelené do súvisiacich skupín nazývaných moduly. V tomto prípade môžete použiť iba tie moduly, ktoré sú v programe potrebné.

Modulová štruktúra

Modul poskytuje sadu funkcií prostredníctvom procedúr a funkcií podporovaných konštantami, typmi údajov a premennými, ale skutočná implementácia týchto funkcií je skrytá, pretože modul je rozdelený na dve časti: rozhranie a implementáciu. Ak program používa modul, potom sú všetky deklarácie modulu dostupné tomuto programu, ako keby boli definované v sebe.

Štruktúra modulu je podobná štruktúre programu, je tu však niekoľko podstatných rozdielov. Zvážte napríklad modul:

jednotka<идентификатор>; používa rozhranie<список модулей>; (Voliteľné) (otvoriť popisy) implementáciu (uzavretý postup a popis funkcií) začať (inicializačný kód) koniec.

Hlavička modulu začína rezervovanou jednotkou slova, za ktorou nasleduje názov modulu (identifikátor), rovnako ako v prípade názvu programu. Ďalším prvkom v module je kľúčové slovo rozhrania. Označuje začiatok sekcie rozhrania modulu - sekcie, ktorá je viditeľná pre všetky ostatné moduly alebo programy, ktoré ju používajú.

Modul môže používať iné moduly, na tento účel sú definované v klauzule použitia. Klauzula použitia, ak je prítomná, nasleduje hneď za kľúčovým slovom rozhrania. Všimnite si, že všeobecné pravidlo pre použitie klauzuly použitia je tu splnené: ak modul, ktorého názov je špecifikovaný v klauzule použitia, používa iné moduly, názvy týchto modulov musia byť tiež špecifikované v klauzule použitia a pred ich použitím.

Štandardné moduly

Súbor TURBO.TPL obsahuje všetky štandardné balíky okrem Graph a balíkov kompatibility (Graph3 a Turbo3): System, Overlay, Crt, Dos a Printer. Tieto balíčky sa načítajú do pamäte pomocou Turbo Pascal a sú vám vždy k dispozícii. Súbor TURBO.TPL je zvyčajne uložený v rovnakom adresári ako TURBO.EXE (alebo TPC.EXE). Môžete ho uložiť do iného adresára, pokiaľ je opísaný ako adresár Turbo Pascal. Na tento účel použite TINST.EXE na nastavenie tohto adresára v súbore TURBO.EXE.

Použité balenia: č

Systém obsahuje všetky štandardné a vstavané procedúry a funkcie Turbo Pascalu. Akýkoľvek podprogram Turbo Pascal, ktorý nie je súčasťou štandardného Pascalu a nenachádza sa v žiadnom inom module, je obsiahnutý v systéme. Tento modul je pripojený ku všetkým programom.

Použité balenia: č

DOS definuje množstvo pascaliánskych rutín a funkcií, ktoré sú ekvivalentné najbežnejšie používaným volaniam DOS, ako sú GetTime, SetTime, DiskSize atď. Okrem toho definuje dva nízkoúrovňové programy MsDos a Intr, ktoré umožňujú aktivovať ľubovoľné volanie MS-DOS alebo prerušenie systému. Register je typ údajov pre parameter v MsDos a Intr. Okrem toho sú definované niektoré ďalšie konštanty a dátové typy.

Použité balenia: č

Overlay – obsahuje nástroje na vytváranie prekryvných programov. Program OVERKAY je program, ktorý nenačítava celý, ale po častiach.

Použité balenia: č

Crt poskytuje súpravu PC špecifických popisov konštánt, premenných a programov pre I/O operácie. Ten sa dá využiť na prácu s obrazovkou (nastavenie okien, priame ovládanie kurzora, farby textu a pozadia). Okrem toho môžete urobiť „surový“ vstup z klávesnice a ovládať dosku na generovanie zvuku osobného počítača. Tento modul poskytuje mnoho rutín, ktoré boli štandardné vo verzii 3.0.

Použité balíky: Crt

Modul Tlačiareň definuje premennú textového súboru Lst, ktorá je spojená s ovládačom zariadenia, ktorý umožňuje odosielanie štandardného výstupu Pascal na tlačiareň pomocou Write a Writeln. Napríklad zahrnutím tlačiarne do programu môžete urobiť nasledovné:

Napíšte (Lst,"Sum of " ,A:4," a " ,B:4," rovná sa "); C:=A+B; WriteIn(Lst,C:8) ;

Použité balíky: Crt

Graph3 podporuje celú sadu grafických rutín pre verziu 3.0 – pre bežnú grafiku, pokročilú grafiku a grafiku pomocou relatívnych príkazov. Majú rovnaký názov, parametre funkcií a rutiny verzie 3.0.

Použité balíky: Crt

Tento modul obsahuje dve premenné a niekoľko procedúr, ktoré už Turbo Pascal nepodporuje. Patrí medzi ne vstavaná premenná súboru Kbd, boolovská premenná CBreak a pôvodné celočíselné verzie MemAvail a MaxAvail (ktoré vracajú voľnú pamäť v odsekoch, nie v bajtoch ako pôvodné verzie).

Použité balíky: Crt

Graph poskytuje súpravu rýchlych a efektívnych grafických rutín, ktoré vám umožnia naplno využiť grafické možnosti vášho osobného počítača.

Tento modul implementuje grafický ovládač Borland nezávislý od zariadenia, ktorý umožňuje podporu grafických adaptérov CGA, EGA, Hercules, ATT 400, MCGA, 3270 PC a VGA.

Písanie vlastných modulov

Povedzme, že ste napísali modul IntLib, zapísali ho do súboru INTLIB.PAS a preložili na disk; výsledný kód je v súbore INTLIB.TRU. Ak chcete použiť tento modul vo svojom programe, musíte do programu zahrnúť príkaz use, ktorý kompilátoru povie, ktorý modul má použiť. Váš program môže vyzerať takto:

program MyProg; používa IntLib;

Všimnite si, že Turbo Pascal predpokladá, že súbor obsahujúci modul má rovnaký názov ako samotný modul. Ak je názov vášho modulu MyUtilities, potom Turbo Pascal vyhľadá súbor s názvom MYUTILIT.PAS.

Kompilácia modulu

Modul sa kompiluje presne tak, ako sa kompiluje program: vytvorí sa pomocou editora a potom sa zavolá príkaz Compile / Сompile (Compile / Compile) (alebo sa stlačia klávesy Alt-C). Turbo Pascal však namiesto súboru s príponou .EXE vytvorí súbor s príponou .TRU (Turbo Pascal Unit - Turbo Pascal Unit). Potom môžete tento súbor ponechať tak, ako je, alebo ho vložiť do TURBO.TPL pomocou TPUMOVER.EXE.

V každom prípade má zmysel posielať súbory *.TRU (spolu so zdrojovými súbormi) do adresára jednotiek, ktorý je definovaný príkazom O/D/Unit directories. V jednom zdrojovom súbore môže byť len jeden modul, pretože kompilácia sa zastaví hneď, ako sa stretne s ukončujúcim príkazom end.

Príklad:

Napíšeme malý modul. Nazvime ho IntLib a vložme doň dva jednoduché podprogramy pre celé čísla – procedúru a funkciu:

jednotka IntLib; interface procedure ISwap(var I,J: integer ) ; funkcia IMax(I,J: integer ) : integer ; implementačný postup ISwap; var Temp: integer ; beginTemp:=I; I:=J; J:=temp end ; (koniec procedúry ISwap) funkcia IMax; begin if I > J then IMax:=I else IMax:=J end ; (koniec funkcie IMax) koniec. (koniec modulu IntLib)

Predstavme si tento podprogram, zapíšme ho do súboru INTLIB.PAS a potom ho preložíme na disk. V dôsledku toho získame kód modulu v súbore INTLIB.TRU. Pošlime ho do adresára modulov. Nasledujúci program používa modul IntLib:

program IntTest; používa IntLib; varA,B: integer ; začať písať ( "Zadajte dve celočíselné hodnoty: "); Readln(A,B) ; ISwap(A,B) ; WriteIn("A=" ,A," B=" ,B) ; writeln ( "Maximálna hodnota je",IMax(A,B)); koniec. (koniec programu IntTest)

Všetky deklarácie v rámci modulu sú navzájom prepojené. Napríklad modul Crt obsahuje všetky popisy potrebné pre rutiny obrazovky na vašom osobnom počítači.

V jazyku Pascal sa používajú knižnice podprogramov na implementáciu technológie štruktúrovaného programovania pomocou modulov. Textovo sú knižnice spojené do samostatných programových jednotiek nazývaných moduly jazyka Pascal. Moduly sú vytvorené na implementáciu knižníc rutín. Moduly zvyčajne kombinujú podprogramy, ktoré vykonávajú úlohy rovnakej triedy.

modul je nezávislá programová jednotka, ktorá sa autonómne zostavuje a má určitú štruktúru.

Modul má nasledujúcu štruktúru:

Názov modulu Pascal pozostáva zo servisného slova Unit, za ktorým nasleduje názov modulu. Na názov modulu sú prísne požiadavky a tento názov sa musí zhodovať s názvom súboru na disku s príponou .pas, ktorý obsahuje text modulu.

UnitMyType; //súbor MyType.pas

Názov modulu sa používa na prepojenie modulu s programami a inými modulmi. Programy a moduly odkazujú na požadovaný modul v sekcii Použitie programu alebo modulu. Moduly môžu volať iné moduly pre svoju prácu, ak modul volá iný modul, potom sekcia Uses musí nasledovať kľúčové slovo INTERFACE.

Časť rozhrania jazyka Pascal začína rezervovaným slovom INTERFACE. Slúži na prepojenie modulu s hostiteľským programom alebo inými modulmi. Časť rozhrania obsahuje deklaráciu všetkých globálnych objektov modulu. V prvom rade sú deklarované podprogramy a okrem toho aj globálne typy a premenné. Ak je objekt deklarovaný globálne, potom ho možno použiť vo volajúcom programe a module bez špeciálnej deklarácie.

Jednotková vodná hmota;

ROZHRANIE

POUŽÍVA MyType;

[názov_typu]:[typ];

[zoznam_globálnych_premenných]:[typ];

V časti rozhrania sú podprogramy deklarované ich hlavičkami, ktoré obsahujú názov podprogramu a zoznam formálnych parametrov.

Spustiteľná časť jazyka Pascal začína obslužným slovom IMPLEMENTATION a obsahuje popis podprogramov deklarovaných v časti rozhrania, navyše v spustiteľnej časti môžu byť deklarované objekty lokálne v module (premenné, konštanty). Popis podprogramu v spustiteľnej časti musí začínať názvom podprogramu, pričom zoznam formálnych parametrov je vynechaný.

Iniciačná časť jazyka Pascal ukončuje modul a táto časť môže chýbať alebo môže byť prázdna. Neodporúča sa robiť iniciačnú časť, pretože môže dôjsť k zamrznutiu. Obsahuje spustiteľné príkazy, nastavuje počiatočné hodnoty globálnych premenných, otvára potrebné súbory a vytvára prepojenia s inými súbormi.

Kompilácia modulov v Pascale

Pri práci s modulmi musíte skompilovať samotné moduly a zostaviť programy, ktoré moduly používajú. Ako viete, v prostredí Borland Pascal existujú tri režimy kompilácie (Compile, Build, Make). Pri kompilácii samotného modulu sa zvyčajne používa režim kompilácie, aj keď sú možné aj iné režimy, ak modul používajú iné moduly. Kompiláciou modulu sa nevytvorí spustiteľný program, ale vytvorí sa špeciálny kompilovaný modulový súbor s príponou .tpw. Kompilované súbory jednotiek sú umiestnené v adresároch, ktoré sa zvyčajne nazývajú Units (špecifikované v nastaveniach prostredia). Pri kompilácii programov obsahujúcich moduly je možné použiť všetky tri režimy kompilácie. Kompilácia rôznych režimov sa líši v trvaní a spoľahlivosti.

Režim Zostavte- najjednoduchšie a najrýchlejšie. V tomto režime kompilátor kontroluje prítomnosť zásuvných modulov v sekcii Použitie a kompiluje programy, ak sú dostupné. Ak modul chýba, kompilácia sa zastaví a zobrazí sa správa o chýbajúcom module.

V režime Urobiť kompilátor skontroluje prítomnosť zásuvných modulov a ak sa modul nenájde, kompilátor vyhľadá text modulu s príponou .pas, modul skompiluje a následne skompiluje program. Okrem toho kompilátor kontroluje dátumy vytvorenia modulov .tpw a .pas. Ak zistí, že dátum vytvorenia súboru .pas je neskorší ako dátum súboru .tpw, dedukuje, že v texte modulu boli vykonané zmeny a prekompiluje moduly. Je teda spoľahlivejšia.

V režime Stavať všetky .tpw súbory sú ignorované, kompilátor prekompiluje všetky moduly použité v hlavnom programe a skompiluje program. Toto je najspoľahlivejší režim, ale zároveň najdlhší.

modul nie je spustiteľný program, ale obsahuje iba sadu funkcií na použitie v spustiteľnom programe: dátové typy, premenné, procedúry a funkcie. Zdrojový text modulu má príponu .pas. Modul je kompilovaný oddelene od hlavného programu, skompilovaný modul má príponu .tpu (Turbo Pascal Unit). Hotový skompilovaný modul je možné použiť v hlavnom programe pomocou klauzuly use, ktorá sa píše hneď za názvom programu.

Turbo Pascal má štandardné moduly: DOS, CRT (katódová trubica, katódová trubica), tlačiareň, graf, systém a ďalšie. Nie je potrebné ich popisovať, ale môžu byť okamžite zahrnuté do programu s klauzulou použitia. Modul System sa používa vo všetkých programoch, takže preň je urobená výnimka, nemôžete ho zahrnúť do klauzuly použitia, bude zahrnutý automaticky. Ostatné moduly musia byť zahrnuté do klauzuly použitia, ak program používa prostriedky modulu, ako sú procedúry a funkcie.

Modulová štruktúra

Modul má nasledujúcu štruktúru:
jednotka< имя >;
Rozhranie
< интерфейсная часть >
Implementácia
< исполняемая часть >
[Začať< инициирующая часть > ]
koniec.

Tu:
jednotka- kódové slovo (anglický modul); štartér hlavičky modulu;
<имя> - názov modulu (správny identifikátor);
Rozhranie- kódové slovo, ktoré spúšťa časť rozhrania modulu;
Implementácia- kódové slovo (anglická implementácia); spustí spustiteľnú časť;
Začať- kódové slovo, ktoré začína iniciačnú časť;
(časť modulu Begin< инициирующая часть >voliteľné);
koniec.- znak konca modulu.

Modul teda pozostáva z hlavičky a troch komponentov, z ktorých každá môže byť prázdna.

Časť rozhrania sa otvorí kódovým slovom Rozhranie. Táto časť obsahuje deklarácie všetkých globálnych objektov modulu (typy, konštanty, premenné a podprogramy), ktoré by mali byť sprístupnené hlavnému programu a/alebo iným modulom.

Je potrebné poznamenať, že všetky konštanty a premenné deklarované v časti rozhrania modulu, ako aj globálne objekty hlavného programu sú umiestnené kompilátorom Turbo-Pascal v množstve dátových segmentov (maximálna dĺžka segmentu je 65521 bajtov) .

Poradie, v ktorom sa zobrazujú rôzne sekcie oznámení a ich počet, môže byť ľubovoľné.

V časti rozhrania modulov nie je možné použiť dopredný popis.

Spustiteľná časť

Spustiteľná časť začína kódovým slovom Implementácia a obsahuje súbory procedúr a funkcií deklarovaných v časti rozhrania. Táto časť môže tiež deklarovať objekty lokálne pre modul: pomocné typy, konštanty, premenné a bloky, ako aj návestia, ak sú použité v iniciačnej časti. Globálne procedúry a funkcie predtým deklarované v časti rozhrania musia byť deklarované v rovnakom poradí, v akom sa ich hlavičky zobrazujú v časti rozhrania. Pred popisom globálneho bloku v spustiteľnej časti musí byť hlavička, v ktorej je dovolené vynechať zoznam formálnych premenných (a typ výsledku pre funkciu), keďže sú už popísané v časti rozhrania.

Ale ak je hlavička bloku uvedená celá, t.j. so zoznamom formálnych parametrov a deklaráciou výsledku sa musí zhodovať s hlavičkou deklarovanou v časti rozhrania.

Lokálne premenné a konštanty, ako aj všetky programové kódy generované počas kompilácie modulu, sú umiestnené v segmente zdieľanej pamäte.

Kompilácia modulov

Prostredie Turbo Pascal poskytuje nástroje, ktoré riadia spôsob zostavovania modulov a uľahčujú vývoj veľkých softvérových projektov. Konkrétne sú definované tri režimy kompilácie: Compile, Make a Build.Režimy sa líšia iba spôsobom, akým je kompilovaný modul alebo hlavný kompilovaný program spojený s inými modulmi deklarovanými v klauzule Uses.

Pri kompilácii modulu alebo hlavného programu v režime kompilácie musia byť všetky moduly uvedené v klauzule Uses predkompilované a výsledky ich kompilácie musia byť umiestnené v súboroch s rovnakým názvom s príponou .TPU. Napríklad, ak program (v module) obsahuje klauzulu Uses Global, potom adresár deklarovaný voľbou Unit directories už musí obsahovať súbor GLOBAL.TPU na disku. Výsledkom kompilácie modulu je súbor s príponou .TPU (z anglického Turbo-Pascal Unit).

V režime MAKE kompilátor kontroluje súbory TPU pre každý deklarovaný modul. Ak sa niektorý zo súborov nenájde, systém sa pokúsi nájsť súbor s rovnakým názvom s koncovkou .PAS, t.j. súbor so zdrojovým kódom modulu a ak sa nájde súbor PAS, začne ho kompilovať. Okrem toho v tomto prípade systém monitoruje možné zmeny zdrojového kódu akéhokoľvek použitého modulu. Ak sa v súbore PAS (zdrojový kód modulu) vykonajú nejaké zmeny, potom bez ohľadu na to, či príslušný súbor TPU už v adresári existuje alebo nie, systém ho pred kompiláciou hlavného programu skompiluje.

Okrem toho, ak sa vykonajú zmeny v časti rozhrania modulu, prekompilujú sa aj všetky ostatné moduly, ktoré k nemu pristupujú. Režim Make preto výrazne zjednodušuje proces vývoja veľkých programov s mnohými modulmi: programátor sa zbaví potreby monitorovať súlad medzi existujúcimi súbormi TPU a ich zdrojovým kódom, pretože systém to robí automaticky.

V režime Build sú existujúce súbory TPU ignorované a systém sa pokúša nájsť (a skompilovať) príslušný súbor PAS pre každý modul deklarovaný v Uses. Po skompilovaní v režime Build si môže byť programátor istý, že sú zohľadnené všetky ním vykonané zmeny v niektorom z modulov.

Pripojenie modulov k hlavnému programu a ich prípadná kompilácia sa vykonáva v poradí ich deklarácie v klauzule Uses. Pri prechode na ďalší modul systém najskôr vyhľadá všetky moduly, na ktoré odkazuje. Vzájomné prepojenia modulov môžu tvoriť stromovú štruktúru akejkoľvek zložitosti, avšak výslovné alebo nepriame odkazy na modul na seba samého sú zakázané.

6 otázka

CRT modul je knižnica postupov a popisov, ktorá zvyšuje schopnosť používateľa pracovať s textom, textovou obrazovkou a klávesnicou. Uvažujme o niektorých z nich.

jeden). TextMode(režim: celé číslo) - vyberie zadaný textový režim CRT režimov:

2.TextBackground (color: byte) – Vyberie farbu pozadia.

Parameter „color“ je výraz celočíselného typu, napríklad:

  • 0- čierna
  • 1-modrá
  • 2-zelená
  • 3-modrá

3). ClrScr - Čistenie obrazovky. Všetky pozície postavy sú vyplnené medzerami. Toto používa aktuálnu farbu pozadia špecifikovanú v procedúre TextBackGround.

štyri). TextColor (color:byte) – Nastavuje farbu znakov. (konštanty na nastavenie farby)

5). Window(x1,y1,x2,y2) – Určuje textové pole na obrazovke. Parametre x1,y1 sú súradnice ľavého horného rohu okna, parametre x2,y2 sú súradnice pravého dolného rohu Minimálna veľkosť je jeden stĺpec na riadok. Maximum - X = 80, Y = 25. Ak sú súradnice neplatné, volanie procedúry Window sa ignoruje. Štandardne je okno nastavené na celú obrazovku.

6).GoToXY(x,y: byte) - Umiestňuje kurzor. Kurzor sa presunie na pozíciu v rámci aktuálneho okna, ktorá je určená súradnicami x a y (x - určuje stĺpec, y - určuje riadok) Ľavý horný roh je určený súradnicami (1,1) príklad: Window( 1,10,60,20); GoToXY(1,1); To spôsobí, že sa kurzor presunie na bod s absolútnymi súradnicami (1,10).

7).WhereX a WhereY vrátia súradnice X a Y pre aktuálnu polohu kurzora vzhľadom na aktuálne okno. Typ výsledku je Byte.

8).Delay(ms:word) - Oneskorí daný počet milisekúnd. Parameter ms určuje počet milisekúnd intervalu časového limitu. Tento postup je však približný, takže doba oneskorenia sa nebude presne rovnať určenému počtu milisekúnd.

9).READKey - Číta znak z klávesnice.

10).Zvuk - je postup, ktorý zahŕňa interný reproduktor; Popis: Zvuk (hertz: slovo); kde parameter "hertz" určuje frekvenciu generovaného signálu v hertzoch. Zvuk bude znieť, kým sa nevypne volaním procedúry NoSound;

11).NoSound - Vypne interný reproduktor.

Príklad Sound, Delay, NoSound

Zvuk(220); (zapnúť zvuk)

oneskorenie(300); (čakajte 300 ms)

žiadny zvuk; (vypnúť zvuk)

7 otázka.

Grafový modul

TP má množstvo rôznych nástrojov na prácu so štandardnou obrazovkou VGA.

Adaptér VGA má rozlíšenie 640 x 480 pixelov (bod (0,0) v ľavom hornom rohu obrazovky), 16 farieb.

Skôr ako začnete pracovať s grafikou, musíte ju inicializovať a po dokončení ju zavrieť. Všetky grafické postupy a funkcie sa nachádzajú v module Graph, preto je nevyhnutné aj jeho zaradenie.

Všeobecná štruktúra grafického programu:

Použite crt, graf;
var Gd, Gm: celé číslo;
začať
Gd:= Detekcia;
InitGraph(Gd, Gm, "c:\bp\bgi");
...
(Tu je konštrukcia obrázku)
...
ReadKey;
Zavrieť graf;
koniec.

Cesta c:\bp\bgi určuje umiestnenie súboru egavga.bgi (ovládač grafiky). Na rôznych počítačoch môže byť táto cesta odlišná. Ak je súbor egavga.bgi umiestnený v adresári s programom, cestu možno vynechať.

Základné grafické postupy a funkcie:

Budovanie figúrok

PutPixel(x,y,c)
- zobrazí na obrazovke bod so súradnicami (x,y) a farbou c

Čiara(x1,y1,x2,y2)
- nakreslí čiaru začínajúcu na (x1,y1) a končiacu na - (x2,y2)

Obdĺžnik (x1,y1,x2,y2)
- nakreslí obrys obdĺžnika s uhlopriečkou (x1,y1) - (x2,y2)

Pruh(x1,y1,x2,y2)
- nakreslí vyplnený obdĺžnik s uhlopriečkou (x1,y1) - (x2,y2)

Kruh (x, y, r)
- nakreslí kružnicu so stredom (x,y) a polomerom r

Elipsa (x, y, ba, ea, xr, rok)
- nakreslí elipsový oblúk so stredom (x, y), horizontálne a vertikálne polomery xr a yr a počiatočné a koncové uhly ba a ea

FillEllipse(x,y,xr,yr)
- nakreslí vyplnenú elipsu so stredom (x, y), horizontálny a vertikálny polomer xr a yr

Pluginy.

1. Základné ustanovenia

Zapojiť– súbor obsahujúci zdrojový text v jazyku Pascal, ktorý má určitú štruktúru, určený na použitie v hlavnom programe aj v iných zásuvných moduloch. Použitie je zahrnúť modul do sekcie použitia zadaním jeho názvu.

2. Všeobecná štruktúra doplnku

jednotka<имя модуля>; Koniec implementácie rozhrania.

Štrukturálne možno v zásuvnom module rozlíšiť tri sekcie: 1) Sekcia rozhrania - rozhranie (musí byť deklarovaná, môže byť prázdna) 2) Implementačná sekcia - implementácia (musí byť deklarovaná, môže byť prázdna) 3) Telo modulu - začiatok- koniec. (môže chýbať)

2.1. sekcia rozhrania.

sekcia rozhrania– oblasť zásuvných modulov začínajúca kľúčovým slovom rozhrania a končiaca kľúčovým slovom implementácie, ktorá môže obsahovať: - zoznam zásuvných modulov; - konštanty; - vlastné dátové typy; - premenné; - prototypy postupov a funkcií dostupné z miesta pripojenia tohto modulu. Poznámka 1: premenné deklarované v sekcii rozhrania sú globálne. To znamená, že existujú kdekoľvek v programe, kde je tento modul pripojený, vrátane implementačnej časti samotného modulu. Poznámka 2: ako v programe, vyššie uvedené časti (deklarácie konštánt, premenných atď., okrem časti použitia) v tejto časti môžu byť umiestnené v ľubovoľnom poradí a v ľubovoľnom počte. Poznámka 3: ak sú v tejto sekcii deklarované prototypy procedúr/funkcií, potom musí byť zaručená prítomnosť ich implementácií v sekcii implementácie. Hlavný účel: definuje verejné údaje/funkciu, ktorá sa má použiť z programu alebo modulu, ktorý používa tento modul.

Príklad sekcie rozhrania:

Rozhranie (pluginy) používa AnotherUnit; (konštanty) Const PI = 3,14159265; E = 2,71828182; (vlastné typy údajov) Typ TMyType=array[-3..7] of real; (premenné) Var temp:TMyType; (postupy a funkcie) Procedure Fill(var x:TMyType); Funkcia Find(const x:TMyType; const Value:real):Boolean; Implementácia

2.2. Implementačná sekcia.

Implementačná sekcia– oblasť zásuvného modulu začínajúca kľúčovým slovom implementácie a končiaca telom modulu (ak existuje) alebo kľúčovým slovom end s bodkou označujúcou koniec modulu, kde sa nachádzajú implementácie procedúr a funkcií deklarovaných v časti rozhrania, ktorý môže obsahovať: - zoznam zásuvných modulov; - konštanty; - vlastné typy údajov; - premenné; - postupy a funkcie potrebné na implementáciu postupov/funkcií uvedených v časti rozhrania. Hlavný účel: implementáciu postupov a funkcií opísaných v časti rozhrania. Poznámka 1: pri implementácii procedúr a funkcií popísaných v časti rozhrania môžu byť ich hlavičky popísané v skrátenej forme. Výnimka - PascalABC: pri použití premenných hlavičiek v texte implementácie sa vyskytne chyba kompilácie.

Príklad 1 (názvy v skrátenej forme):

Jednotka DemoUnit; Rozhranie (prototyp procedúry) Procedure Swap(var a,b:integer); Implementačný postup Swap; VarTemp:integer; Počiatočná teplota:=a; a:=b; b:=teplota; koniec; koniec.

Príklad 2 (nadpisy v plnom znení):

Jednotka DemoUnit; rozhranie (prototyp funkcie) Funkcia GetMax(a,b:integer):integer; Implementačná funkcia GetMax(a,b:integer):integer; Begin If a>b then GetMax:=a Else GetMax:=b; koniec; koniec.

2.3. Telo modulu.

Telo modulu- posledná oblasť doplnku tvorená dvojicou kľúčových slov: "začiatok" a "koniec.", do ktorej môžete umiestniť kód programu rovnakým spôsobom ako hlavný program. Telo modulu môže chýbať. V tomto prípade sa kľúčové slovo „začiatok“ nepíše, ale „koniec“. signalizuje koniec modulu. Hlavný účel: inicializácia premenných modulu, alokácia zdrojov potrebných na jeho chod a pod.

Príklad modulu obsahujúceho telo:

Jednotka DemoUnit; Konšt. rozhrania N=50; Var Roots:pole skutočných; Implementácia využíva matematiku; varI:integer; (telo modulu) Begin For i:=1 až N do Roots[i]:=sqrt(i); koniec.

Príklad modulu bez tela: (pozri príklad modulu pre hlavičky v plnej forme).

Poznámka 1: Programový kód umiestnený v tele modulu sa vykoná raz - pri načítaní modulu, pred spustením vykonávania hlavného programového kódu. Poznámka 2: V prípade, že je v sekcii použitia pripojených niekoľko modulov s inicializačnými sekciami, vykonávanie kódu týchto sekcií prebieha v poradí pripájania modulov.

2.4. Ďalšie sekcie v štruktúre modulu.

Kompilátory Free Pascal, Pascal ABC, Pascal ABC.Net umožňujú dve ďalšie sekcie okrem tých, ktoré sú uvedené vyššie: - inicializačná sekcia - finalizačná sekcia. 2.4.1. Časť Inicializácia. Sekcia inicializácie– oblasť zásuvných modulov umiestnená za koncom sekcie implementácií, začínajúca kľúčovým slovom inicializácia a končiaca sekciou finalizácie, ak existuje, alebo kľúčovým slovom koniec s bodkou. Účel je podobný ako pri tele modulu. 2.4.2. finalizačná časť. Finalizačná časť– oblasť zásuvných modulov umiestnená na konci inicializačnej časti, ak existuje, alebo na konci implementačnej časti a končiaca kľúčovým slovom end, za ktorým nasleduje bodka. Hlavný účel: uvoľnenie zdrojov vyčlenených na prevádzku modulu.

jednotka DemoUnit; rozhranie var a:array of ^integer;(pole ukazovateľov) implementácia (alokácia pamäte a inicializácia hodnôt) procedure AllocateArray; var i:integer; begin for i:=1 až 20 do begin New(a[i]); a[i]^:=i; koniec; koniec; (memory deallocation) procedure DeallocateArray; var i:integer; begin for i:=1 až 20 do Dispose(a[i]); koniec; inicializácia AllocateArray;(inicializácia - začiatok práce - alokácia pamäte) finalizácia DeallocateArray;(finalizácia - koniec práce - uvoľnenie pamäte) koniec.

Poznámka 1: programový kód umiestnený v uvedených sekciách sa vykoná raz. Kód inicializačných sekcií je pred začiatkom vykonávania hlavného programového kódu, kód finalizačných sekcií je po. Poznámka 2: ak má modul jednu z týchto dvoch sekcií, telo modulu už nie je povolené.

3. Kompilácia modulov.

Každý plug-in sa kompiluje samostatne a výsledok kompilácie závisí od použitého kompilátora.

3.1. Kompilácia do Turbo Pascalu.

Výsledkom kompilácie zásuvného modulu v Turbo Pascal je *.tpu - súbor (Turbo Pascal Compiled Unit), ktorý je strojovou reprezentáciou dát a kódu v ňom umiestnených.

3.2. Kompilácia do Free Pascal.

Výsledkom kompilácie zásuvného modulu vo Free Pascal sú dva súbory: *.ppu - súbor obsahujúci časť rozhrania modulu a súbor *.o - objektový súbor obsahujúci časť implementácií. Navyše je to potrebné pre rozloženie aplikácie.

3.3. Kompilácia do Pascal ABC.Net.

Na rozdiel od prostredí uvedených vyššie, Pascal ABC.Net negeneruje kód strojového jazyka počas kompilácie modulu. Kompilátor tohto prostredia dokončí svoju prácu po vykonaní sémantickej analýzy uložením sémantického stromu modulu v medziformáte - *.pcu - súbor, ktorý možno v prvom priblížení považovať za výsledok kompilácie s uvedenými obmedzeniami. .

3.4. Zrýchlenie kompilácie programov.

Počas fázy spájania aplikácie linker zostaví spustiteľný modul tak, že ako vstup berie objektové moduly. Preto, keď už sú zásuvné moduly skompilované, kompilácia programov pomocou nich je rýchlejšia, pretože sú už spracované. To platí pre Turbo a Free Pascal. V Pascal ABC.Net sa však zrýchlenie kompilácie dosahuje len vďaka tomu, že nie je potrebné vykonávať syntaktickú a sémantickú analýzu. Záver: skompilované verzie spustiteľných modulov nie sú kompatibilné medzi rôznymi kompilátormi.

Kód pre úlohu: "Plug-in moduly"

textové

Výpis programu

Jednotka u1; postup rozhrania PrintFirst; postup PrintFirstSecond; implementácia používa u2; (<--- Раньше было в Interface } procedure PrintFirst; begin writeln("Print first"); end; procedure PrintFirstSecond; begin writeln("Print first"); PrintSecond; end; end.