Programovanie pomocou modulov. Vlastné moduly v pascale Modul v pascal abc notácii

Programovanie pomocou modulov. Vlastné moduly v pascale Modul v pascal abc notácii

Zásuvné moduly.

1. Základné ustanovenia

Zásuvný modul– súbor obsahujúci zdrojový text na jazyk Pascal, ktorý má špecifickú štruktúru a je 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 zásuvný modul

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

Štrukturálne možno zásuvný modul rozdeliť na tri časti: 1) Sekcia rozhrania - rozhranie (musí byť deklarované, môže byť prázdne) 2) Sekcia implementácie - implementácia (musí byť deklarovaná, môže byť prázdna) 3) Telo modulu - začať -koniec. (môže chýbať)

2.1. Sekcia rozhrania.

Sekcia rozhrania– oblasť pluginu, počnúc kľúčovým slovom rozhrania a končiac kľúčové slovo implementácia, 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 sú pripojené tento modul, a to aj v časti implementácie samotného modulu. Poznámka 2: ako v programe, vyššie uvedené časti (deklarácie konštánt, premenných atď., s výnimkou časti použitia) v tejto časti môžu byť usporiadané v ľubovoľnom poradí a v akomkoľvek množstve. 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 na použitie z programu alebo modulu, ktorý používa tento modul.

Príklad sekcie rozhrania:

Rozhranie (zásuvné moduly) 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. Sekcia implementácie.

Sekcia implementácie– oblasť zásuvného modulu, počnúc implementáciou kľúčového slova a končiac telom modulu (ak existuje) alebo kľúčovým slovom end s bodkou označujúcou koniec modulu, v ktorom sú implementácie procedúr a nachádzajú sa funkcie deklarované v sekcii rozhrania, ktoré môžu obsahovať: - zoznam zásuvných modulov; - konštanty; - vlastné dátové typy; - premenné; - postupy a funkcie potrebné na implementáciu postupov/funkcií uvedených v časti rozhrania. Hlavný účel: implementácia procedúr a funkcií popísaných v časti rozhrania. Poznámka 1: Pri implementácii procedúr a funkcií opí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 (nadpisy v skrátenej forme):

Jednotka DemoUnit; Rozhranie (prototyp procedúry) Procedure Swap(var a,b:integer); Implementačný postup Swap; Var Temp: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ť zásuvného modulu tvorená dvojicou kľúčových slov: „začiatok“ a „koniec“, do ktorej je možné umiestniť programový kód rovnakým spôsobom ako hlavný program. Telo modulu môže chýbať. V tomto prípade sa kľúčové slovo „začiatok“ nenapíš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; Var I: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 - po načítaní modulu, pred spustením kódu hlavný program. Poznámka 2: V prípade, že je v sekcii použitia pripojených viacero modulov, ktoré majú inicializačné sekcie, vykoná sa kód týchto sekcií v poradí, v akom sú moduly pripojené.

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

Kompilátory Free Pascal, Pascal ABC, Pascal ABC.Net umožňujú okrem tých, ktoré sú uvedené vyššie, ďalšie dve časti: - inicializačnú časť - finalizačnú časť. 2.4.1. Časť Inicializácia. Časť Inicializácia– oblasť zásuvného modulu umiestnená za koncom sekcie implementácií, počnúc kľúčovým slovom inicializácia a končiacou sekciou finalizácie, ak existuje, alebo kľúčovým slovom end, za ktorým nasleduje bodka. Účel je podobný ako pri tele modulu. 2.4.2. Finalizačná časť. Finalizačná časť– oblasť zásuvného modulu umiestnená na konci inicializačnej časti, ak existuje, alebo na konci implementačnej časti a končí kľúčovým slovom end, za ktorým nasleduje bodka. Hlavný účel: uvoľnenie zdrojov pridelený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 s hodnotami) procedure AllocateArray; var i:integer; begin for i:=1 až 20 do begin New(a[i]); a[i]^:=i; koniec; koniec; (dealokácia pamäte) procedúra 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 modul obsahuje ktorúkoľvek z týchto dvoch sekcií, prítomnosť tela modulu už nie je povolená.

