Paskal misollarida standart modullar bilan ishlash. Paskalda moslashtirilgan modullar. Grafik dasturning umumiy tuzilishi

Modul bajariladigan dastur emas, faqat bajariladigan dasturda foydalanish uchun vositalar to'plamini o'z ichiga oladi: ma'lumotlar turlari, o'zgaruvchilar, protseduralar va funktsiyalar. Modulning manba matni .pas kengaytmasiga ega. Modul asosiy dasturdan alohida kompilyatsiya qilinadi, kompilyatsiya qilingan modul .tpu (Turbo Pascal Unit) kengaytmasiga ega. Tayyor kompilyatsiya qilingan moduldan dastur nomidan keyin darhol yoziladigan uses bandi yordamida asosiy dasturda foydalanish mumkin.

Turbo Paskalda standart modul mavjud: DOS, CRT (Cathode Ray Tube, Cathode Ray Tube), Printer, Grafik, Tizim va boshqalar. Ularni tavsiflash shart emas, lekin darhol uses bandi bilan dasturga kiritilishi mumkin. Tizim moduli barcha dasturlarda qo'llaniladi, shuning uchun unga istisno qilingan, uni uses bandiga kirita olmaysiz, u avtomatik ravishda kiritiladi. Agar dastur modul resurslaridan, masalan, protseduralar va funktsiyalardan foydalansa, uses bandiga boshqa modullar kiritilishi kerak.

Modul tuzilishi

Modul quyidagi tuzilishga ega:
birlik< имя >;
Interfeys
< интерфейсная часть >
Amalga oshirish
< исполняемая часть >
[Boshlash< инициирующая часть > ]
oxiri.

Bu yerda:
birlik- kodli so'z (ingliz moduli); modul sarlavhasi starter;
<имя> - modul nomi (to'g'ri identifikator);
Interfeys- modulning interfeys qismini ishga tushiruvchi kod so'zi;
Amalga oshirish- kodli so'z (ingliz tilida amalga oshirish); bajariladigan qismni ishga tushiradi;
Boshlash- boshlovchi qismni boshlovchi kodli so‘z;
(Begin modulining bir qismi< инициирующая часть >ixtiyoriy);
oxiri.- modul tugashining belgisi.

Shunday qilib, modul sarlavha va uchta komponentdan iborat bo'lib, ularning har biri bo'sh bo'lishi mumkin.

Interfeys qismi kod so'zi bilan ochiladi Interfeys. Ushbu qism modulning barcha global ob'ektlari (turlar, doimiylar, o'zgaruvchilar va pastki dasturlar) deklaratsiyasini o'z ichiga oladi, ular asosiy dastur va/yoki boshqa modullarga taqdim etilishi kerak.

Shuni ta'kidlash kerakki, modulning interfeys qismida e'lon qilingan barcha konstantalar va o'zgaruvchilar, shuningdek, asosiy dasturning global ob'ektlari Turbo-Paskal kompilyatori tomonidan ma'lumotlar segmentlarining ko'pligiga (segmentning maksimal uzunligi 65521 bayt) joylashtirilgan. ).

Turli xil e'lon bo'limlarining paydo bo'lish tartibi va ularning soni o'zboshimchalik bilan bo'lishi mumkin.

Modullarning interfeys qismida oldinga tavsifdan foydalanib bo'lmaydi.

Bajariladigan qism

Bajariladigan qism kodli so'z bilan boshlanadi Amalga oshirish va interfeys qismida e'lon qilingan protseduralar va funktsiyalar organlarini o'z ichiga oladi. Bu qism, shuningdek, modul uchun lokal ob'ektlarni e'lon qilishi mumkin: yordamchi tiplar, konstantalar, o'zgaruvchilar va bloklar, shuningdek teglar, agar ular boshlash qismida ishlatilsa. Interfeys qismida avval e’lon qilingan global protseduralar va funksiyalar sarlavhalari interfeys qismida qanday paydo bo‘lsa, xuddi shunday tartibda e’lon qilinishi kerak. Bajariladigan qismdagi global blokning tavsifi oldidan sarlavha bo'lishi kerak, unda rasmiy o'zgaruvchilar ro'yxatini (va funktsiya uchun natija turini) qoldirib ketishga ruxsat beriladi, chunki ular allaqachon interfeys qismida tasvirlangan.

Ammo blok sarlavhasi to'liq berilgan bo'lsa, ya'ni. rasmiy parametrlar ro'yxati va natija deklaratsiyasi bilan u interfeys qismida e'lon qilingan sarlavhaga mos kelishi kerak.

Mahalliy o'zgaruvchilar va konstantalar, shuningdek modulni kompilyatsiya qilish jarayonida yaratilgan barcha dastur kodlari umumiy xotira segmentiga joylashtiriladi.

Modullarni kompilyatsiya qilish

Turbo Paskalda modullarning kompilyatsiya qilinishini nazorat qiluvchi va yirik dasturiy loyihalarni ishlab chiqishni osonlashtiradigan vositalar mavjud. Xususan, kompilyatsiya qilishning uchta rejimi aniqlanadi: Compile, Make, and Build.Rejimlar faqat kompilyatsiya qilinayotgan modul yoki kompilyatsiya qilinayotgan asosiy dastur Uses bandida e’lon qilingan boshqa modullar bilan bog‘langanligi bilan farqlanadi.

Kompilyatsiya rejimida modul yoki asosiy dasturni kompilyatsiya qilishda Uses bandida keltirilgan barcha modullar oldindan kompilyatsiya qilinishi va ularni kompilyatsiya qilish natijalari .TPU kengaytmali bir xil nomdagi fayllarga joylashtirilishi kerak. Misol uchun, agar dastur (modulda) Global Uses bandini o'z ichiga olgan bo'lsa, unda Unit directories opsiyasi tomonidan e'lon qilingan katalog allaqachon diskdagi GLOBAL.TPU faylini o'z ichiga olishi kerak. Modul kompilyatsiyasi natijasida .TPU (inglizcha Turbo-Paskal birligidan) kengaytmali fayl yaratiladi.

