Pascal II. 01. Eljárások, függv... 01. Gyakorló feladatok 02. Felsorolt típus, ... 02. Gyakorló feladatok 03. Állományok kezelése 03. Gyakorló feladatok 04. Unitok, CRT unit 04. Gyakorló feladatok 05. DOS unit, rendezé... 05. Gyakorló feladatok 06. Rekurzió, quicksort 06. Gyakorló feladatok 07. Backtracking 07. Gyakorló feladatok 08. GRAPH unit 08. Gyakorló feladatok 09. Kép mozgatása 09. Gyakorló feladatok 10. Winmouse unit 10. Gyakorló feladatok 11. Dinamikus adatsze... 11. Gyakorló feladatok 12. Dinamikus adatsze... 12. Gyakorló feladatok 13. Dinamikus adatsze... 13. Gyakorló feladatok
|
Programozás 2 (Pascal)
4 Unitok,
crt unit
4.1 Unitok
Mik azok a unitok?
A unit önállóan lefordítható
programegység, amely jól definiált kapcsolódási felületen (interface) keresztül
kapcsolódik a program más részeihez. Alapvetõ elv a moduláris programozás során,
hogy a modulok belsõ része (implementation) rejtett marad a külvilág számára.
Valójában az egyes unitok újabb eljárásokat, függvényeket, konstansokat és
típusokat tartalmaznak, így ezeket a unitokat használva további eljárásokat,
függvényeket ill. típusokat használhatunk a
programjainkban.
A pascal rendszer sok
szabványos modullal rendelkezik, amelyek hasznos típust, konstanst, eljárást és
függvényt tartalmaznak. Ezek közül a leggyakrabban használtak:
- system unit - ez a
unit automatikosan hozzákapcsolódik minden pascal programhoz, ez tartalmazza
tartalmazza a szabványos pascal nyelv eljárásait és függvényeit, melyek közül
már néhányat megismerkedtünk (pl. write, writeln, read, readln, inc, dec,
abs, ...),
- crt unit -
elsõsorban a képernyõ szöveges üzemmódját támogató eljárásokat és függvényeket
tartalmaz. Ezek segítségével lehetõség van a kurzor pozícionálására, a
használt színek beállítására. Ezen kívül a modul tartalmaz néhány eljárást,
amelyek segítségével a billentyűzet speciális módon érhetõ el, továbbá a
unit segítségével lehetõség
adódik hanggenerálásra is.
- dos unit - azok az
eljárásokat és függvényeket tartalmazza, melyek segítségével hatékonyabban
kihasználhatjuk az DOS operációs rendszer lehetõségeit - pl. idő. dátum
lekérdezése, mappákkal, állományokkal való munka,
- graph unit - a
képernyõ grafikus üzemmódját támogató típusok, konstansok, eljárások és
függvények gazdag készletét tartalmazza,
-
wincrt unit - window
operációs rendszer alatt futó program grafikus ablakában használható crt
unit,
- winmouse unit
- windows operációs rendszer alatt futó program grafikus ablakában
használható unit, amely az egér kezelésére szolgál,
-
string unit - #0
karakterrel végzõdõ dinamikus stringek tamogatása.
Ahhoz hogy valemelyik unitot (unitokat)
használhassunk a programunkban, meg kell adnunk a uses hivatkozás után a
unit nevét. Ez alól egyedüli kivétel a system unit, mivel ez automatikusan
hozzákapcsolódik minden pascal programhoz.
program unitok; uses
crt; var ....
; begin .... end.
Használhatunk
egyszerre több unitot is, ekkor vesszõvel választjuk el õket:
program unitok; uses crt, dos,
graph; var ....
; begin .... end.
4.2 Crt
unit
A crt unit segítségével lehetõségünk van színek
használatára szöveges módban. Összesen 16 színt használhatunk, ezek mindegyikére
van a crt unitban definiálva egy konstans is:
Black = 0;
Blue = 1;
Green = 2;
Cyan = 3;
Red = 4;
Magenta = 5;
Brown = 6;
LightGray = 7;
DarkGray = 8;
LightBlue = 9;
LightGreen = 10;
LightCyan = 11;
LightRed = 12;
LightMagenta = 13;
Yellow = 14;
White = 15;
Így ha valamilyen színt szeretnénk
használni,
megadhatjuk a szín számát (pl. 4) vagy helyette a hozzá
tartozó konstant, ami nem más mint a szín angol neve (pl. red). A szöveg színét
a textcolor paranccsal állíthatjuk be. A textcolor parancs után addig
lesz érvényes a megadott szín, amíg azt nem állítjuk át egy másik színre a textcolor paranccsal. Pl.:
program Pelda13; uses
crt; begin clrscr; textcolor(red); writeln('Ez a
ket sor'); writeln('pirossal van
irva.'); textcolor(10); writeln('Ez pedig
vilagoszolddel.'); textcolor(7); writeln('Ez mar az eddig
megszokott szurkevel.'); end.
A clrscr parancs a képernyõ
letörlésére szolgál. A képernyõtörlés után a kurzor átáll az elsõ sor elsõ
oszlopába.
A szöveg (betűk) színéhez hasonló módon megadhatjuk
a szöveg háttérszínét is. Ezt a textbackground paranccsal tehetjük
meg.
program Pelda14; uses
crt; begin clrscr; textbackground(blue); textcolor(yellow); writeln('Sarga
betu kek
haterrel.'); textbackground(0); textcolor(7); writeln('Eredeti
- szurke betu feketen.'); end.
A gotoxy( oszlop
, sor ) parancs segítségével beállíthatjuk
a kurzor pozícióját a képernyõn, így segítségével bárhová ki tudunk írni szöveget a
képernyõre. Ehhez tudnunk kell, hogy a képernyõ felbontása szöveges módban
80x25, tehát 1-tõl 80-ig állíthatjuk be az oszlopot és
1-tõl 25-ig a sort. A következõ példa letörli a képernyõt, majd
kiírja a képernyõ közepére a "Hello" szót.
program Pelda15; uses
crt; begin clrscr; gotoxy(39,13); write('Hello'); end.
A crt unit tartalmaz a bilentyűzetrõl
való beolvasáshoz is egy függvényt, ez a readkey. Ez a parancs vár egy
billentyű megnyomására. A lenyomott billentyűt a readkey függvény
visszadja, így azt megjegyezhetjük (egy char típusú változóban).
program Pelda16; uses
crt; var c:char; begin clrscr; writeln('Nyomj meg egy
betut!'); c:=readkey; writeln('Az ',c,' billentyut nyomtad
meg!'); writeln('Nyomj meg egy tetszoleges
billentyut.'); readkey; end.
Másik hasznos billentyűzettel kapcsolatos
függvény a keypressed. Ennek értéke igaz/hamis lehet. Értéke akkor igaz,
ha a felhasználó lenyomott valamilyen billentyűt. Ilyenkor a lenyomott
billentyűt a readkey segítségével olvashatjuk ki. A
következő program addig fogja a "Hello!" szót kiírni a képernyőre véletlenszám
generátorral kigenerált helyre véletlen
színnel, amíg nem nyomunk meg egy billentyűt.
program Pelda17; uses crt; var
c:char; begin clrscr; repeat gotoxy(random(75)+1,random(24)+1); textcolor(random(15)+1); write('Hello!'); delay(100); until
keypressed; c:=readkey; end.
A delay(100) parancs leállítja 100
millisekundumra a program futását, tehát minden kiírás után vár 100 msec-ot.
Ennek a parancsnak a segítségével tudjuk a fenti programunkban megadni, hogy milyen
gyorsan
írja ki a program a képernyõre az üzeneteket.
A következõ program kiírja egy lenyomott
billentyű ASCII kódját. Ez a program hasznos segédprogram lehet a későbbiekben, ha meg
szeretnénk határozni melyik billentyűhöz milyen ASCII kód tartozik. Az ESC
kódja a 27, ezért van a ciklus feltételénél a c=#27 kifejezés. A ciklus tehát akkor
fejezõdik be, ha a c-ben levõ karakter ASCII kódja egyenlõ 27-tel, vagyis ha
az ESC billentyűt nyomtuk meg.
program Pelda18;
uses crt;
var c:char;
begin
clrscr;
repeat
c:=readkey;
writeln(c,' kodja: ',ord(c));
until c=#27;
end.
Ennek a programnak a segítségével figyeljük meg az egyes
billentyűk ASCII kódjait. Észrevehetjük, hogy némelyik billentyűnél - pl. F1,
F2, ... és a nyilak lenyomásánál két kód jelenik meg. Ez azért van, mivel ezeknél
a gomboknál a billentyűzet két kódot küld a számítógépnek, előszőr a 0-t, majd
egy másik kódot.
Az alábbi program bemutatja hogyan készíthetünk
egy egyszerű menüt az eddig tanultak alapján, melyben a felfelé ill. lefelé
nyilak segítségével mozoghatunk, Enter-rel aktiválhatjuk a kiválasztott menüpontot
és Esc-el léphetünk ki a programból:
program Pelda19;
uses crt;
var k:integer; { ebben
fogjuk tarolni, hogy eppen melyik menuponton vagyunk }
c:char;
begin
clrscr;
k:=1;
{ kiirja a menut }
textbackground(red);
textcolor(white);
gotoxy(10,10);
write(' Elso ');
textbackground(blue);
textcolor(yellow);
gotoxy(10,11);
write(' Masodik ');
gotoxy(10,12);
write(' Harmadik ');
{ a kurzort beallitjuk
a jobb also sarokba }
gotoxy(80,25);
{ beolvas egy
billentyut es a menut ettol fuggoen atrajzolja }
repeat
c:=readkey;
{ ha valamelyik nyil
lett megnyomva }
if c=#0 then begin
{ atfestjuk a
kivalasztottat kekre }
textbackground(blue);
textcolor(yellow);
gotoxy(10,9+k);
case k of
1: write(' Elso ');
2: write(' Masodik ');
3: write(' Harmadik ');
end;
{ megnezzuk melyik
billentyut nyomta meg a felhasznalo
es ettol fuggoen
megvaltoztatjuk a k erteket }
c:=readkey;
case c of
#72: if k>1 then dec(k);
{ #72 = felfele nyil }
#80: if k<3 then inc(k);
{ #80 = lefele nyil }
end;
{ atfestjuk az uj
kivalasztottat pirosra }
textbackground(red);
textcolor(white);
gotoxy(10,9+k);
case k of
1: write(' Elso ');
2: write(' Masodik ');
3: write(' Harmadik ');
end;
{ a kurzort beallitjuk a
jobb also sarokba }
gotoxy(80,25);
end;
{ ha #13 = Enter lett
megnyomva }
if c=#13 then begin
gotoxy(10,15);
textbackground(0);
textcolor(7);
writeln('Kivalaszottad a(z) ',k,'. menupontot!');
gotoxy(80,25);
end;
until c=#27;
end.
A
crt unit segítségével hangokat is adhatunk ki. Erre a sound( frekvencia )
ill. a nosound parancsok szolgálnak.
Pl.
program Pelda20;
uses crt;
begin
sound(800);
delay(1000);
sound(1200);
delay(500);
sound(1000);
delay(500);
nosound;
end.
A
crt unit összes eljárásának, függvényének és konstansának részletes leírása
mintapéldákkal megtalálható a FreePascal súgójában (dokumentációjában).
|