3. Kompilácia modulov.

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

3.1. Kompilácia v Turbo Pascal.

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

3.2. Kompilácia vo 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í. Ten je navyše potrebný na zostavenie žiadosti.

3.3. Kompilácia v 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úboru, ktorý možno na prvú aproximáciu považovať za výsledok kompilácie s uvedenými obmedzeniami. .

3.4. Urýchlenie kompilácie programu.

Vo fáze spájania aplikácie linker zostaví spustiteľný modul, pričom ako vstup berie objektové moduly. Po zostavení doplnkov je teda kompilácia programov pomocou nich rýchlejšia, pretože už boli spracované. To platí pre Turbo a Free Pascal. V Pascal ABC.Net je však rýchlosť kompilácie dosiahnutá 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: „Doplnky“

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.

Moduly v Pascale 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 sú moduly popísané mimo volajúcej aplikácie, ale v samostatnom súbore, takže modul je samostatne skompilovaný program. Kompilovaný súbor modulu (presne to je potrebné na použitie) bude mať príponu, ktorú poskytuje programovacie prostredie (napríklad .tpu, .ppu, .pcu).

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

Štruktúra modulu vyzerá takto:

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

Názov jednotky

Názov modulu za kľúčovým slovom Unit sa musí zhodovať s názvom súboru (bez .pas), v ktorom sa nachádza 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 uviesť zoznam doplnkov oddelených čiarkami:

Využitie<список имен модулей>;

Časť rozhrania

Č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.

Vyhľadávanie jednotiek; Typ rozhrania arr = pole integer; var s: reťazec; procedure binary_search(x: integer; Ar: arr; var s: string); procedura line_search(x: integer; Ar: arr; var s: string);

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.

Implementácia

Táto časť sa začína slovom Implementácia. Tu musíte 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ú pre modul lokálne (neprístupné pre volajúci program).
Iniciačná časť

Iniciačná časť začína svoju prácu pred spustením hlavného programu. Spravidla (medzi Začiatkom a Koncom) popisuje operátory určené na rôzne druhy pomocných prác. Táto časť môže chýbať alebo nemusí obsahovať ž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 môžete použiť iba skompilované moduly, ktoré majú rozšírenie poskytované vaším prostredím na vývoj aplikácií. Pozrime sa na tri najpopulárnejšie z nich:

kompilácia modulov v Turbo Pascal

Výsledok kompilácie modulu do Turbo Pascal, bude tam súbor s príponou .tpu (Jednotka Turbo Pascal), uloženie jeho kódu.

kompilácia modulov vo Free Pascal

Po skompilovaní modulu v prostredí Pascal zadarmo, vytvoria sa dva súbory s rôznym rozlíšením: .ppu A .o. Prvá obsahuje časť rozhrania modulu a druhá (potrebná na zostavenie programu) obsahuje časť implementácií.

kompilácia modulov v 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 permit.pcu.

Existujú tri režimy kompilácie pre programovacie prostredia Turbo Pascal a Free Pascal: Compile, Make a Build. V režime kompilácie musia byť všetky moduly používané 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 rozlíšení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 režimom je Build. Vyhľadávanie a kompilácia súborov (s príponou .pas) v tomto režime prebieha aj vtedy, keď už existujú modulárne súbory.

Príklad: vytvorme malý modul obsahujúci procedúry na binárne a lineárne vyhľadávanie prvkov v poli. Kód modulu:

Vyhľadávanie jednotiek; Typ rozhrania arr = pole integer; var s: 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); begin a:=1; b:=5; s:="NIE"; zatiaľ čo a<=b do begin c:=a+(b-a) div 2; if (xAr[c]) potom a:=c+1 else begin s:="ÁNO"; prestávka; koniec;

koniec; koniec; procedura line_search(x: integer; Ar: arr; var s: string); begin s:="NIE"; for i:=1 až 5 do begin if (Ar[i]=x) then begin s:="YES"; 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áš modul Search.