MAKE rejimida kompilyator har bir e'lon qilingan modul uchun TPU fayllarini tekshiradi. Agar biron bir fayl topilmasa, tizim .PAS kengaytmasi bilan bir xil nomdagi faylni topishga harakat qiladi, ya'ni. modulning manba kodi bilan faylni tanlang va PAS fayli topilsa, uni kompilyatsiya qilishni boshlaydi. Bunga qo'shimcha ravishda, bu holda, tizim ishlatiladigan har qanday modulning manba kodiga mumkin bo'lgan o'zgarishlarni kuzatib boradi. Agar PAS fayliga (modulning manba kodi) biron bir o'zgartirish kiritilgan bo'lsa, unda tegishli TPU fayli katalogda mavjud yoki yo'qligidan qat'i nazar, tizim uni asosiy dasturni kompilyatsiya qilishdan oldin tuzadi.

Bundan tashqari, agar modulning interfeys qismiga o'zgartirishlar kiritilsa, unga kiradigan barcha boshqa modullar ham qayta kompilyatsiya qilinadi. Shunday qilib, Make rejimi ko'p modulli katta dasturlarni ishlab chiqish jarayonini sezilarli darajada osonlashtiradi: dasturchi mavjud TPU fayllari va ularning manba kodlari yozishmalarini kuzatish zaruratidan xalos bo'ladi, chunki tizim buni avtomatik ravishda amalga oshiradi.

Qurilish rejimida mavjud TPU fayllari e'tiborga olinmaydi va tizim Foydalanishda e'lon qilingan har bir modul uchun mos PAS faylini topishga (va kompilyatsiya qilishga) harakat qiladi. Qurilish rejimida kompilyatsiya qilgandan so'ng, dasturchi modullarning har qandayida u tomonidan kiritilgan barcha o'zgarishlar hisobga olinganligiga ishonch hosil qilishi mumkin.

Modullarni asosiy dasturga ulash va ularning mumkin bo'lgan kompilyatsiyasi ularni Uses bandida e'lon qilish tartibida amalga oshiriladi. Keyingi modulga o'tayotganda, tizim birinchi navbatda o'zi tegishli bo'lgan barcha modullarni qidiradi. Modullarning bir-biriga bog'lanishi har qanday murakkablikdagi daraxt strukturasini yaratishi mumkin, ammo modulning o'ziga aniq yoki bilvosita murojaat qilish taqiqlanadi.

6 savol

CRT moduli foydalanuvchining matn, matn ekrani va klaviatura bilan ishlash qobiliyatini oshiruvchi protseduralar va tavsiflar kutubxonasi. Keling, ulardan ba'zilarini ko'rib chiqaylik.

biri). TextMode(rejim: integer) - belgilangan matn rejimini CRT rejimlarini tanlaydi:

2).TextBackground (rang: bayt) - fon rangini tanlaydi.

"Rang" parametri butun son turining ifodasidir, masalan:

  • 0 - qora
  • 1-ko'k
  • 2-yashil
  • 3-ko'k

3). ClrScr - Ekranni tozalash. Barcha belgilar pozitsiyalari bo'shliqlar bilan to'ldirilgan. Bu TextBackGround protsedurasida ko'rsatilgan joriy fon rangidan foydalanadi.

4). TextColor (rang:bayt) - belgilar rangini o'rnatadi. (rangni o'rnatish uchun konstantalar)

5). Window(x1,y1,x2,y2) - Ekrandagi matn maydonini belgilaydi. x1,y1 parametrlari oynaning yuqori chap burchagining koordinatalari, x2,y2 parametrlari pastki o'ng burchagining koordinatalari Minimal o'lcham - har bir satr uchun bitta ustun. Maksimal - X=80, Y=25. Agar koordinatalar noto'g'ri bo'lsa, u holda Window protsedurasiga chaqiruv e'tiborga olinmaydi. Odatiy bo'lib, oyna to'liq ekranga o'rnatiladi.

6).GoToXY(x,y: bayt) - Kursorni joylashtiradi. Kursor joriy oyna ichidagi x va y koordinatalari (x - ustunni, y - qatorni bildiradi) bilan ko'rsatilgan holatga o'tadi.Yuqoridagi chap burchak koordinatalar (1,1) orqali ko'rsatiladi.Misol: Window( 1,10,60,20); GoToXY(1,1); Bu kursorning mutlaq koordinatalari (1,10) bo'lgan nuqtaga o'tishiga olib keladi.

7).WhereX va WhereY mos ravishda joriy oynaga nisbatan joriy kursor holati uchun X va Y koordinatalarini qaytaradi. Natija turi bayt.

8).Delay(ms: word) - Berilgan millisekundlar sonini kechiktiradi. ms parametri kutish vaqti oralig'ining millisekundlar sonini belgilaydi. Ammo bu protsedura taxminiydir, shuning uchun kechikish muddati belgilangan millisekundlar soniga to'liq mos kelmaydi.

9).READKey - klaviaturadan belgini o'qiydi.

10).Ovoz - ichki dinamikni o'z ichiga olgan protsedura; Tavsif: Ovoz (gerts: so'z); bu yerda "gerts" parametri hosil bo'lgan signalning gertsdagi chastotasini bildiradi NoSound protsedurasini chaqirish orqali tovush o'chguncha eshitiladi;

11).NoSound - ichki dinamikni o'chiradi.

Ovoz, kechikish, tovushsiz misol

Ovoz (220); (ovozni yoqing)

kechikish (300); (300ms kuting)

ovoz yo'q; (ovozni o'chiring)

7 savol.

Grafik moduli

TP standart VGA ekran bilan ishlash uchun juda ko'p turli xil vositalarga ega.

VGA adapteri 640x480 piksel (ekranning yuqori chap burchagidagi nuqta (0,0)), 16 ta rangga ega.

Grafika bilan ishlashni boshlashdan oldin uni ishga tushirishingiz kerak va tugagach, uni yoping. Barcha grafik protseduralar va funktsiyalar Graph modulida joylashgan, shuning uchun uni kiritish ham zarur.

Grafik dasturning umumiy tuzilishi:

crt, grafikdan foydalaning;
var Gd, Gm: Integer;
boshlash
Gd:= Aniqlash;
InitGraph(Gd, Gm, "c:\bp\bgi");
...
(Bu erda rasmning qurilishi)
...
ReadKey;
Grafikni yopish;
oxiri.

c:\bp\bgi yo'li egavga.bgi (grafik drayveri) faylining joylashishini bildiradi. Turli xil kompyuterlarda bu yo'l boshqacha bo'lishi mumkin. Agar egavga.bgi fayli dastur bilan katalogga joylashtirilgan bo'lsa, u holda yo'l o'tkazib yuborilishi mumkin.

Asosiy grafik protseduralar va funktsiyalar:

Qurilish raqamlari

PutPixel(x,y,c)
- ekranda nuqtani koordinatalari (x,y) va c rangi bilan ko'rsatadi

Chiziq(x1,y1,x2,y2)
- (x1,y1) dan boshlanib - (x2,y2) bilan tugaydigan chiziq chizadi.

To'rtburchak (x1,y1,x2,y2)
- diagonali (x1,y1) - (x2,y2) bo'lgan to'rtburchak konturni chizadi.

Bar(x1,y1,x2,y2)
- diagonali (x1,y1) - (x2,y2) bilan to'ldirilgan to'rtburchak chizadi.

Doira(x,y,r)
- markazi (x,y) va radiusi r bo'lgan aylana chizadi

Ellips(x,y,ba,ea,xr,yr)
- markazi (x,y), gorizontal va vertikal radiuslari xr va yr, bosh va oxir burchaklari ba va ea da joylashgan ellips yoyini chizadi.

FillEllips(x,y,xr,yr)
- markazi (x,y), gorizontal va vertikal radiusi xr va yr bo'lgan to'ldirilgan ellipsni chizadi

Modul (BIRLIK-modul, birlik) - avtonom (alohida) kompilyatsiya qilingan dastur birligi bo'lib, tavsif bo'limining komponentlarini (yorliqlar, doimiylar, tiplar, o'zgaruvchilar, protseduralar, funktsiyalar) o'z ichiga oladi, shuningdek, ishga tushirish qismi operatorlarini ham o'z ichiga olishi mumkin.
Modulning o'zi bajariladigan dastur emas, balki boshqa dastur va modullar tomonidan foydalanish uchun mo'ljallangan.

Modul tuzilishi

Modul quyidagi tuzilishga ega:
BIRLIK< modul nomi >
INTERFACE
< interfeys bo'limi >
AMALGA OLISH
< amalga oshirish bo'limi >
BOSHLASH
< ishga tushirish bo'limi >
OXIRI.

Modul sarlavhasi ajratilgan so‘zdan iborat birlik(modul) va modul nomi.

Modul nomi umumiy qoidalarga muvofiq tanlanadi va modulning manba kodini o'z ichiga olgan disk fayli nomiga mos kelishi kerak.
Modul nomi kengaytmasi (. pas ) belgilanmagan, u sukut bo'yicha o'rnatiladi.

Modul nomi uni band bilan asosiy dastur bilan bog'lash uchun ishlatiladi foydalanadi .
Gap foydalanadi m.b. modul sarlavhasidan keyin yoki so'zlarning orqasida joylashtiriladi

Interfeys va Amalga oshirish .

Interfeys qismi Interfeys(interfeys, artikulyatsiya, ulanish) va boshqa modullarga havolalar va global ob'ektlarning deklaratsiyasi (ta'riflari), ya'ni teglar, konstantalar, turlar, o'zgaruvchilar va asosiy dastur va boshqa modullar (ya'ni ko'rinadigan) uchun mavjud bo'lgan protseduralar va funktsiyalarning sarlavhalarini o'z ichiga oladi. tashqaridan).

Amalga oshirish bo'limi - kalit so'z bilan boshlanadi Amalga oshirish(bajarilishi) va modul uchun lokal ob'ektlarning tavsifini, ya'ni asosiy dastur va boshqa modullarda mavjud bo'lmagan teglar, konstantalar, tiplar, o'zgaruvchilar (ya'ni tashqaridan ko'rinmaydigan) va protseduralar va funktsiyalarning to'liq tavsifini o'z ichiga oladi. . Bunday holda, pastki dasturlarning sarlavhasida rasmiy parametrlar ro'yxati bo'lishi mumkin tashlab qo'yilgan, lekin u berilgan bo'lsa, u interfeys qismidagi tavsifga to'liq mos kelishi kerak.