Program module_search; používa Crt, Search; var mas: pole celého čísla; n, j: celé číslo; str:string; y:char; začať clrscr; writeln("Zadajte prvky poľa"); pre j:=1 až 5 do readln(mas[j]); write("Zadajte vyhľadávanie podľa čísla: "); readln(n); write("Toto pole je usporiadane? (y/n) "); readln(y); if y="y" then binary_search(n, mas, str) else line_search(n, mas, str); zapis(str); readkey; koniec. je nezávislá softvérová jednotka, ktorá sa zostavuje autonómne a má špecifickú štruktúru.

Modul má nasledujúcu štruktúru:

Hlavička modulu v jazyku 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, v ktorom sa nachádza text modulu.

Jednotka MyType; //súbor MyType.pas

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

Časť rozhrania jazyka Pascal začína rezervovaným slovom INTERFACE. Slúži na prepojenie modulu s hlavný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 navyše globálne typy a premenné. Ak je objekt deklarovaný globálne, môže byť použitý vo volajúcom programe a module bez špeciálnej deklarácie.

jednotka Wodmass;

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, okrem toho môžu byť v spustiteľnej časti deklarované objekty lokálne v module (premenné, konštanty). Opis podprogramu v spustiteľnej časti musí začínať názvom podprogramu a zoznam formálnych parametrov je vynechaný.

Začiatočná časť Pascal ukončuje modul a táto časť môže chýbať alebo je 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 spojenia 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žíva iné moduly. Pri kompilácii modulu sa nevytvorí spustiteľný program, ale vytvorí sa špeciálny súbor skompilovaného modulu s príponou .tpw. Súbory skompilovaných modulov sú umiestnené v adresároch, zvyčajne s názvom Units (nastavené v nastaveniach prostredia). Pri kompilácii programov obsahujúcich moduly je možné použiť všetky tri režimy kompilácie. Kompilácia v rôznych režimoch sa líši v trvaní a spoľahlivosti.

Režim Zostavte- jednoduché 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ú prítomné. Ak modul chýba, kompilácia sa zastaví a zobrazí sa hlásenie, že modul chýba.

V režime Urobiť kompilátor skontroluje prítomnosť zásuvných modulov a ak sa nejaký 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, dôjde k záveru, že v texte modulu boli vykonané zmeny a moduly znova prekompiluje. Vďaka tomu je 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ší.

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 definícií, ktoré môžete vložiť do svojho programu a umožní vám rozdeliť váš program na samostatne zostavené časti.

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 operačný systém MS-DOS. Je ich veľké množstvo, no málokedy ich vo svojom programe 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 zariadení prostredníctvom procedúr a funkcií podporovaných konštantami, dátovými typmi a premennými, ale skutočná implementácia týchto zariadení je skrytá kvôli skutočnosti, že modul je rozdelený na dve časti: rozhranie a implementáciu. Ak program používa modul, potom sú všetky definície modulu dostupné tomuto programu, ako keby boli definované v samotnom programe.

Štruktúra modulov je podobná štruktúre programu, existuje 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) rovnakým spôsobom ako názov programu. Ďalším prvkom v module je kľúčové slovo rozhrania. Označuje začiatok sekcie rozhrania modulu - sekcie viditeľnej pre všetky ostatné moduly alebo programy, ktoré ju používajú.

Modul môže na tento účel použiť iné moduly, ktoré sú definované v klauzule použitia. Klauzula použitia, ak je prítomná, sa nachádza hneď za kľúčovým slovom rozhrania. Všimnite si, že tu platí všeobecné pravidlo pre použitie klauzuly použitia: 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čítavajú do pamäte spolu s 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, ak je opísaný ako adresár Turbo Pascal. K tomu je potrebné nastaviť tento adresár v súbore TURBO.EXE pomocou TINST.EXE.

Použité balenia: č

Systém obsahuje všetky štandardné a vstavané procedúry a funkcie Turbo Pascalu. Akákoľvek rutina 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 procedúr a funkcií Pascalu, 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ť akékoľvek volanie MS-DOS alebo prerušenie systému. Register predstavuje typ údajov pre parameter v MsDos a Intr. Okrem toho je definovaných niekoľko ďalších konštánt a dátových typov.

Použité balenia: č

Overlay – obsahuje nástroje na vytváranie prekryvných programov. Program OVERKAY je program, ktorý sa 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, farba textu a pozadia). Okrem toho môžete poskytnúť „surový“ vstup z klávesnice a ovládať dosku generovania zvukového signálu vášho osobného počítača. Tento modul poskytuje mnoho rutín, ktoré boli štandardné vo verzii 3.0.

Použité balíky: Crt

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

Napíšte (Lst,"Súčet " ,A:4," a " ,B:4," je " ); C:=A + B; Writeln(Lst,C:8) ;

Použité balíky: Crt

Graph3 podporuje celú sadu grafických rutín pre verziu 3.0 – pre bežnú, pokročilú grafiku a grafiku pomocou relatívnych príkazov. Ich názov a parametre funkcií sú identické s rutinami 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, booleovská premenná CBreak a pôvodné celočíselné verzie MemAvail a MaxAvail (ktoré vracajú veľkosť voľnej pamäte v odsekoch a nie v bajtoch, ako to robia skutočné verzie).

Použité balíky: Crt

Graph poskytuje sadu 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č od spoločnosti Borland nezávislý od zariadenia, ktorý vám umožňuje podporovať grafické adaptéry ako 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 INTLIВ.PAS a preložili na disk; výsledný kód je v súbore INTLIВ.ТRU. Ak chcete použiť tento modul v programe, musíte zahrnúť príkaz Uses, ktorý kompilátoru oznámi, ktorý modul sa používa. Váš program môže vyzerať takto:

program MyProg; používa IntLib;

Všimnite si, že Turbo Pascal predpokladá, že súbor, v ktorom sa modul nachádza, 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 skompiluje rovnakým spôsobom ako program: vytvorí sa pomocou editora a potom sa zavolá príkaz 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 modul). 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 preniesť súbory *.TU (spolu so zdrojovými súbormi) do adresára jednotky, ktorý je definovaný pomocou príkazu O/D/Unit directories. Na zdrojový súbor môže byť len jeden modul, pretože kompilácia sa zastaví hneď, ako sa stretne s 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: celé číslo; začať Teplota:=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 INTLIВ.PAS a potom ho preložíme na disk. V dôsledku toho získame kód modulu v súbore INTLIВ.ТRU. Pošlime ho do adresára modulov. Nasledujúci program používa modul IntLib:

programIntTest; používa IntLib; var A,B: celé číslo ; beginWrite( "Zadajte dve celočíselné hodnoty: "); Readln(A,B) ; ISwap(A,B) ; Writeln("A=" ,A," B=" ,B) ; Writeln( "Maximálna hodnota je",IMax(A,B)); koniec. (koniec programu IntTest)

Všetky popisy v rámci modulu spolu súvisia. Napríklad modul Crt obsahuje všetky popisy potrebné pre rutiny pre prácu s obrazovkou na vašom osobnom počítači.

Program module_search; používa Crt, Search; var mas: pole celého čísla; n, j: celé číslo; str:string; y:char; začať clrscr; writeln("Zadajte prvky poľa"); pre j:=1 až 5 do readln(mas[j]); write("Zadajte vyhľadávanie podľa čísla: "); readln(n); write("Toto pole je usporiadane? (y/n) "); readln(y); if y="y" then binary_search(n, mas, str) else line_search(n, mas, str); zapis(str); readkey; koniec. nepredstavuje spustiteľný program, ale obsahuje iba sadu nástrojov 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), tlačiareň, graf, systém a ďalšie. Nie je potrebné ich popisovať, ale môžu byť okamžite zahrnuté do programu s použitím klauzuly. Modul System sa používa vo všetkých programoch, takže preň bola urobená výnimka. Ostatné moduly vyžadujú zahrnutie do klauzuly použitia, ak program používa prostriedky modulov, 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); názov úvodného modulu;
<имя> - názov modulu (správny identifikátor);
Rozhranie- kódové slovo, ktoré začína č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.

Otvorí sa časť rozhrania kódové slovo Rozhranie. Táto časť obsahuje deklarácie všetkých globálnych objektov modulu (typov, konštánt, premenných a podprogramov), ktoré by mali byť dostupné 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ú kompilátorom Turbo-Pascal umiestnené vo veľkom dátovom segmente (maximálna dĺžka segmentu 65521 bajtov).

Poradie, v ktorom sa zobrazujú jednotlivé sekcie inzerátov a ich počet, môže byť ľubovoľné.

Dopredný popis nemôžete použiť v časti rozhrania modulov.

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 úvodnej časti. Globálne procedúry a funkcie predtým deklarované v časti rozhrania musia byť opísané v rovnakom poradí, v akom sa ich hlavičky objavujú v časti rozhrania. Popisu globálneho bloku v spustiteľnej časti musí predchádzať 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 vo front-ende.

Lokálne premenné a konštanty, ako aj všetok programový kód generovaný počas kompilácie modulu, sú umiestnené v spoločnom pamäťovom segmente.

Kompilácia modulov

Prostredie Turbo Pascal obsahuje 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 má program (modul) klauzulu Uses Global, súbor GLOBAL.TPU by sa už mal nachádzať na disku v adresári deklarovanom voľbou Unit directories. Výsledkom kompilácie modulu je súbor s príponou .TPU (z angl. Turbo-Pascal Unit).

V režime MAKE kompilátor kontroluje prítomnosť súborov 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 sleduje prípadné 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 sa v adresári už príslušný súbor TPU nachádza alebo nie, systém ho pred kompiláciou hlavného programu skompiluje.

Okrem toho, ak sa vykonajú zmeny v časti rozhrania modulu, potom sa prekompilujú aj všetky ostatné moduly, ktoré k nemu pristupujú. Režim Make tak výrazne zjednodušuje proces vývoja veľkých programov s mnohými modulmi: programátor nemusí sledovať zhodu existujúcich súborov TPU a ich zdrojového textu, pretože to systém robí automaticky.

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

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, ale explicitné alebo nepriame odkazy na modul na seba samého sú zakázané.

Otázka 6

CRT modul je knižnica postupov a popisov, ktorá rozširuje možnosti používateľa pri práci s textom, textovou obrazovkou a klávesnicou. Pozrime sa na niektoré z nich.

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

2).Pozadie textu (farba: byte) – vyberie farba pozadia.

Parameter farba je vyjadrením typu celé číslo, napríklad:

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

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

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

5). Window(x1,y1,x2,y2) – Definuje textové okno 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é tak, aby vyplnilo celú obrazovku.

6).GoToXY(x,y: byte) - Umiestňuje kurzor. Kurzor sa presunie na pozíciu v aktuálnom okne, 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: Okno(1,10,60,20); GoToXY(1,1); To spôsobí, že sa kurzor presunie do bodu 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 Byte.

8).Delay(ms: word) – vykoná oneskorenie o zadaný počet milisekúnd. Parameter msec určuje počet milisekúnd na čakanie. 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ý zapne 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 použitia Sound, Delay, NoSound

Zvuk(220); (zapnúť zvuk)

Oneskorenie(300); (čakajte 300 ms)

Žiadny zvuk; (vypnúť zvuk)

Otázka 7

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ľavo horný roh obrazovka), 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 sú umiestnené v module Graph, preto je nevyhnutné aj jeho prepojenie.

Všeobecná štruktúra grafický program:

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

Cesta c:\bp\bgi určuje umiestnenie súboru egavga.bgi (ovládač grafiky). Zapnuté rôzne počítače táto cesta sa môže líšiť. Ak je súbor egavga.bgi umiestnený v adresári s programom, cestu nie je potrebné zadávať.

Základné grafické postupy a funkcie:

Konštrukcia 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 so začiatkom v bode (x1,y1) a koncom v (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 v (x, y), horizontálnym a vertikálnym polomerom xr a yr a počiatočným a koncovým uhlom ba a ea

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