Initsializatsiya bo'limi - qavs ichiga olingan BOSHLASH END.
va boshqaruv asosiy dasturga o'tkazilishidan oldin bajariladigan operatorlarni o'z ichiga oladi. Bu bo'lishi mumkin ma'lumotlarni (o'zgaruvchilarni) ishga tushirish operatorlari Masalan, belgilash va kiritish operatorlari, shuningdek, fayllarni ulash va ochish protseduralari. Operatorlar bo'limi bo'lishi mumkin. bo'sh BOSHLASH END yoki shunchaki yo'q OXIRI .
Modul oxirida nuqta qo'yiladi.

Modullarni kompilyatsiya qilish va ishlatish

Operativ xotira tizimi segment tuzilishiga ega (bir segment 64K = 65535 baytga teng). Dastur kodi bo'lishi mumkin bitta segmentdan ko'p bo'lmagan, ma'lumotlar miqdori bitta segmentdan (dinamik xotiradan foydalanilmasa) va stek uchun bitta segmentdan oshmasligi kerak. Stack hajmi direktiv tomonidan o'rnatiladi ($M<>). Minimal stek hajmi sukut bo'yicha 1K, maksimal yagona segment esa 16K. Mahalliy o'zgaruvchilarning qiymatlari pastki dastur chaqirilganda stekga suriladi va chiqish paytida stekdan chiqariladi.
Modul kodi alohida segmentga joylashtirilgan, chunki u asosiy dasturdan avtonom tarzda efirga uzatiladi va dastur tomonidan ishlatiladigan modullar soni faqat mavjud OPga bog'liq. Bu sizga katta dasturlarni yaratish imkonini beradi.
Kompilyator bir xil nomli, lekin kengaytmali modul kodini yaratadi tpu (turbo paskal birligi).
Asosiy dastur yoki boshqa modullar tomonidan moduldan foydalanish uchun uning nomi (kengaytmasiz) takliflar ro'yxatiga kiritilgan. foydalanadi
Agar modul ixcham va tez-tez bo'lsa amaliy dasturlar tomonidan qo'llaniladi, uni standart modul kutubxonasiga joylashtirish mumkin TURBO.TPL (Turbo-Pasacal-kutubxona ) yordam dasturidan foydalanish TPUMOVER.
Ammo bu faqat favqulodda holatlarda amalga oshirilishi kerak. kutubxona OPga yuklanadi va dastur uchun joyni qisqartiradi.
Faylni modulning manba kodi bilan kompilyatsiya qilishda kengaytmali bir xil nomdagi fayl paydo bo'ladi tpu va variant bilan ko'rsatilgan katalogga joylashtiriladi

VARIANTLAR/DIREKTORIYALAR/BIRLIKLAR

yoki ushbu parametr mavjud bo'lmasa, joriy katalogda.
Asosiy dasturni kompilyatsiya qilishda foydalaniladigan modullar bo'lishi kerak variant tomonidan belgilangan katalogda
OPTIONS/DIRECTORIES/EXE VA TPU MA'LUMOTLARI

yoki ushbu parametr mavjud bo'lmaganda joriy katalogda
Olish uchun exe vazifa fayli variantida

TUZISH/MAQSAL/DISK (XOTIRA)
o'rnatish DISK .
Modullarni kompilyatsiya qilishning uchta rejimi mavjud:
- TURMUSH
-QURMOQ
- QILING

Menyu bo'yicha o'rnatiladigan rejimlar TURMUSH

1.Rejim TURMUSH(chaqirdi Alt-F9 ). Bunday holda, dastur kompilyatsiya qilinadi va ishlatiladigan modullar bo'lishi kerak. oldindan kompilyatsiya qilinadi va tegishli kataloglarda saqlanadi.
2.Rejim QURMOQ(chaqirdi - F9). Bunday holda, ilgari tuzilgan modullar e'tiborga olinmaydi va kengaytmali modullar pas va qayta kompilyatsiya qilingan.
3.Rejim QILING(chaqirdi F9). Bunday holda, faqat matnda o'zgarishlar bo'lgan modullar qayta kompilyatsiya qilinadi.

16.1-misol.

Fayl ichida inp.txt haqiqiy sonlarning uchta massivi mavjud

2.1 3.1 -2.4 5.6 5.4 -6.7 3.5 -3.6

Hisoblash funktsiyasi

bu yerda Max_a, Max_b, Max_c, Sa, Sb, Sc, ka, kb, kc maksimal element, yig'indisi va mos keladigan a, b va c massivlarning musbat elementlari soni.
Natijani faylga chiqaring tashqariga. Xabar va ekranda.

Modul matni

UNMAS;
Interfeys
Const n=10;
Type vec=real massivi;
Varz: vec;
i:integer;
f1,f2:matn;

Protsedura SK1(z:vec; son:bayt; Var s:real; Var k:bayt);
Funktsiya MAX(z:vec; son:bayt):real;

Amalga oshirish
ProcedureV(s:char; son:bayt;Var z:vec);
Boshlash
Writeln("Masiv",s);
i:=1 uchun do num
Boshlash
Read(f1,z[i]); Write(z[i]:4:1," ":3);
oxiri;
readln(f1); Yozilgan;
oxiri;

Protsedura SK1(z:vec;num:bayt; Var s:real; Var k:bayt);
Boshlash
s:=0; k:=0;
for i:=1 to num do if z[i]>0 keyin
Boshlash
s:=s+z[i];
k:=k+1
oxiri;
oxiri;
Funktsiya MAX(z:vec;num:bayt):real;
varm:real;
Boshlash
m:=z;
for i:=1 to num do if z[i]>m then m:=z[i];
MAX:=m
oxiri;

Boshlash
Assign(f1,"inp.txt"); qayta o'rnatish (f1);
Assign(f2,"out.txt"); Qayta yozish(f2)
oxiri.

Dastur matn

lr7_16 dasturi;
CRT, UNMAS dan foydalanadi;
Var
a,b,c:vec;
y,sa,sb,sc:real;
ka,kb,kc:bayt;
Boshlash
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("Natija:":20);
Yozing (“A massivi:”);
Writeln("sa=",sa:5:1," ka=",ka);
Write("B massivi:");
Writeln("sb=",sb:5:1," kb=",kb);
Write("C massivi:");
Writeln("sc=",sc:5:1," kc=",kc);
Writeln(" ":10,"y=",y:10);
readln;
Writeln(f2,"ђ§g"mv to:");
Writeln(f2," ":10,"y=",y:10);
yopish (f1);
Yopish(f2)
oxiri.

Dastur natijalari

Massiv a
-2.1 3.1 -2.4 5.6 5.4 -6.7 3.5 -3.6
Massiv b
2.3 -4.3 2.1 2.5 -3.7 -5.6 4.6 3.5 -7.5
Massiv c
-2.1 4.3 -2.3 7.6 4.5 -8.9 5.7 -4.5 6.8 -5.8
Natija:
a massivi: sa= 17,6 ka=4
b massivi: sb= 15,0 kb=5
c massivi: sc= 28,9 kc=5
y=9,330E+01

Paskalda modullar dasturning asosiy qismiga nisbatan ular kichik dasturlarga (protseduralar va funktsiyalar) o'xshaydi. Ammo ta'rifiga ko'ra, ular resurslaridan boshqa dasturlarda foydalanish mumkin bo'lgan mustaqil dasturlardir. Bundan tashqari, modullarning tavsifi chaqiruvchi ilovadan tashqarida, lekin alohida faylda sodir bo'ladi, shuning uchun modul alohida kompilyatsiya qilingan dastur hisoblanadi. Kompilyatsiya qilingan modul fayli (siz foydalanishingiz kerak bo'lgan) dasturlash muhiti tomonidan taqdim etilgan kengaytmaga ega bo'ladi (masalan, .tpu, .ppu, .pcu).

Modullar, qoida tariqasida, yirik loyihalar g'amxo'rlik qilishi kerak bo'lgan kodning ixchamligini ta'minlash uchun yaratiladi. Shuni ham ta'kidlash joizki, modullardan foydalanish qaysidir ma'noda xotira segmentatsiyasidagi cheklovni olib tashlaydi, chunki har bir modulning kodi alohida segmentda joylashgan.

Modul tuzilishi quyidagicha ko'rinadi:

birlik<имя модуля>;
Interfeys
<интерфейсная часть>
Amalga oshirish
<исполняемая часть>
Boshlash
<инициализация>
oxiri.

Modul nomi (birlik)

Kalit so'zdan keyingi modul nomi birlik, uning kodini o'z ichiga olgan fayl nomiga (.passiz) mos kelishi kerak. Shuningdek, nomdan foydalanib, modul boshqa modulga yoki asosiy dasturga ulanadi. Buning uchun xizmat so'zini ko'rsatishingiz kerak foydalanadi, va plaginlar ro'yxatini vergul bilan ajrating:

foydalanadi<список имен модулей>;

Interfeys qismi (interfeys)

Interfeys qismi boshqa modullar va dasturlar kirish huquqiga ega bo'lgan ob'ektlar sarlavhalarini tavsiflaydi. Bular konstantalar, turlar, o'zgaruvchilar va pastki dasturlar. Masalan, Qidiruv modulining interfeys qismi shunday ko'rinishi mumkin, unda massivdagi elementlarni qidirish algoritmlari mavjud.

1
2
3
4
5
6

birlik qidirish;
Interfeys

vars: string

Ushbu modulni e'lon qilish uchun dasturda uning nomini ko'rsatish kerak:

Shundan so'ng, interfeys qismida tasvirlangan barcha ob'ektlardan foydalanish mumkin bo'ladi.

Bajariladigan qism (amalga oshirish)

Ushbu bo'lim so'z bilan boshlanadi Amalga oshirish(amalga oshirish). Aynan shu erda siz interfeys qismida e'lon qilingan pastki dasturlarni tavsiflashingiz kerak. Shu bilan birga, ularning sarlavhalarida rasmiy parametrlarni ko'rsatmaslikka ruxsat beriladi, aks holda ular interfeys qismidagilarga to'liq mos kelishi kerak. Bundan tashqari, interfeys qismida modul uchun mahalliy (chaqiruvchi dasturga kirish imkoni bo'lmagan) ob'ektlar bo'lishi mumkin.

Boshlovchi qism

Boshlovchi qism o'z ishini asosiy dasturni bajarish boshlanishidan oldin boshlaydi. Unda (Begin va End oralig'ida), qoida tariqasida, har xil turdagi yordamchi ishlar uchun mo'ljallangan operatorlar tasvirlangan. Bu qism etishmayotgan yoki unda kod bo'lmasligi mumkin. Birinchi holda, End ni nuqta bilan belgilashingiz kerak, ikkinchisida Begin va End ichida bo'sh joy qoldiring.

Modullarni kompilyatsiya qilish

Dasturda faqat ilovani ishlab chiqish muhiti tomonidan taqdim etilgan kengaytmaga ega kompilyatsiya qilingan modullardan foydalanish mumkin. Ulardan uchta eng mashhurini ko'rib chiqing:

TurboPaskal

Turbo Paskalda modulni kompilyatsiya qilish natijasi kengaytmali fayl bo'ladi .tpu (Turbo Paskal birligi) bu uning kodini saqlaydi.

Bepul Paskal

Free Pascal muhitida modul kompilyatsiya qilingandan so'ng, turli ruxsatlarga ega ikkita fayl yaratiladi: .ppu va .o. Birinchisi modulning interfeys qismini o'z ichiga oladi, ikkinchisi (dasturni ulash uchun zarur) amalga oshirish qismidir.

Paskal ABC.NET

Pascal ABC.Net modullarni kompilyatsiya qilishda mashina tili kodini yaratmaydi. Agar kompilyatsiya muvaffaqiyatli bo'lsa, kod ruxsati bilan faylda saqlanadi .pcu.

Turbo Pascal va Free Pascal dasturlash muhitlari uchun uchta kompilyatsiya rejimi mavjud: Kompilyatsiya qilish, yaratish va qurish. Kompilyatsiya rejimida dasturda foydalaniladigan barcha modullar oldindan kompilyatsiya qilinishi kerak. Kompilyatsiya qilish rejimidagi ilova barcha ulangan modullarni dasturlash muhiti (.tpu yoki .o) uchun tegishli ruxsatnomaga ega fayllar mavjudligini tekshiradi. Agar ulardan birontasi topilmasa, topilmagan modul nomi va .pas kengaytmali fayl qidiriladi. Rejimlarning eng ishonchlisi Build. Ushbu rejimda fayllarni qidirish va kompilyatsiya qilish (.pas kengaytmasi bilan) hatto modul fayllari allaqachon mavjud bo'lganda ham sodir bo'ladi.

Misol

Massivdagi elementlarni ikkilik va chiziqli qidirish protseduralarini o'z ichiga olgan kichik modul yarataylik. Modul kodi:

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

birlik qidirish;
Interfeys
turi arr = butun sonli massiv [1 ..5];
vars: string
protsedura binary_search(x: integer ; Ar: arr; var s: string );
procedure line_search(x: integer ; Ar: arr; var s: string );
Amalga oshirish
var a, b, c, i: integer ;
protsedura binary_search(x: integer ; Ar: arr; var s: string );
boshlash
a:= 1 ; b:= 5 ; s:= 'YO'Q' ;
esa a<= b do
boshlash
c:= a+ (b- a) div 2 ;
agar (x b:= c- 1
Aks holda (x>Ar[ c] ) keyin
a:= c+ 1
boshqa
start s:= 'YES' ; sindirish; oxiri ;
oxiri ;
oxiri ;
procedure line_search(x: integer ; Ar: arr; var s: string );
boshlash
s:= 'YO'Q' ;
i uchun:= 1 dan 5 gacha
boshlash
agar (Ar[i] = x) u holda
boshlash
s:= 'HA' ; sindirish;
oxiri ;
oxiri ;
oxiri ;
oxiri.

Ushbu kodning barchasi alohida faylda bo'lishi kerak. Endi asosiy dasturni yozamiz, unda biz qidiruv modulimizni ulaymiz.

Modul (birlik) doimiylar, ma'lumotlar turlari, o'zgaruvchilar, protseduralar va funktsiyalar to'plamidir. Har bir modul alohida Paskal dasturiga o'xshaydi: u sizning dasturingiz boshlanishidan oldin chaqiriladigan va kerakli ishga tushirishni amalga oshiradigan asosiy qismga ega bo'lishi mumkin. Xulosa qilib aytganda, modul bu sizning dasturingizga kiritishingiz mumkin bo'lgan va dasturni alohida tuzilgan qismlarga bo'lish imkonini beruvchi deklaratsiyalar kutubxonasi.

Turbo Paskal sizga ko'p sonli o'rnatilgan konstantalar, ma'lumotlar turlari, o'zgaruvchilar, protseduralar va funktsiyalarga kirish imkonini beradi. Ulardan ba'zilari Turbo Paskal uchun xosdir; boshqalari IBM PC (va mos keluvchi kompyuterlar) yoki MS-DOS operatsion tizimi uchun xosdir. Ularning soni juda ko'p, ammo dasturingizda siz ularni bir vaqtning o'zida kamdan-kam ishlatasiz. Shuning uchun ular modullar deb ataladigan o'zaro bog'liq guruhlarga bo'linadi. Bunday holda, siz faqat dasturda zarur bo'lgan modullardan foydalanishingiz mumkin.

Modul tuzilishi

Modul konstantalar, ma'lumotlar turlari va o'zgaruvchilar tomonidan qo'llab-quvvatlanadigan protseduralar va funktsiyalar orqali funktsiyalar to'plamini ta'minlaydi, ammo modul ikki bo'limga bo'linganligi sababli bu xususiyatlarning haqiqiy amalga oshirilishi yashiringan: interfeys va amalga oshirish. Agar dastur moduldan foydalansa, u holda barcha modul deklaratsiyasi xuddi o'zida aniqlangandek ushbu dastur uchun mavjud bo'ladi.

Modulning tuzilishi dasturnikiga o'xshaydi, biroq bir nechta muhim farqlar mavjud. Masalan, modulni ko'rib chiqing:

birlik<идентификатор>; interfeysdan foydalanadi<список модулей>; (ixtiyoriy) (ochiq tavsiflar) amalga oshirish (yopiq protsedura va funksiya tavsiflari) boshlash (boshlash kodi) oxiri.

Modul sarlavhasi, xuddi dastur nomidagi kabi, ajratilgan so'z birligidan so'ng modul nomi (identifikator) bilan boshlanadi. Modulning keyingi elementi interfeys kalit so'zidir. U modul interfeysi bo'limining boshlanishini belgilaydi - uni ishlatadigan barcha boshqa modullar yoki dasturlarga ko'rinadigan bo'lim.

Modul boshqa modullardan foydalanishi mumkin, buning uchun ular uses bandida aniqlanadi. Uses bandi, agar mavjud bo'lsa, interfeys kalit so'zidan keyin darhol keladi. E'tibor bering, uses bandidan foydalanishning umumiy qoidasi bu erda qondiriladi: agar uses bandida nomi ko'rsatilgan modul boshqa modullardan foydalansa, u holda bu modullarning nomlari ham uses bandida va ulardan foydalanishdan oldin ko'rsatilishi kerak.

Standart modullar

TURBO.TPL faylida Graph va moslik paketlaridan (Graph3 va Turbo3) tashqari barcha standart paketlar mavjud: System, Overlay, Crt, Dos va Printer. Bu paketlar Turbo Paskal yordamida xotiraga yuklanadi va har doim siz uchun mavjud. Odatda, TURBO.TPL fayli TURBO.EXE (yoki TPC.EXE) bilan bir xil katalogda saqlanadi. Turbo Paskal katalogi sifatida tavsiflangan bo'lsa, uni boshqa katalogda saqlashingiz mumkin. Buning uchun TURBO.EXE faylida ushbu katalogni o'rnatish uchun TINST.EXE dan foydalaning.

Ishlatilgan paketlar: yo'q

Tizim Turbo Paskalning barcha standart va o'rnatilgan protseduralari va funktsiyalarini o'z ichiga oladi. Standart Paskal tilining bir qismi bo'lmagan va boshqa modullarda topilmagan har qanday Turbo Paskal quyi dasturi Tizimda mavjud. Ushbu modul barcha dasturlarga biriktirilgan.

Ishlatilgan paketlar: yo'q

DOS GetTime, SetTime, DiskSize va boshqalar kabi eng ko'p qo'llaniladigan DOS qo'ng'iroqlariga ekvivalent bo'lgan ko'plab Paskal tartiblari va funktsiyalarini belgilaydi. Bundan tashqari, u har qanday MS-DOS chaqiruvi yoki tizim uzilishini faollashtirish imkonini beruvchi MsDos va Intr ikkita past darajadagi dasturlarni belgilaydi. Registrlar - MsDos va Intr-dagi parametr uchun ma'lumotlar turi. Bundan tashqari, ba'zi boshqa konstantalar va ma'lumotlar turlari aniqlanadi.

Ishlatilgan paketlar: yo'q

Overlay - qoplamali dasturlarni yaratish vositalarini o'z ichiga oladi. OVERKAY dasturi hammasini emas, balki qisman yuklaydigan dasturdir.

Ishlatilgan paketlar: yo'q

Crt konstantalar, o'zgaruvchilar va kiritish-chiqarish operatsiyalari uchun dasturlarning shaxsiy kompyuterga xos tavsiflari to'plamini taqdim etadi. Ikkinchisi ekran bilan ishlash uchun ishlatilishi mumkin (oynalarni sozlash, kursorni to'g'ridan-to'g'ri boshqarish, matn va fon ranglari). Bundan tashqari, siz "xom" klaviatura kiritishingiz va shaxsiy kompyuterning ovoz ishlab chiqarish platasini boshqarishingiz mumkin. Ushbu modul 3.0 versiyasida standart bo'lgan ko'plab tartiblarni taqdim etadi.

Ishlatilgan paketlar: Crt

Printer moduli matnli fayl o‘zgaruvchisi Lstni belgilaydi, u qurilma drayveri bilan bog‘langan bo‘lib, u standart Paskal chiqishini Write va Writeln yordamida printerga yuborish imkonini beradi. Masalan, Printerni dasturingizga kiritish orqali siz quyidagilarni amalga oshirishingiz mumkin:

Yozing (Lst,"sum " ,A:4 ," va " ,B:4 ," teng " ); C:=A+B; WriteIn(Lst,C:8) ;

Ishlatilgan paketlar: Crt

Graph3 3.0 versiyasi uchun grafik tartiblarning to'liq to'plamini qo'llab-quvvatlaydi - oddiy grafikalar, kengaytirilgan grafikalar va nisbatan buyruqlar yordamida grafikalar uchun. Ular nomi, funksiya parametrlari va 3.0 versiyasining tartiblari jihatidan bir xil.

Ishlatilgan paketlar: Crt

Ushbu modul ikkita o'zgaruvchi va Turbo Paskal tomonidan qo'llab-quvvatlanmaydigan bir nechta protseduralarni o'z ichiga oladi. Bularga oʻrnatilgan Kbd fayl oʻzgaruvchisi, CBreak mantiqiy oʻzgaruvchisi va MemAvail va MaxAvailning asl butun son versiyalari kiradi (ular asl versiyadagi kabi baytlarni emas, paragraflarda boʻsh xotirani qaytaradi).

Ishlatilgan paketlar: Crt

Grafik shaxsiy kompyuteringizning grafik imkoniyatlaridan toʻliq foydalanish imkonini beruvchi tez va samarali grafik tartiblar toʻplamini taqdim etadi.

Ushbu modul CGA, EGA, Hercules, ATT 400, MCGA, 3270 PC va VGA grafik adapterlarini qo'llab-quvvatlash imkonini beruvchi Borland qurilmasidan mustaqil grafik drayverini amalga oshiradi.

O'z modullaringizni yozish

Aytaylik, siz IntLib modulini yozdingiz, uni INTLIB.PAS fayliga yozdingiz va diskka tarjima qildingiz; olingan kod INTLIB.TRU faylida. Ushbu modulni dasturingizda ishlatish uchun kompilyatorga qaysi moduldan foydalanishni aytib berish uchun dasturingizga uses bayonotini kiritishingiz kerak. Sizning dasturingiz quyidagicha ko'rinishi mumkin:

MyProg dasturi; IntLib dan foydalanadi;

E'tibor bering, Turbo Paskal modulni o'z ichiga olgan fayl modulning o'zi bilan bir xil nomga ega deb hisoblaydi. Agar sizning modulingiz nomi MyUtilities bo'lsa, Turbo Paskal MYUTILIT.PAS nomli faylni qidiradi.

Modul kompilyatsiyasi

Modul aynan dastur qanday kompilyatsiya qilingan bo'lsa, xuddi shunday kompilyatsiya qilinadi: u muharrir yordamida yaratiladi va keyin Compile / Compile buyrug'i (Compile / Compile) deb ataladi (yoki Alt-C tugmalari bosiladi). Biroq, .EXE kengaytmali fayl o'rniga Turbo Paskal .TRU (Turbo Pascal Unit - Turbo Pascal Unit) kengaytmali faylni yaratadi. Shundan so'ng siz ushbu faylni avvalgidek qoldirishingiz yoki TPUMOVER.EXE yordamida TURBO.TPL ga kiritishingiz mumkin.

Har qanday holatda *.TRU fayllarini (manba fayllar bilan birga) O/D/Unit kataloglari buyrug'i bilan aniqlangan birlik katalogiga yuborish mantiqan to'g'ri keladi. Har bir manba faylda faqat bitta modul bo'lishi mumkin, chunki yakunlovchi yakuniy bayonotga duch kelgan zahoti kompilyatsiya to'xtaydi.

Misol:

Keling, kichik modul yozamiz. Keling, uni IntLib deb nomlaymiz va unga butun sonlar uchun ikkita oddiy pastki dasturni - protsedura va funksiyani kiritamiz:

IntLib birligi; interfeys protsedurasi ISwap(var I,J: integer ); funktsiya IMax(I,J: integer ) : integer ; amalga oshirish tartibi ISwap; var Temp: integer ; beginTemp:=I; I:=J; J:=temp end ; (ISwap protsedurasining oxiri) IMax funktsiyasi; start agar I > J keyin IMax:=I else IMax:=J end ; (IMax funktsiyasining oxiri) oxiri. (IntLib modulining oxiri)

Keling, ushbu kichik dasturni kiritamiz, uni INTLIB.PAS fayliga yozamiz va keyin uni diskka tarjima qilamiz. Natijada INTLIB.TRU faylida modul kodini olamiz. Keling, uni modullar katalogiga yuboramiz. Quyidagi dastur IntLib modulidan foydalanadi:

IntTest dasturi; IntLib dan foydalanadi; varA,B: butun son; yozishni boshlash ( "Ikkita butun qiymatni kiriting:"); Readln(A,B); ISwap(A,B); WriteIn("A=" ,A," B=" ,B); yozmoq ( "Maksimal qiymat",IMax(A,B) ); oxiri. (IntTest dasturining oxiri)

Modul ichidagi barcha deklaratsiyalar bir-biri bilan bog'liq. Masalan, Crt moduli shaxsiy kompyuteringizdagi ekran tartiblari uchun zarur bo'lgan barcha tavsiflarni o'z ichiga oladi.

Paskal tilida modullar yordamida tuzilgan dasturlash texnologiyasini amalga oshirish uchun pastki dasturlar kutubxonalaridan foydalaniladi. Matn jihatdan kutubxonalar Paskal tilining modullari deb ataladigan mustaqil dastur birliklariga birlashtirilgan. Modullar tartiblar kutubxonalarini amalga oshirish uchun yaratilgan. Odatda modullar bir sinfdagi vazifalarni bajaradigan kichik dasturlarni birlashtiradi.

Modul avtonom kompilyatsiya qiluvchi va ma'lum tuzilishga ega bo'lgan mustaqil dastur birligidir.

Modul quyidagi tuzilishga ega:

Paskal modulining sarlavhasi Unit xizmat so'zidan keyin modul nomidan iborat. Modul nomiga qat'iy talablar qo'yiladi va bu nom modul matnini o'z ichiga olgan .pas kengaytmali disk fayli nomiga mos kelishi kerak.

UnitMyType; //fayl MyType.pas

Modul nomi modulni dasturlar va boshqa modullarga ulash uchun ishlatiladi. Dasturlar va modullar dastur yoki modulning Foydalanish bo'limida kerakli modulga bog'lanadi. Modullar o'z ishi uchun boshqa modullarni chaqirishi mumkin, agar modul boshqa modulni chaqirsa, Foydalanish bo'limi INTERFACE kalit so'ziga amal qilishi kerak.

Paskal tilining interfeys qismi zaxiralangan INTERFACE so'zidan boshlanadi. U modulni xost dasturi yoki boshqa modullar bilan bog'lash uchun xizmat qiladi. Interfeys qismida modulning barcha global ob'ektlari deklaratsiyasi mavjud. Avvalo, kichik dasturlar va qo'shimcha ravishda global tiplar va o'zgaruvchilar e'lon qilinadi. Agar ob'ekt global miqyosda e'lon qilingan bo'lsa, u holda uni chaqiruvchi dastur va modulda maxsus deklaratsiyasiz ishlatish mumkin.

Suv massasi birligi;

INTERFACE

MyType dan foydalanish;

[tur_nomi]:[turi];

[global_o'zgaruvchilar_ro'yxati]:[turi];

Interfeys qismida subprogrammalar o'z sarlavhalari orqali e'lon qilinadi, ular quyi dastur nomini va rasmiy parametrlar ro'yxatini o'z ichiga oladi.

Paskal tilining bajariladigan qismi IMPLEMENTATION xizmat so'zi bilan boshlanadi va interfeys qismida e'lon qilingan kichik dasturlarning tavsifini o'z ichiga oladi, bundan tashqari modul uchun lokal ob'ektlar (o'zgaruvchilar, konstantalar) bajariladigan qismida e'lon qilinishi mumkin. Ijro etuvchi qismdagi kichik dasturning tavsifi pastki dastur nomidan boshlanishi kerak, bunda rasmiy parametrlar ro'yxati o'tkazib yuboriladi.

Paskal tilining boshlang'ich qismi modulni tugatadi va bu qism bo'lmasligi yoki bo'sh bo'lishi mumkin. Boshlovchi qismni bajarish tavsiya etilmaydi, chunki osilgan vaziyatlar yuzaga kelishi mumkin. U bajariladigan bayonotlarni o'z ichiga oladi, global o'zgaruvchilarning boshlang'ich qiymatlarini o'rnatadi, kerakli fayllarni ochadi va boshqa fayllar bilan aloqalarni o'rnatadi.

Paskalda modullarni kompilyatsiya qilish

Modullar bilan ishlashda siz modullarni o'zlari kompilyatsiya qilishingiz va modullardan foydalanadigan dasturlarni kompilyatsiya qilishingiz kerak. Ma’lumki, Borland Paskal muhitida kompilyatsiya qilishning uchta rejimi mavjud (Compile, Build, Make). Modulning o'zini kompilyatsiya qilishda odatda Kompilyatsiya rejimi qo'llaniladi, garchi modul boshqa modullar tomonidan ishlatilsa, boshqa rejimlar ham mumkin. Modulni kompilyatsiya qilish bajariladigan dasturni yaratmaydi, balki .tpw kengaytmali maxsus kompilyatsiya qilingan modul faylini yaratadi. Kompilyatsiya qilingan birlik fayllari kataloglarga joylashtiriladi, odatda Units deb nomlanadi (atrof-muhit sozlamalarida ko'rsatilgan). Modullarni o'z ichiga olgan dasturlarni kompilyatsiya qilishda barcha uchta kompilyatsiya rejimidan foydalanish mumkin. Turli rejimlarni kompilyatsiya qilish muddati va ishonchliligi bilan farqlanadi.

Rejim Kompilyatsiya qilish- eng oddiy va eng tez. Ushbu rejimda kompilyator Foydalanish bo'limida plaginlarning mavjudligini tekshiradi va agar mavjud bo'lsa, dasturlarni kompilyatsiya qiladi. Agar modul yo'q bo'lsa, kompilyatsiya to'xtaydi va etishmayotgan modul haqida xabar ko'rsatiladi.

Rejimda Qilish kompilyator plaginlarning mavjudligini tekshiradi, agar modul topilmasa, kompilyator .pas kengaytmali modul matnini qidiradi, modulni kompilyatsiya qiladi va keyin dasturni kompilyatsiya qiladi. Bundan tashqari, kompilyator .tpw va .pas modullarining yaratilish sanalarini tekshiradi. Agar u .pas faylining yaratilish sanasi .tpw faylidan kechroq ekanligini aniqlasa, u modul matniga o'zgartirishlar kiritilganligini aniqlaydi va modullarni qayta kompilyatsiya qiladi. Shunday qilib, u yanada ishonchli.

Rejimda Qurmoq barcha .tpw fayllari e'tiborga olinmaydi, kompilyator asosiy dasturda ishlatiladigan barcha modullarni qayta kompilyatsiya qiladi va dasturni kompilyatsiya qiladi. Bu eng ishonchli rejim, lekin ayni paytda eng uzun.

Maqola yoqdimi? Do'stlar bilan baham ko'ring: